在 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/