什么是条带化错误?

时间:2010-02-02 22:26:51

标签: xml xslt rdf last.fm

我正在尝试使用xslt将last.fm xml数据转换为rdf并收到此错误:ERROR [http-8080-1](RDFDefaultErrorHandler.java:40) - (第3行第24列):{E202}期待XML开始或结束元素。字符串数据“Joseph Arthur”不被允许。可能是条纹错误。

任何人都可以向我解释条形错误是什么,或者一般来说我做错了什么。

xslt代码在这里:

    <xsl:for-each select="/lfm/artists/artist">
        <lfm:name><xsl:value-of select="name"/></lfm:name>
    </xsl:for-each>

这是xml的位置: http://ws.audioscrobbler.com/2.0/?method=library.getartists&api_key=b25b959554ed76058ac220b7b2e0a026&user=joanofarctan

感谢。

1 个答案:

答案 0 :(得分:3)

查看由此产生的完整xml,或者至少是完整的xslt和输入xml(没有提到'Joseph Arthur')真的很有帮助。

因此,将所有这些放在一边,你正在生成的rdf / xml打破了一个称为“条带化”的重要特性。 Dan Brickley写了useful explanation,但这里有一个非常简短的总结:当用rdf / xml

<a>
  <b>
    <c>
      <d>

你知道奇数标签(a,c)对应于rdf图中的节点,而偶数标签(c,d)代表边或属性。语法'stripe'节点和属性。

此外,如果一个元素包含文本,它必须是一个属性(节点元素只包含其他元素,或者什么都没有)。

因此解析器认为它位于节点上,因此期望更多元素,找到文本,并建议您在错误的位置使用属性。我的猜测是你的rdf看起来像:

<rdf:RDF ...>
  <lfm:name>Joseph Arthur</lfm:name>
  ....

你说有些东西的属性名称是'Joseph Arthur',但是你还没有包含一个主题节点,所以我们不知道这个名字是什么。