我需要对从外部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;在列表中。
答案 0 :(得分:1)
关键字“运动员”应该出现在列表中的“个人价值”之前。 我需要按数字顺序对列表中的关键字进行排序 - 通过
表示luxid:score
元素
“个人价值”的值为0.31063202
,“运动员”的值为0.32773998
。您按此字段的数字顺序排序,因此较低的值首先出现:运动员之前的个人值。
如果您想要反转,那么您可以将order="descending"
添加到xsl:sort
元素,这将产生最高值的效果。