Oxygen 中的 XPath 和 CSS XML 作者:如何在 oxy_xpath 中创建动态参数
XPath and CSS in Oxygen XML Author: How to create a dynamic parameter in oxy_xpath
我正在创建一个 Oxygen 框架以在 Oxygen XML 作者的作者模式下显示 XML 数据。这是 XML 我有两个节点 的一部分:
<TEI>
<text>
<body>
<div n="A">
<ab xml:id="n_d2e23" type="person">
<seg type="name">
<persName>
<surname>Aarberg</surname>,
<forename>Peter von</forename>
</persName>
<roleName>König</roleName>
(<date from="ca. 1300" to="vor 1372">ca. 1300–vor 1372</date>)
</seg>
<seg type="affiliations">
<list>
<item>
<affiliation role="CEO" hkg:orgKey="#n_123_456">Best CEO they ever had</affiliation>
</item>
</list>
</seg>
</ab>
<ab xml:id="n_123_456" source="SW_EB" type="organization">
<seg type="name">
<orgName>Altenburger Hofdruckerei</orgName>
</seg>
</ab>
</div>
</body>
</text>
</TEI>
第一个 节点有一个属性 hkg:orgKey="#n_123_456" 引用第二个 节点的属性 xml:id="n_123_456"。我使用以下 CSS 在 Oxygen XML 中的第一个 节点的可视化表示中显示第二个 节点的 值 XML 作者:
affiliation:after {
content: " role: " oxy_textfield(
edit, "@role")
" Organization ID: " oxy_textfield(
edit, "@hkg:orgKey")
"Organization name: " oxy_xpath(
"/TEI/text/body/div/ab[@xml:id='n_123_456']/seg[@type='name']/orgName/text()"
)
" " oxy_url("gfx/link_register.png");
link: attr("hkg:orgKey")
}
这很好用,第二个 节点的 的值实际上 "Altenburger Hofdruckerei" 显示在第一个 节点中 - 只要我使用具体值 hkg:orgKey="#n_123_456"。但现在我需要创建行
/TEI/text/body/div/ab[@xml:id='n_123_456']/seg[@type='name']/orgName/text()
动态这意味着:而不是特定值 xml:id=n_123_456 它应该使用 的任何值第一个元素 的节点 的属性 @hkg:orgKey 是。我试过这个:
/TEI/text/body/div/ab[@xml:id=@hkg:orgKey]/seg[@type='name']/orgName/text()
但它不起作用。我还尝试了其他变体,例如 ab[@xml:id='@hkg:orgKey'] 或 ab[@xml:id =attr('hkg:orgKey')] 等等,但其中 none 给了我预期的结果。
可能是语法问题。我真的希望有一个解决方案,我将非常感谢您的帮助。感谢任何帮助。
我尝试发送尽可能多的代码,但当然缩短了一些与此上下文无关的部分。如果缺少(或太多)东西,请告诉我。
提前致谢。
我假设您已经在 CSS 中声明了 "hkg" 前缀的映射,例如:
@namespace hkg "someNamespace";
我会替换:
link: attr("hkg:orgKey")
与:
link: attr(hkg|orgKey);
因为在 CSS 中,您使用 "prefix|elementName" 而不是 "prefix:elementName" 来引用命名空间元素。
至于主要问题,这一行:
oxy_xpath("/TEI/text/body/div/ab[@xml:id='n_123_456']/seg[@type='name']/orgName/text()")
与:
oxy_xpath(oxy_concat("/TEI/text/body/div/ab[@xml:id='", oxy_substring(attr(hkg|orgKey), 1), "']/seg[@type='name']/orgName/text()"))
我正在使用 oxy_concat 跳出字符串文字,计算属性值并在更大的 XPath 表达式中使用它的值。我使用 "oxy_substring" 从属性引用中删除了“#”。
我正在创建一个 Oxygen 框架以在 Oxygen XML 作者的作者模式下显示 XML 数据。这是 XML 我有两个节点
<TEI>
<text>
<body>
<div n="A">
<ab xml:id="n_d2e23" type="person">
<seg type="name">
<persName>
<surname>Aarberg</surname>,
<forename>Peter von</forename>
</persName>
<roleName>König</roleName>
(<date from="ca. 1300" to="vor 1372">ca. 1300–vor 1372</date>)
</seg>
<seg type="affiliations">
<list>
<item>
<affiliation role="CEO" hkg:orgKey="#n_123_456">Best CEO they ever had</affiliation>
</item>
</list>
</seg>
</ab>
<ab xml:id="n_123_456" source="SW_EB" type="organization">
<seg type="name">
<orgName>Altenburger Hofdruckerei</orgName>
</seg>
</ab>
</div>
</body>
</text>
</TEI>
第一个
affiliation:after {
content: " role: " oxy_textfield(
edit, "@role")
" Organization ID: " oxy_textfield(
edit, "@hkg:orgKey")
"Organization name: " oxy_xpath(
"/TEI/text/body/div/ab[@xml:id='n_123_456']/seg[@type='name']/orgName/text()"
)
" " oxy_url("gfx/link_register.png");
link: attr("hkg:orgKey")
}
这很好用,第二个
/TEI/text/body/div/ab[@xml:id='n_123_456']/seg[@type='name']/orgName/text()
动态这意味着:而不是特定值 xml:id=n_123_456 它应该使用 的任何值第一个元素
/TEI/text/body/div/ab[@xml:id=@hkg:orgKey]/seg[@type='name']/orgName/text()
但它不起作用。我还尝试了其他变体,例如 ab[@xml:id='@hkg:orgKey'] 或 ab[@xml:id =attr('hkg:orgKey')] 等等,但其中 none 给了我预期的结果。
可能是语法问题。我真的希望有一个解决方案,我将非常感谢您的帮助。感谢任何帮助。
我尝试发送尽可能多的代码,但当然缩短了一些与此上下文无关的部分。如果缺少(或太多)东西,请告诉我。
提前致谢。
我假设您已经在 CSS 中声明了 "hkg" 前缀的映射,例如:
@namespace hkg "someNamespace";
我会替换:
link: attr("hkg:orgKey")
与:
link: attr(hkg|orgKey);
因为在 CSS 中,您使用 "prefix|elementName" 而不是 "prefix:elementName" 来引用命名空间元素。
至于主要问题,这一行:
oxy_xpath("/TEI/text/body/div/ab[@xml:id='n_123_456']/seg[@type='name']/orgName/text()")
与:
oxy_xpath(oxy_concat("/TEI/text/body/div/ab[@xml:id='", oxy_substring(attr(hkg|orgKey), 1), "']/seg[@type='name']/orgName/text()"))
我正在使用 oxy_concat 跳出字符串文字,计算属性值并在更大的 XPath 表达式中使用它的值。我使用 "oxy_substring" 从属性引用中删除了“#”。