使用自己的标签代替<rdf:description>来重新分配某些资源是否正确?</rdf:description>

时间:2010-12-10 09:10:51

标签: xml rdf

例如,请考虑以下示例

<?xml version="1.0" ?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/">
    <rdf:Description rdf:about="http://en.wikipedia.org/wiki/Tony_Benn">
        <dc:title>Tony Benn</dc:title>
        <dc:publisher>Wikipedia</dc:publisher>
    </rdf:Description>
</rdf:RDF>

这里我们描述资源http://en.wikipedia.org/wiki/Tony_Benn。我们知道他是一个人。 使用自己的标签而不是&lt;正确/可能。的rdf:描述/&GT; ? 例如,像这样:

<?xml version="1.0" ?>
<rdf:RDF
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:z="http://www.zebooka.com/">
    <z:Person rdf:about="http://en.wikipedia.org/wiki/Tony_Benn">
        <dc:title>Tony Benn</dc:title>
        <dc:publisher>Wikipedia</dc:publisher>
    </z:Person>
</rdf:RDF>

2 个答案:

答案 0 :(得分:3)

<z:Person
  xmlns:z="http://www.zebooka.com/" 
  rdf:about="http://en.wikipedia.org/wiki/Tony_Benn" />

相同
<rdf:Description rdf:about="http://en.wikipedia.org/wiki/Tony_Benn">
    <rdf:type rdf:resource="http://www.zebooka.com/Person" />
</rdf:Description>

只需确保http://www.zebooka.com/Person及其来自rdfs:Class类型。

答案 1 :(得分:2)

我稍后会回答你关于更改元素名称的问题,或者至少是后面的问题。但是我想指出描述元素是描述文档,而不是那个人。我会添加&lt; dc:subject&gt;人&lt; / dc:person&gt;元素,以获取适合已使用的模式的元信息。文档的主题是该人或该人的名称,dc命名空间定义主题元素。这是我建议的解决方案,我可以从你的问题中找到你的用例。

否则,如果该解决方案不适合您,可以从这里了解更多信息。首先,您需要检查示例中rdf命名空间定义的方案。如果RDF元素包含允许任何命名空间的任何元素定义,则它是可能的。可能还有其他更高级的方案概念允许您想要的扩展,例如允许替换组的描述。有一些例子可以在这个网站上进行,使用搜索。

如果涉及互操作性,您可以通过替换组进行扩展,这实际上是可行的。使用没有替换组的新元素似乎是直截了当的。但是,如果您希望通过兼容的实现创建和传输文档,则解析器不会将该数据视为相同,因为它不会知道元素的语义含义。如果您正在为处理XML的端点编写代码,则可以执行任何操作,并且无需验证文档或根据自己的比例对其进行验证。这将需要更多的工作,而不是尊重这些类型的架构。

如果将元素名称更改为架构中的已定义元素(没有替换组),则您的数据将无法与外部源互操作。外部供应商最多会删除自定义元素中的所有数据,最糟糕的是它根本不会读取或处理任何数据。看来元素描述可能会接受任何其他元素(我无法验证,因为架构的URL现在已经关闭)所以我建议您定义自己的子元素以进行描述,例如,如果需要,可以包含值person的类型如果您的目标是使用自己定义的元素,则会显示此信息。退出实现的方式可能只是忽略该元素,如果它不理解它,但同时它不会丢失所有其他信息。

如果您担心数据在表示层上的外观,我建议您使用xslt转换或视图中最直接的约定来转换数据。没有真正需要更改数据模型。