【问题标题】:Convert XML file to RDF/XML using XSLT使用 XSLT 将 XML 文件转换为 RDF/XML
【发布时间】:2014-11-15 12:50:54
【问题描述】:

我是 XSLT 的新手。我有一个 XML 文件,想使用 XSLT 将其转换为 RDF/XML。实际上,我找到了一个 XSLT 样式表,并在它和 XML 文件之间建立链接,结果在浏览器中显示为“文本”而不​​是 XML 文件。我的问题是:我想得到 RDF/XML 格式的转换结果,但不幸的是我得到的结果是纯文本。

XML 文件

    <xml>
<?xml-stylesheet type="text/xsl" href="qu.xsl"?>
    <person>
    <name>Joe</name>
    <website url="www.example1.com">contact1</website >
    <vote>20</vote>
    </person>
    <person>
     <name>Anna</name>
    <website url="www.example2.com">contact2</website>
     <vote>80</vote>
     </person>
     </xml>

XSLT 样式表是

<xsl:stylesheet version="1.0"
            xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
            xmlns:html="http://www.w3.org/1999/xhtml"
            xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
            xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
            xmlns:foaf="http://xmlns.com/foaf/spec/"
            xmlns:foo="http://example.com/foo#">

<xsl:template match="/">
    <rdf:RDF>
        <rdf:Description rdf:about="http://www.example.com/xml">
            <xsl:apply-templates/>
    </rdf:Description>
    </rdf:RDF>
</xsl:template>

<xsl:template match="person">
<xsl:variable name="critic"><xsl:value-of select="name"/></xsl:variable>
<xsl:variable name="criticWebsite"><xsl:value-of select="website/@url"/</xsl:variable>
<foo:hasCritic>
    <rdf:Description rdf:about="http://www.example.com/critic/{$critic}">
        <foaf:name><xsl:value-of select="name"/></foaf:name>
        <foaf:homepage>
            <rdf:Description rdf:about="http://{$criticWebsite}">
                <rdfs:label><xsl:value-of select="website"/></rdfs:label>
            </rdf:Description>
        </foaf:homepage>
    </rdf:Description>
</foo:hasCritic>
</xsl:template>

</xsl:stylesheet>

但结果是: 乔联系人 1 20 安娜联系人 2 80

【问题讨论】:

  • 我修复了多个拼写错误和语法错误,但仍不清楚您在问什么。请注意,请求图书馆可能会导致问题被关闭,因为此类推荐请求在这里是题外话。我建议展示一些示例输入和输出以及您在 XSLT 中为达到预期结果所做的尝试。还建议您通过文本编辑器而不是浏览器查看输出;如果您的问题的重点是浏览器中 XML 的出现,请编辑您的问题以阐明该意图。谢谢。
  • @kjhughes 我添加了我的尝试,正如我所说我是新人并从stackoverflow.com/questions/10499281/… 中获取这个示例,但我想学习如何转换和表示 RDF/XML 格式的转换
  • 感谢您添加实际的 XML 和 XSLT -- 让我们更容易提供帮助。详见我的answer below

标签: xml xslt rdf


【解决方案1】:

您的 XSLT(在 criticWebsite xsl:value-of 附近修复了一个错字):

<?xml version="1.0"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:html="http://www.w3.org/1999/xhtml"
                xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
                xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
                xmlns:foaf="http://xmlns.com/foaf/spec/"
                xmlns:foo="http://example.com/foo#">

  <xsl:template match="/">
    <rdf:RDF>
      <rdf:Description rdf:about="http://www.example.com/xml">
        <xsl:apply-templates/>
      </rdf:Description>
    </rdf:RDF>
  </xsl:template>

  <xsl:template match="person">
    <xsl:variable name="critic"><xsl:value-of select="name"/></xsl:variable>
    <xsl:variable name="criticWebsite"><xsl:value-of select="website/@url"/></xsl:variable>
    <foo:hasCritic>
      <rdf:Description rdf:about="http://www.example.com/critic/{$critic}">
        <foaf:name><xsl:value-of select="name"/></foaf:name>
        <foaf:homepage>
          <rdf:Description rdf:about="http://{$criticWebsite}">
            <rdfs:label><xsl:value-of select="website"/></rdfs:label>
          </rdf:Description>
        </foaf:homepage>
      </rdf:Description>
    </foo:hasCritic>
  </xsl:template>

</xsl:stylesheet>

应用于您的输入 XML 文件(xml-stylesheet 声明立即移至 XML 声明下方,并且 XSLT 文件的路径设为绝对路径):

<?xml version="1.0" ?>
<?xml-stylesheet type="text/xsl" href="file:///c:/path/to/XSLT/qu.xsl"?>
<xml>
  <person>
    <name>Joe</name>
    <website url="www.example1.com">contact1</website >
    <vote>20</vote>
  </person>
  <person>
    <name>Anna</name>
    <website url="www.example2.com">contact2</website>
    <vote>80</vote>
  </person>
</xml>

生成此 RDF 文档:

<?xml version="1.0" encoding="UTF-8"?><rdf:RDF xmlns:html="http://www.w3.org/1999/xhtml" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:foaf="http://xmlns.com/foaf/spec/" xmlns:foo="http://example.com/foo#"><rdf:Description rdf:about="http://www.example.com/xml">
  <foo:hasCritic><rdf:Description rdf:about="http://www.example.com/critic/Joe"><foaf:name>Joe</foaf:name><foaf:homepage><rdf:Description rdf:about="http://www.example1.com"><rdfs:label>contact1</rdfs:label></rdf:Description></foaf:homepage></rdf:Description></foo:hasCritic>
  <foo:hasCritic><rdf:Description rdf:about="http://www.example.com/critic/Anna"><foaf:name>Anna</foaf:name><foaf:homepage><rdf:Description rdf:about="http://www.example2.com"><rdfs:label>contact2</rdfs:label></rdf:Description></foaf:homepage></rdf:Description></foo:hasCritic>
</rdf:Description></rdf:RDF>

注意事项:

  • 要在 Firefox 中查看此内容,请右键单击输出并选择“检查 Element”,否则您只会看到“Joecontact1 Annacontact2”。
  • 这不适用于 Chrome 中的本地文件,因为 Chrome refuses to run locally loaded XSLT。它必须从服务器远程加载才能工作。

【讨论】:

    猜你喜欢
    • 2019-04-11
    • 2016-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多