我想从 yago 检索所有属性,这是一个 RDFS 知识库(.nt 格式)。我尝试过 如下查询
SELECT distinct ?x WHERE { ?y ?x ?z . }
这给了我所有的谓词。
在网络中,他们将谓词定义为谓词(属性)。据此我的结果应该是正确的。但我的教授建议我进行以下查询
SELECT distinct ?x WHERE { ?y ?x ?z . ?z a ?zt. }
他没有解释原因。这两个查询的结果略有不同。第二个查询的结果是第一个查询的子集。是不是更精确的意思?
谁能帮我理解他为什么添加
?z a ?zt .
?用于获取属性的对象总是 rdf:type
属于不同的类吗?
根据RDF 1.1规范:
抽象语法的核心结构是一组三元组,每个三元组由主语、谓语和宾语组成。
[...]
谓词本身是一个IRI,表示一个属性,即可以被视为二元关系的资源。
根据这些定义,您可以通过第一个请求获取SPARQL中的所有属性:
SELECT distinct ?x WHERE { ?y ?x ?z . }
第二个要求更具体:
SELECT distinct ?x WHERE { ?y ?x ?z . ?z a ?zt. }
它列出了在三元组中至少使用一次的所有属性,其中对象也作为主语参与到
rdf:type
三元组中。
请注意,在 SPARQL 中
a
是 rdf:type
的 快捷方式。