xsl: проверить, равны ли обе строки, если true, тогда отобразить другую строку
У меня первый TEI
какой контент используется для XSLT
что вы можете найти здесь http://xsltfiddle.liberty-development.net/3Nqn5Y4/7
Второй TEI
в corpus_ilimilku.xml
который мне нужно использовать в том же XSLT
файл:
<category n="1" xml:id="contend" ana="#verb.competition">
<catDesc xml:lang="en">subcategory of competition verb: contend
<lang>
<ref n="1" target="http://babelnet.org">BabelNet<idno type="URI">http://live.babelnet.org/synset?word=bn:00083498v</idno></ref>
<ref n="2" target="https://framenet2.icsi.berkeley.edu/">FrameNet<idno type="URI">https://framenet2.icsi.berkeley.edu/fnReports/data/frameIndex.xml?frame=Attaching"></idno></ref>
</lang>
</catDesc>
<category ana="#transcription" xml:lang="uga">
<gloss n="1" xml:id="ḫṣb01" target="../uga/verb.xsl#ḫṣb"/>
<gloss n="2" xml:id="mḫṣ01" cert="high" target="../uga/verb.xsl#mḫṣ"/>
</category>
</category>
У меня нет проблем, чтобы обратиться к нужному файлу. Я проверил, и это работает.
На самом деле у меня есть две проблемы:
key
изref
это не работает, я думаю,- поэтому, когда я хочу отобразить
href5
из$value-doc2
если"$value-doc = translate($re-ana2, '#', '')
это правда, у меня есть следующее сообщение:
Описание: последовательность из более чем одного элемента не допускается в качестве первого аргумента tokenize () ("," http://live.babelnet.org/synse... "," https://framenet2.icsi.berkeley.edu/...")
В настоящее время, Подводя итог: если Я надеюсь, что мое объяснение понятно. Извините за отсутствие английского... Заранее спасибо."$value-doc = translate($re-ana2, '#', '')
работает, так как я проверил с несколькими значениями, и результат true
или же false
, Смотрите последнее слово каждого <li>
@xml:id
из <gloss>
второй TEI
(corpus_ilimilku.xml
знак равно @ana[2]
из <re>
тока TEI
(в содержании Fiddle), затем отобразите idno @type URI
каждого ref
который принадлежит тому же родительскому узлу gloss
,
2 ответа
Я нашел решение с любезной поддержкой @Martin. Во-первых, я изменил во-вторых TEI
:
<category n="1" xml:id="humiliation" ana="#verb.emotion">
<catDesc >subcategory of emotion's verb as a concept of: humiliation
<term ana="#mḫṣ02 #ṣmt01" type="baseForm">
<ptr n="1" target="http://babelnet.org/synset?word=bn:00086117v" source="BabelNet" />
<ptr n="2" target="" source="WordNet" next="{01804206}" />
<ptr n="3" target="http://verbs.colorado.edu/propbank/framesets-english-aliases/humiliate.html" source="VerbNet" />
<ptr n="4" target="http://verbs.colorado.edu/html_groupings/wound-n.html" source="VerbNet" />
<ptr n="5" target="https://framenet2.icsi.berkeley.edu/fnReports/data/frameIndex.xml?frame=Stimulate_emotion" source="FrameNet" />
</term>
</catDesc>
<category ana="#verb.emotion #humiliation" xml:lang="uga">
<gloss n="1" xml:id="mḫṣ02" cert="high"/>
</category>
</category>
Тогда для XSL
, следующее дополнение:
<xsl:param name="f2" select="'../computation/corpus_ilimilku.xml'"/>
<!-- key to look for @xml:id of <gloss> within TEI -->
<xsl:key name="gloss-ref" match="category[category/gloss]" use="category/gloss/@xml:id"/>
<!-- variable for "f2" -->
<xsl:variable name="doc2" select="document($f2)"/>
<!-- within template match="entryFree" and <ul><li> -->
<xsl:apply-templates select="key('gloss-ref', translate($re-ana2, '#', ''), $doc2)//term/ptr[@target]"/>
<!-- template to display <xsl:apply-templates> -->
<xsl:template match="ptr">
<xsl:variable name="href-ptr-target" select="@target"/>
<a href="{$href-ptr-target}">
<xsl:value-of select="@source"/>
<xsl:if test="@next">
<xsl:value-of select="@next"/>
</xsl:if>
<xsl:choose> <xsl:when test="position() != last()">
<xsl:text>, </xsl:text> </xsl:when>
<xsl:otherwise><xsl:text>. </xsl:text></xsl:otherwise>
</xsl:choose></a>
</xsl:template>
Результат, по словам Фиддла http://xsltfiddle.liberty-development.net/3Nqn5Y4/9, новый XSL
(между <!-- -->
в скрипке), а второй TEI
содержание:
<ul>
<li>tmḫṣ: gram. → D. ind. perf. trans, 2msg, 3fsg. <em>trans. </em>she destroyed -- remark(s): Occur.: <a href="">ktu1.3:ii:l7</a> -- <em>analysis: </em>suggestion of <a href="../computation/corpus_ilimilku.xml#ktu1-3_ii_l7_int">hermeneutics;</a> taxo., subcat. of emotion's v. as a concept of “<a href="../computation/corpus_ilimilku.xml#m%E1%B8%AB%E1%B9%A302">humiliation</a>.” Related to: <a href="http://babelnet.org/synset?word=bn:00086117v">BabelNet, </a><a href="">WordNet{01804206}, </a><a href="http://verbs.colorado.edu/propbank/framesets-english-aliases/humiliate.html">VerbNet, </a><a href="http://verbs.colorado.edu/html_groupings/wound-n.html">VerbNet, </a><a href="https://framenet2.icsi.berkeley.edu/fnReports/data/frameIndex.xml?frame=Stimulate_emotion">FrameNet.</a></li>
</ul>
Если линия
<!-- DATA THAT I CANNOT DISPLAY : --> <a href="http://live.babelnet.org/synset?word=bn:00083498v">BabelNet</a>, <a href="https://framenet2.icsi.berkeley.edu/fnReports/data/frameIndex.xml?frame=Attaching">Framework</a>
предназначен для объяснения того, что вы хотите преобразовать
document('../computation/corpus_ilimilku.xml')//lang/ref/idno
элементы в ссылки, то, где вы хотите создать эти ссылки использовать
<xsl:apply-templates select="document('../computation/corpus_ilimilku.xml')//lang/ref/idno"/>
а затем написать шаблон
<xsl:template match="idno">
<a href="{.}">
<xsl:value-of select="preceding-sibling::node()[1]"/>
</a>
</xsl:template>
который производит эти ссылки (я не совсем уверен в содержании ссылки, для первого BabelNet
кажется, как описано, для второго FrameNet
против Framework
).
Что касается использования ключей с несколькими документами, ключи работают отдельно для каждого документа и key
функция имеет необязательный третий аргумент, который вы можете указать для поиска, например $doc2
со значениями из контекстного документа, например, с key('key-name', (key-value-or-values), $doc2)
,
Я думаю, что ваше словесное описание
если @xml:id второго TEI (corpus_ilimilku.xml) = @ana[2] текущего TEI (в содержимом Fiddle), тогда отображать URI idno @type каждого ref, принадлежащего тому же родительскому узлу блеска
переводится в декларацию ключа
<xsl:key name="gloss-ref" match="category[category/gloss]" use="category/gloss/@xml:id"/>
тогда давайте предположим, что у нас есть глобальная переменная <xsl:variable name="doc2" select="doc('../computation/corpus_ilimilku.xml')"/>
Я думаю, что вы хотите использовать функцию ключа с, например,
<xsl:apply-templates select="key('gloss-ref', $re-ana2, $doc2)//lang/ref/idno"/>
обрабатывать соответствующие idno
элементы.