从外部文档中提取的XSLT排序列表项

时间:2015-09-22 04:21:24

标签: xslt xslt-2.0

我需要对从外部xml文件集合中提取的列表值进行排序。

输入文件:

<book>
    <div type="chapter">
        <div xml:id="d9">
            <head>First Chapter</head>
            <p>First paragraph ...</p>
        </div>
        <DOI>12.3456/789012345.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/789012345.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:score元素表示。但是,我所拥有的不起作用。

预期产出:

关键字&#34;运动员&#34;应该来之前&#34;个人价值观&#34;在列表中。

1 个答案:

答案 0 :(得分:1)

  

关键字“运动员”应该出现在列表中的“个人价值”之前。   我需要按数字顺序对列表中的关键字进行排序 - 通过luxid:score元素

表示

“个人价值”的值为0.31063202,“运动员”的值为0.32773998。您按此字段的数字顺序排序,因此较低的值首先出现:运动员之前的个人值。

如果您想要反转,那么您可以将order="descending"添加到xsl:sort元素,这将产生最高值的效果。