0

ここの XSLT フィドル: https://xsltfiddle.liberty-development.net/bdxtqU/5

この質問は、XSLT 2.0 を使用して、別の 内にある HTML URL に出力したかったこの回答の意味から続いているため、すべてが URL に変換されます。<persName><persName><persName>

<persName nymRef="#Raimunda_Faure">Raimunda uxor 
   <persName nymRef="#Bernard_Faure_Senior">Bernardi Fabri 
                   senior</persName></persName>

出力先:

 <a href="www.foo.com/person/Raimunda_Faure">Raimunda 
    uxor</a><a href="www.foo.com/person/Bernard_Faure_Senior">Bernardi 
      Fabri<a>

以下のコードを使用します。また、URL への出力を取得する別の「名前付きエンティティ」にも使用します<placeName>

問題は、<persName>内部に<placeName>次のように表示される可能性があることです (逆も同様です)。

<placeName type="event_loc" nymRef="#home_of_Guilhem_Vidal">in domo 
    <persName nymRef="#Guilhem_Vidal_MSP-AU" role="own">Willelmi Vitalis</persName></placeName>

私が望むのは、 と を分離し<placeName><persName>、同じ名前付きエンティティ タイプが名前付きエンティティ内にネストされているネストされた URL のみを作成することです。

概略的には、これらは再帰的に all <placeName>and を出力します<persName>:

 <persName>text
   <persName>text</persname>
   <persName>text</persname>
 </persName>

 <placeName>text
   <placeName>text</placename>
   <placeName>text</placename>
 </placeName>

しかし、これらは親エンティティを URL として出力するだけ<placeName><persName>あり、それらに含まれる名前付きエンティティをバイパスします。

 <persName nymRef="#Raimunda_Faure">Raimunda
   <placeName nymRef="#Toulouse">Toulouse</placename>
   <placeName nymRef="Paris">Paris</placename>
 </persName>

出力先<a href="www.foo.com/person/Raimunda_Faure">Raimunda Toulouse Paris</a>

 <placeName nymRef="#Toulouse">Toulouse
   <persName nymRef="#Raimunda_Faure">Raimunda</persname>
   <persName nymRef="#Bernard_Faure">Bernard</persname>
 </placeName>

出力先<a href="www.foo.com/place/Toulosue">Toulouse Raimunda Bernard</a>

2 つの既存のテンプレートを次に示します。

<xsl:template match="tei:text//tei:persName">
    <xsl:variable name="nested" select="tei:persName[1]|
                     tei:persName[1]/following-sibling::node()" />
    <xsl:element name="a"> 
        <xsl:attribute name="href"><xsl:value-of select="concat($paramPersonurl,substring-after(@nymRef,'#'))"/></xsl:attribute>
        <xsl:apply-templates select="node() except $nested" />
    </xsl:element>
    <xsl:apply-templates select="$nested" />
</xsl:template>

<xsl:template match="tei:text//tei:placeName">
    <xsl:variable name="nested" select="tei:placeName[1]|
                    tei:placeName[1]/following-sibling::node()" />
    <xsl:element name="a"> 
        <xsl:attribute name="href"><xsl:value-of select="concat($paramPersonurl,substring-after(@nymRef,'#'))"/></xsl:attribute>
        <xsl:apply-templates select="node() except $nested" />
    </xsl:element>
    <xsl:apply-templates select="$nested" />
</xsl:template>

他の名前付きエンティティの除外をどちらかに追加するか<xsl:apply-templates select="node() except $nested" />、次の<xsl:apply-templates select="$nested" />ようなものを使用する必要があるようです[node()[name() != 'persName']]が、成功していません。

前もって感謝します。

4

1 に答える 1