2015-09-22 58 views
1

我需要對從外部xml文件集合拉入的列表值進行排序。從外部文檔中拉入的XSLT排序列表項

輸入文檔:

<book> 
    <div type="chapter"> 
     <div xml:id="d9"> 
      <head>First Chapter</head> 
      <p>First paragraph ...</p> 
     </div> 
     <DOI>12.3456/789.n1</DOI> 
    </div> 
</book> 

外部文檔1:

<rdf:RDF 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:luxid="http://www.temis.com/luxid#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
    <rdf:Description rdf:about="http://dx.doi.org/10.4135/9781446270288.n2"> 
     <dc:identifier>12.3456/789.n1</dc:identifier> 
    </rdf:Description> 
    <rdf:Description rdf:about="http://www.temis.com/luxid#/Entity/Bookshelf/HSSTerm/personal values"> 
     <luxid:lemmatizedForm>personal values</luxid:lemmatizedForm> 
     <luxid:score>0.31063202</luxid:score> 
    </rdf:Description> 
    <rdf:Description rdf:about="http://www.temis.com/luxid#/Entity/Bookshelf/HSSTerm/athletes"> 
     <luxid:lemmatizedForm>athletes</luxid:lemmatizedForm> 
     <luxid:score>0.32773998</luxid:score> 
    </rdf:Description> 
</rdf:RDF> 

而且在相同的格式更多的外部文檔。

此XSLT根據DOI元素從外部文檔中提取關鍵字。

XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns="http://www.tei-c.org/ns/1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:doi="http://www.doi.org/2004/DOISchema" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:luxid="http://www.temis.com/luxid#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xpath-default-namespace="http://www.tei-c.org/ns/1.0" version="2.0" exclude-result-prefixes="dc owl luxid rdfs rdf"> 

    <xsl:output method="xml" encoding="UTF-8" version="1.0"/> 

    <xsl:variable name="rdfFiles" select="collection('file:///C:/files/?select=*.xml*')"/> 

    <!-- Chapter level keywords --> 

    <xsl:template match="div[@type='chapter']/DOI"> 
     <xsl:element name="div"> 
      <xsl:element name="list"> 
       <xsl:for-each select="$rdfFiles//rdf:RDF//rdf:Description/luxid:lemmatizedForm[ancestor::rdf:RDF//rdf:Description/dc:identifier/text() = current()/text()]"> 
        <xsl:sort data-type="number" select="following-sibling::luxid:score"/> 
        <xsl:element name="item"> 
         <xsl:value-of select="."/> 
        </xsl:element> 
       </xsl:for-each> 
      </xsl:element> 
     </xsl:element> 
     <xsl:element name="DOI"> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:element> 
    </xsl:template> 
</xsl:stylesheet> 

我需要按數字順序在列表中的排序關鍵字 - 這是通過luxid表示:得分元素的外部文件內。然而,我有沒有工作。

預期輸出:

關鍵字「運動員」應該來之前在列表中的「個人價值」。

回答

1

關鍵字「運動員」應該在列表中的「個人價值」之前。 我需要按數字順序在列表中的排序關鍵字 - 這是通過luxid:score元素

表達的「個人價值」具有價值0.31063202和「運動員」有值0.32773998。你按照這個領域的數字順序排序,所以較低的值是第一位的:運動員之前的個人價值觀。

如果您想要顛倒過來,那麼您可以將order="descending"添加到xsl:sort元素,這會產生最高值優先的效果。

+1

非常感謝亞伯!那是我需要的。 – user2093335