Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 如何使用XSL显示RDF节点的属性?_Xml_Xslt_Rdf - Fatal编程技术网

Xml 如何使用XSL显示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

我需要在下面的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="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处理器上尝试它。谢谢您的回答!他在你之前回答了,所以我选择了他的答案。谢谢你的回答!他确实比你先回答,所以我选择了他的答案。