rdf - 任意字符串被认为可以作为 RDF N-Triples 中的引用?

标签 rdf n-triples n-quads

在 W3C RDF 1.1 N-Triples 文档中,用于非文字主语/宾语/谓词的 IRIREF 产生式几乎被定义为尖括号 (<>) [1] 内的字符串,尽管它被称为IRI.

这就是为什么一些示例文件 [2] 具有简单的标识符,而其他解析器(如 RDFLib)会在标识符不是具有方案的有效 IRI 时抛出异常的原因:部分?尽管 RDF 规范中使用了术语,但包含不是有效 IRI 的非文字的 RDF 文件是否仍然格式正确?

[1] https://www.w3.org/TR/n-triples/#grammar-production-IRIREF

[2] https://github.com/cayleygraph/cayley/blob/master/data/testdata.nq

最佳答案

Is this why some example files have simple identifiers while other parsers such as RDFLib will throw an exception if the identifier isn't a valid IRI with a scheme: section?

没有。您指向的示例文件严格来说在语法上不是正确的 N-Triples。事实上它根本不是 N-Triples,而是 N-Quads - 不同的语法格式。但即使它是 N-Triples,以这种形式拥有 IRI 也是不正确的。

N-Triples Recommendation 说“IRI 只能写成绝对 IRI”(参见 section 2.2)- 绝对 IRI 在 RFC 3987 中按语法定义。这是规范的,即使语法生成本身不强制执行它。

但是,您在该示例文件中看到的 IRI 可能被解释为相对 IRI 引用,并且一些 N-Triples 解析器已经进行了一定程度的扩展,以允许使用 base IRI 取消引用相对 IRI。这可能就是为什么您有时会在野外看到这些语法不正确的 N-Triples 文件的原因。它是格式的非标准扩展。

Are RDF files with non-literals that aren't valid IRIs still well-formed despite the terminology used in the RDF spec?

这取决于您使用的语法格式。格式良好是文档在特定具体语法中的一个属性,N-Triples 的规则不同于 Turtle 或 RDF/XML。

RDF 本身在其抽象语法中强制 IRI 符合 RFC3987 并且是绝对的,因此任何 RDF 文档在处理时产生未解析的相对 IRI,或者不符合 RFC 的 IRI,如果不是非良构的话,当然无效。

一些具体的语法格式(如RDF/XML、TriG、Turtle等)为IRIs提供了不同的简写机制(前缀名、相对IRIs + base IRIs等)。然而,正如我们在上面看到的,N-Triples 没有内置这种速记机制,因此任何非绝对的 IRI 都会使文档格式不正确。

关于rdf - 任意字符串被认为可以作为 RDF N-Triples 中的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38594364/

相关文章:

Java - Jena API - 输出文件

scala - 使用大量带有 self 类型的 mixin

rdf - 如何创建可重用谓词(RDF)?

java - 为 RDF 爬网程序导入类时出错

java - 如何将 rdf xml 转换为 n-triples?

schema - 架构是 :domainIncludes and rdfs:domain (as well as schema:rangeIncludes and rdfs:range) the same?

python - 解析大型 NTriples 文件 Python