Xml 如何使用XSL显示RDF节点的属性?
我需要在下面的XML/rdf中显示Xml 如何使用XSL显示RDF节点的属性?,xml,xslt,rdf,Xml,Xslt,Rdf,我需要在下面的XML/rdf中显示rdf:resource的值 <?xml version="1.0" encoding="UTF-8"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:dc="h
rdf:resource
的值
<?xml version="1.0" encoding="UTF-8"?><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#">
<skos:Concept rdf:about="http://example.com/randomurl">
<skos:prefLabel xml:lang="en">example</skos:prefLabel>
<skos:broader rdf:resource="http://example.com/randomurl"/>
<skos:broader rdf:resource="http://example.com/randomurl"/>
<owl:sameAs rdf:resource="http://example.com/randomurl"/>
</skos:Concept>
</rdf:RDF>
或者select的一个变体,它就是不起作用。我试图通过谷歌搜索堆栈溢出来找到解决方案,但没有找到
那么我做错了什么
编辑:生成以下错误:
警告:XSLTProcessor::transformToXml():第57行的[path]中未定义命名空间前缀
警告:XSLTProcessor::transformToXml():xmlXPathCompiledVal:在第57行的[path]中计算失败
警告:XSLTProcessor::transformToXml():运行时错误:文件[path]第25行第57行[path]中的元素值
警告:XSLTProcessor::transformToXml():XPath计算未返回任何结果。在
可能是因为您没有在XSLT中声明
rdf
名称空间,所以它不起作用吗?当使用XSLT时:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:skos="http://www.w3.org/2004/02/skos/core#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<xsl:template match="/">
<html>
<body>
<h2>
<xsl:value-of select="//skos:prefLabel" />
</h2>
<br />
<xsl:for-each select="//skos:broader">
<xsl:text>Broader: </xsl:text>
<xsl:value-of select="@rdf:resource"/>
<br />
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
更广泛的:
在示例输入上运行,结果是:
<html xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<body>
<h2>example</h2><br>
Broader: http://example.com/randomurl<br>
Broader: http://example.com/randomurl<br>
</body>
</html>
示例
更广泛的:http://example.com/randomurl
更广泛的:http://example.com/randomurl
可能是因为您没有在XSLT中声明rdf
名称空间,所以它不起作用吗?当使用XSLT时:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:skos="http://www.w3.org/2004/02/skos/core#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<xsl:template match="/">
<html>
<body>
<h2>
<xsl:value-of select="//skos:prefLabel" />
</h2>
<br />
<xsl:for-each select="//skos:broader">
<xsl:text>Broader: </xsl:text>
<xsl:value-of select="@rdf:resource"/>
<br />
</xsl:for-each>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
更广泛的:
在示例输入上运行,结果是:
<html xmlns:skos="http://www.w3.org/2004/02/skos/core#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<body>
<h2>example</h2><br>
Broader: http://example.com/randomurl<br>
Broader: http://example.com/randomurl<br>
</body>
</html>
示例
更广泛的:http://example.com/randomurl
更广泛的:http://example.com/randomurl
在XSLT中,您忘记导入RDF名称空间。只需添加xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#“
到您的XSLT。它应该可以正常工作。在XSLT中,您忘记了导入RDF名称空间。只需添加xmlns:rdf=”http://www.w3.org/1999/02/22-rdf-syntax-ns#“
到您的XSLT。它应该可以正常工作。请注意:在处理RDF/XML时,一般规则是“不要使用XML工具!”您为什么必须使用XSLT而不是专用的RDF工具?您能确定与XSLT一起使用的RDF文档始终具有相同的结构吗
让我们想象一下,我用RDFAPI解析您的RDF/XML文档。然后我将其重新序列化为RDF/XML。结果很可能是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:skos="http://www.w3.org/2004/02/skos/core#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:owl="http://www.w3.org/2002/07/owl#">
<skos:Concept rdf:about="http://example.com/randomurl">
<skos:prefLabel xml:lang="en">example</skos:prefLabel>
<skos:broader>
<rdf:Description rdf:about="http://example.com/randomurl"/>
</skos:broader>
<skos:broader>
<rdf:Description rdf:about="http://example.com/randomurl"/>
</skos:broader>
<owl:sameAs>
<rdf:Description rdf:about="http://example.com/randomurl"/>
</owl:sameAs>
</skos:Concept>
</rdf:RDF>
例子
您的XSLT不再工作了(虽然基本上是相同的数据)。只是一句话:在处理RDF/XML时,一般规则是“不要使用XML工具!”您为什么必须使用XSLT而不是专用的RDF工具?您能确定与XSLT一起使用的RDF文档始终具有相同的结构吗 让我们想象一下,我用RDFAPI解析您的RDF/XML文档。然后我将其重新序列化为RDF/XML。结果很可能是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:skos="http://www.w3.org/2004/02/skos/core#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:owl="http://www.w3.org/2002/07/owl#">
<skos:Concept rdf:about="http://example.com/randomurl">
<skos:prefLabel xml:lang="en">example</skos:prefLabel>
<skos:broader>
<rdf:Description rdf:about="http://example.com/randomurl"/>
</skos:broader>
<skos:broader>
<rdf:Description rdf:about="http://example.com/randomurl"/>
</skos:broader>
<owl:sameAs>
<rdf:Description rdf:about="http://example.com/randomurl"/>
</owl:sameAs>
</skos:Concept>
</rdf:RDF>
例子
而且您的XSLT不再工作了(虽然基本上是相同的数据)。您真的是指
skos:broadcase
?您的示例XML中没有任何这些元素。我想我已经改变了。杰普,我是说那个,“它就是不工作”…以什么方式?它不会在w3schools.com上显示任何东西试试看。不过,它确实在我的服务器上显示了错误,现在就把它们放到帖子中。很高兴您已经修复了它,但请记住,在XML中同一RDF图有许多不同的等效序列化(例如,
与
)因此,明智的做法是使用适当的RDFAPI,而不是简单地将其视为XML。您真的是指skos:brother
?您的示例XML中没有任何这些元素。我想我已经改变了。杰普,我是说那个,“它就是不工作”…以什么方式?它不会在w3schools.com上显示任何东西试试看。不过,它确实在我的服务器上显示了错误,现在就把它们放到帖子中。很高兴您已经修复了它,但请记住,在XML中同一RDF图有许多不同的等效序列化(例如,
vs
),因此您可能明智地使用适当的RDF API,而不是简单地将其作为XML处理。谢谢!我确实说过那可能是个小东西。我现在真的在做鬼脸。你只花了几分钟就弄明白了我几个小时以来一直在努力解决的问题/hugI只是想知道我怎么会错过这个。。。当然不是我很快就会犯的错误。:)很乐意帮忙。听起来w3schools实用程序可能是在XSLT无效时自动失败的工具之一,因此,如果遇到问题,请记住在更可靠的XSLT处理器上尝试它。谢谢!我确实说过那可能是个小东西。我现在真的在做鬼脸。你只花了几分钟就弄明白了我几个小时以来一直在努力解决的问题/hugI只是想知道我怎么会错过这个。。。当然不是我很快就会犯的错误。:)很乐意帮忙。听起来w3schools实用程序可能是在XSLT无效时自动失败的工具之一,因此,如果遇到问题,请记住在更可靠的XSLT处理器上尝试它。谢谢您的回答!他在你之前回答了,所以我选择了他的答案。谢谢你的回答!他确实比你先回答,所以我选择了他的答案。