XPath и CSS в Oxygen XML Автор: Как создать динамический параметр в oxy_xpath - PullRequest
0 голосов
/ 27 октября 2019

Я создаю Oxygen Framework для отображения данных XML в авторском режиме Oxygen 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. Автор:

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")
}

Это прекрасно работает изначение 2-го узла, фактически "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 узла 1-го элемента is. Я попробовал это:

/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')] * иеще много, но ни один из них не дал мне ожидаемого результата.

Возможно, это проблема синтаксиса. Я действительно надеюсь, что будет решение этой проблемы, и я был бы очень благодарен за помощь. Любая помощь приветствуется.

Я пытался отправить столько кода, сколько необходимо, но, конечно, сократил некоторые части, не относящиеся к этому контексту. Если чего-то не хватает (или слишком много), пожалуйста, дайте мне знать.

Заранее спасибо.

1 Ответ

1 голос
/ 28 октября 2019

Я предполагаю, что вы уже объявили в 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», чтобы удалить «#» из ссылки на атрибут.

...