2015-08-12 3 views
0

Я работаю с ключами Xsl, и я хочу, чтобы исключить повторяющиеся значения элемента, у меня есть следующий XML:XSLT исключающего повторяющееся значение

<?xml version="1.0" encoding="utf-8" ?> 
<root> 
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
      ..... 
    xmlns:xml="http://www.w3.org/XML/1998/namespace"> 

    <skos:Concept rdf:about="http://aims.fao.org/aos/agrovoc/c_26321"> 
      ..... 
    <skos:prefLabel xml:lang="en">Abies mariesii</skos:prefLabel> 
      ..... 
    <skos:broader rdf:resource="http://aims.fao.org/aos/agrovoc/c_10"/> 
    </skos:Concept> 

    <skos:Concept rdf:about="http://aims.fao.org/aos/agrovoc/c_33272"> 
      ..... 
    <skos:prefLabel xml:lang="en">Abies numidica</skos:prefLabel> 
      ..... 
    <skos:broader rdf:resource="http://aims.fao.org/aos/agrovoc/c_10"/> 
    </skos:Concept> 

    <skos:Concept rdf:about="http://aims.fao.org/skosmos/agrovoc/en/page/c_10"> 
      ..... 
    <skos:narrower rdf:resource="http://aims.fao.org/skosmos/agrovoc/en/page/c_26321"/> 
      ..... 
    </skos:Concept> 

</rdf:RDF> 

Пожалуйста, обратите внимание, что SKOS: шире РДФ: ресурс = «http://aims.fao.org/aos/agrovoc/c_10», который является ребенком skos: концепция повторяется много раз в документе, и полный файл доступен здесь: 128.199.159.143/merged-file. XML.

Я использую следующий XSLT, который был основан с xslt get element value based on attribute which is referenced in another node tree с помощью клавиш для вывода мой файл в текст:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
       ..... 
xmlns:void="http://rdfs.org/ns/void#"> 
<xsl:output method="text" omit-xml-declaration="yes" indent="no"/> 
<xsl:key name="concepts-by-about" match="//skos:Concept" use="@rdf:about" /> 

    <xsl:template match="root"> 
    <xsl:for-each select="rdf:RDF"> 
    <xsl:text>START HERE</xsl:text> 
    <xsl:text>&#13;&#10;</xsl:text> 
    <xsl:text>=LDR 00000nam 2200000Ia 4500</xsl:text> 
    <xsl:text>&#13;&#10;</xsl:text> 
      .... 
    <xsl:apply-templates select="skos:Concept" /> 
    <xsl:text>&#13;&#10;</xsl:text> 
       .... 
    <xsl:apply-templates select="skos:Concept/skos:narrower" /> 
    <xsl:text>&#13;&#10;</xsl:text> 
    <xsl:apply-templates select="skos:Concept/skos:broader" /> 
    <xsl:text>&#13;&#10;</xsl:text> 
    </xsl:for-each> 
    </xsl:template> 

    <xsl:template match="skos:Concept/skos:broader[key('concepts-by-about', @rdf:resource)]">  
    <xsl:text>=301 \\$abroader$b</xsl:text> 
    <xsl:value-of select="key('concepts-by-about', @rdf:resource)/skos:prefLabel[@xml:lang='en']" /> 
    <xsl:text>$c</xsl:text> 
    <xsl:value-of select="./@rdf:resource" /> 
    <xsl:text>&#13;&#10;</xsl:text> 
    </xsl:template>   

    <xsl:template match="text()" /> 

    <xsl:template match="//skos:narrower[key('concepts-by-about', @rdf:resource)]">  
    <xsl:text>=302 \\$anarrower$b</xsl:text> 
    <xsl:value-of select="key('concepts-by-about', @rdf:resource)/skos:prefLabel[@xml:lang='en']" /> 
    <xsl:text>$c</xsl:text> 
    <xsl:value-of select="./@rdf:resource" /> 
    <xsl:text>&#13;&#10;</xsl:text> 
    </xsl:template>   

    <xsl:template match="text()" /> 

</xsl:stylesheet> 

С помощью этого XSLT я получаю многочисленные = 301 \ $ abroader $ младенцами $ chttp://aims.fao.org/aos/agrovoc/c_10. Пример файла печатается ниже:

START HERE 
=LDR 00000nam 2200000Ia 4500 
     .... 
=302 \\$anarrower$bAbies$chttp://aims.fao.org/aos/agrovoc/c_10 
     .... 
=302 \\$anarrower$bAbies pinsapo$chttp://aims.fao.org/aos/agrovoc/c_34587 
=302 \\$anarrower$bAbies alba$chttp://aims.fao.org/aos/agrovoc/c_11 
     .... 
=301 \\$abroader$bAbies$chttp://aims.fao.org/aos/agrovoc/c_10 

Так что мой вопрос, как я исключить повторяющиеся значения или есть способ вывести эти повторяющиеся значения в одной строке, как показано ниже:

=310 \\$abroader$bAbies$chttp://aims.fao.org/aos/agrovoc/c_10 

Спасибо вперед и ура!

ответ

0

Я не могу комментировать, поэтому я должен использовать форму ответа.

Если вы ищете отличные значения, вы можете попробовать некоторые из этих предложений: How to use XSLT to create distinct values