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" 从属性引用中删除了“#”。