【问题标题】:How to get a list of all predicates in an RDF file or ontology using SPARQL code?如何使用 SPARQL 代码获取 RDF 文件或本体中所有谓词的列表?
【发布时间】:2019-06-15 07:59:17
【问题描述】:

我想知道如何使用 SPARQL 从 RDF/本体文件中下载/提取谓词列表?

例如,假设我们正在讨论“rdfs”URI。我想列出所有属性(谓词),例如范围、域、类型等。这可能吗?还是我在这里犯了一个概念上的错误?

【问题讨论】:

  • 所以到目前为止你基本上什么都没试过?没有阅读 SPARQL 教程?连搜索功能都没用过?也不是 100% 清楚您要的是什么,一个本体的所有谓词或 RDF、RDFS 和 OWL 词汇表的所有内置谓词。对于后者,除了您感兴趣的领域的本体之外,还必须显式加载相应的本体。
  • absic 查询本身很简单,它包含一个简单的三元组模式?s ?p ?o,以防这些谓词都被实例数据使用。如果不是,那么模式三元组也必须是查询,例如?p rdfs:range ?r?p a rdf:Property?p1 rdfs:subPropertyOf ?p2 等等 - 因此,对于模式三元组,查询变得更加复杂,具体取决于您的模式。语言,即只是 RDFS 三元组或 OWL 公理
  • 对于 RDFS 谓词,加载 RDFS 本​​体并查询 ?p a rdf:Property
  • 好的。正如我所说,这取决于数据。本体论。理想情况下,有声明每个属性类型的三元组。在这种情况下,您将通过 SELECT ?p {VALUES ?type {rdf:Property owl:ObjectProperty owl:DatatypeProperty} ?p a ?type} 找到所有谓词 - 试试看,也许这已经奏效了?
  • select distinct ?p {?s ?p ?o}?

标签: sparql rdf


【解决方案1】:

您可以将DISTINCT 运算符与列出图表中所有语句的SPARQL 查询一起使用。您还可以使用ORDER BY 使长列表更易于浏览。

SELECT DISTINCT ?p WHERE {
    ?s ?p ?o
}
ORDER BY ?p

如果您要查询的图是一个本体,您可能希望选择所有具有rdf:Property 类型的实体,而不是图中的谓词。

执行此请求时,请确保启用推理,因为大多数谓词类型为 owl:ObjectPropertyowl:DatatypeProperty,它们是 rdf:Property 的子类。

SELECT DISTINCT ?property WHERE {
    ?property a rdf:Property
}
ORDER BY ?property

【讨论】:

  • 问题不在于将所有rdf:Property 都放在图表中,但我可以提一下。
  • 问题是“我想获取所有属性(谓词)”——如果本体只是一个模式——这就是我在问题下方的 cmets 中已经提到的– 仅仅得到三元组的谓词并没有做任何事情。此外,如果它是 OWL 本体,那么即使您的第二个查询也不起作用。只是为了向您表明我不是在告诉 stupdi 事情,这是 TO 尝试使用的本体:http://purl.org/nif/ontology/nif.owl - 并不是说​​使用 rdflib 是这种本体的错误 API,但这就是我已经在他的另一个问题中告诉他
  • 为什么第二个查询不能在 OWL 本体上工作?正如我在回答中所说,owl:ObjectPropertyowl:DatatypePropertyrdf:Property 的子类,因此如果查询是通过推理执行的,它们将被返回。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多