gpt4 book ai didi

rdf - 为什么 W3C RDF 验证器不使用完整命名空间替换 URI?

转载 作者:行者123 更新时间:2023-12-03 21:49:37 25 4
gpt4 key购买 nike

我尝试使用 W3C RDF 验证器在线验证一个非常简单的手动编写的 RDF。令我惊讶的是,它正确地解析了来自 rdf 命名空间的 URI,而不是来自不同的命名空间(也来自 W3C)。为什么会这样?
让我们举个例子

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:org="http://www.w3.org/ns/org#" >
<rdf:Description rdf:about="https://stackexchange.com/">
<rdf:type rdf:resource="org:Organization"/>
</rdf:Description>
</rdf:RDF>
这将验证并解析为
Parse result
如您所见,谓词 (rdf:type) 得到了很好的扩展,可以单击它。对象 (org:Organization) 根本没有展开,而且当我尝试单击链接时,它实际上将“org:Organization”发送到浏览器,从而产生错误。但是命名空间org已经像rdf命名空间一样被定义了,如果我手动访问 http://www.w3.org/ns/org#Organization , 我得到一个 Turtle 文件。
所以,我的问题是:为什么不放置 http://www.w3.org/ns/org#Organization在对象中?为了让解析器正确执行,我应该更改什么?

最佳答案

实际上,解析器正在正确地执行此操作。问题是您试图在属性值( rdf:resource 属性的值)中使用 XML 命名空间前缀,而不是作为实际 XML 元素/属性名称本身的限定符(例如 rdf:type ,是一个 XML 元素名称)。
换句话说:您不能在字符串值中使用 XML 命名空间。因此,解析器不会尝试“扩展”命名空间,而是将文字字符串值解析为 URI,并且因为 org:Organization实际上是一个语法上合法的 URI,这就是它产生的。
要获得所需的输出,您必须写出完整的 IRI 字符串,如下所示:

<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:org="http://www.w3.org/ns/org#" >
<rdf:Description rdf:about="https://stackexchange.com/">
<rdf:type rdf:resource="http://www.w3.org/ns/org#Organization"/>
</rdf:Description>
</rdf:RDF>
或者,如果您愿意,可以使用缩写的 RDF/XML 语法来获得:
<?xml version="1.0"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:org="http://www.w3.org/ns/org#" >
<org:Organization rdf:about="https://stackexchange.com/" />
</rdf:RDF>
顺便说一句:RDF/XML 是一种出了名的难以使用的语法。 RDF 还有其他更简单的语法格式,例如 Turtle .只是在说'。

关于rdf - 为什么 W3C RDF 验证器不使用完整命名空间替换 URI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63160151/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com