在 SPARQL 中,我可以区分关系和属性键吗?

Posted

技术标签:

【中文标题】在 SPARQL 中,我可以区分关系和属性键吗?【英文标题】:In SPARQL, can I distinguish between relationships and property keys? 【发布时间】:2014-02-05 21:41:22 【问题描述】:

在 Neo4j 快速查询窗格中,有“关系类型”和“属性键”,它们在 Neo4j cypher 查询语法的上下文中是有意义的。

在 SPARQL 中,有没有办法区分作为关系的三元组和作为属性的三元组?

我想一些示例数据可能如下所示:

<actor12> <http://some.ontology.com/#ActedIn> <movie45>           #relationship
<movie45> <http://some.ontology.com/#title> “Gone with the Wind"  #property key/val

【问题讨论】:

【参考方案1】:

SPARQL 是一种针对特定数据模型的查询语言,由 RDF 数据定义。通常用于查询RDF或OWL数据。

RDF 定义了properties,但没有在对象引用属性数据引用属性中区分它们。您可以通过检查它们的范围来间接区分它们。如果它们的范围是XSD 属性,那么您可以推断它是一个数据引用属性。

OWL 实际上对这两种属性进行了形式上的区分。它们被称为 object properties 和 data properties。因此,如果您使用 OWL 数据模型,您可以直接通过其 OWL 类来识别属性的类型。你称之为“关系类型”的那些实际上是“对象属性”,而你称之为“属性键”的那些是 OWL 术语中的“数据属性”。它们分别被标识为owl:ObjectProperty和owl:DatatypeProperty类的实例。

希望我能帮上忙!

【讨论】:

【参考方案2】:

您可以通过测试对象是否为文字来检查数据:

   ?s ?p ?o 
   FILTER (isLiteral(?o) )

【讨论】:

你能详细说明一下吗? @Kristian 您所称的属性键将 RDF 文字作为值,而不是 URI 或空白节点。如果搜索 ?s ?p ?o 并且只接受 ?o 是文字的匹配项,那么每个 ?p 将是一个数据类型属性(在 OWL 中)。实际上,这并不完全正确,因为注解属性也可以具有字面值,但想法是存在的:如果您查找具有字面值的属性,那么您会找到具有字面值的属性。【参考方案3】:

Pantelis Natsiavas 正确地points out 在 OWL 中您可以区分对象和数据类型属性。您询问了如何在 SPARQL 中执行此操作。 owl:DatatypePropertyowl:ObjectProperty 是 RDFS 类,因此您可以查询事物是否是它们的实例。例如,您可以向 DBpedia 索取数据属性:

select ?property where  
 ?property a owl:DatatypeProperty

limit 10 

SPARQL results

【讨论】:

以上是关于在 SPARQL 中,我可以区分关系和属性键吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MarkLogic 中处理不区分大小写的 SPARQL 数据

Eloquent 可以替换数据库中的外键吗?

GraphQL 和 SPARQL 有啥区别?

数据库表可以没有主键吗?

在进行任意路径查询之前过滤 sparql 结果

SPARQL 查询传递