当前位置: 首页 > 知识库问答 >
问题:

RDF能用边属性为带标签的属性图建模吗?

田普松
2023-03-14

我想像下面这样建模合作伙伴关系,我用标记属性图的格式表示。

我想用RDF语言来表达上面的图形,尤其是我想了解我是否能表达“loves”边的标签(这是文章/字母的URI)。

我不熟悉RDF,我知道RDF可以很容易地表达LPG中的节点属性,但是可以方便地表达边缘属性吗?

这个问题的背景是:我想使用RDF(而不是Gremlin)的原因是,从长远来看,我想添加一些推理能力。

进一步添加的问题:如果我们选择RDF模型来表示上述LPG,用简单的英语来说,我想用SPARQL查询来回答以下问题:

  1. 鲍勃爱上谁了吗

SPARQL语句查询出loveletters.com/123有多复杂?

共有2个答案

钮边浩
2023-03-14

ANZograp支持RDF*/SPARQL*,因此您实际上可以使用简洁、最直观的格式来表示数据并进行查询。

insert data {
  :Bob a :Person; <name> "Bob"; <state> "CA" .
  :Mary a :Person; <name> "Mary"; <state> "CA" .
  :Bob <loves> :Mary .
  << :Bob <loves> :Mary >> <reason> <http://loveletters.com/123> .
}

现在查询:

select ?who ?whom ?reason
where {
  ?p1 a :Person ; <name> ?who .
  ?p2 a :Person ; <name> ?whom .
  << ?p1 <loves> ?p2 >> <reason> ?reason .
}

结果:

 who | whom | reason                     
-----+------+----------------------------
 Bob | Mary | http://loveletters.com/123 
1 rows
边意
2023-03-14

RDF不支持边缘属性,所以简单的回答是不。但是当然有方法在RDF中建模这种东西。

如果我们不想注释边缘,鲍勃和玛丽之间的关系将只是一个三元组,鲍勃是主体,玛丽是客体,还有“爱”

PREFIX : <http://example.org/ontology#>
PREFIX person: <http://example.org/data/person/>

person:Bob :loves person:Mary.

那么我们如何添加注释呢?

RDF有一个名为“RDF具体化”的内置解决方案。它允许对声明进行html" target="_blank">声明:

PREFIX : <http://example.org/ontology#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX person: <http://example.org/data/person/>
PREFIX statement: <http://example.org/data/statement/>

person:Bob :loves person:Mary.

statement:1 a rdf:Statement;
    rdf:subject person:Bob;
    rdf:predicate :loves;
    rdf:object person:Mary;
    :reason <http://loveletters.com/123>.

所以我们说有一个以鲍勃为主语,玛丽为宾语,“爱”的陈述

另一种方法是改变模式。而不是考虑“爱”

PREFIX relationship: <http://example.org/data/relationship/>

relationship:1 a :LovesRelationship;
    :who person:Bob;
    :whom person:Mary;
    :reason <http://loveletters.com/123>.

所以在我们的模型中我们创建了一个类: LovesAbby,表示“爱”,以及属性: who: who来表示双方。这种方法的缺点是图结构不再直接表示我们的社交网络。所以在查询两个人是如何关联的时候,我们总是要经过那些关系实体,而不仅仅是处理连接人们的边。

有一个名为RDF*的提案很好地解决了这个问题。(有时被称为RDR或物化正确完成。)RDF*/RDR添加了新语法,允许三元组成为其他三元组的主题:

<<person:Bob :loves person:Mary>>
    :reason <http://loveletters.com/123>.

缺点是它是非标准的,到目前为止只有少数系统(Blazegraph、AnzoGraph和Jena的扩展)支持它。截至2019年4月,海王星不在其中。

这在基本RDF版本以及选项1和选项3中都很容易做到:

ASK { person:Bob :loves ?anyone }

选项2需要不同的查询,因为模型已更改:

ASK {
   ?rel a :LovesRelationship;
       :who person:Bob.
}

这将匹配任何:LovesRelationship,其中:who属性是Bob,而不管:who:reason属性。

选项1,RDF物化:

SELECT ?whom ?why {
    ?statement a rdf:Statement;
        rdf:subject person:Bob;
        rdf:predicate :loves;
        rdf:object ?whom;
        :reason ?why.
}

我发现这个查询不是很直观,因为它谈论的是RDF语句,而我们真正感兴趣的是人和关系。

选项2,关系建模为实体:

SELECT ?whom ?why {
    ?rel a :LovesRelationship;
        :who person:Bob;
        :whom ?whom;
        :reason ?why.
}

这在我看来更好;一旦你接受了关系是这个模型中的实体,它就会变得相当直观。

选项3,RDF*,使用SPARQL*:

SELECT ?whom ?why {
    <<person:Bob :loves ?whom>>
        :reason ?why.
}

这是简洁直观的,所以很遗憾我们目前不能在大多数SPARQL系统中使用它!

 类似资料:
  • 我有一个组件文件夹。它们用一个文件公开,如下所示: 我有一个名为Status的JSX组件,如下所示: 它的任务是加载命名组件的行。 然后我有一个名为的组件,看起来像这样: 从'react'导入React 通过

  • 我们知道neo4j和Titan使用属性图作为他们的数据模型,这比RDF更复杂、更灵活。然而,我的团队正在构建一个名为gStore的图形数据库,它基于RDF数据集。gStore不支持N-Quads或属性图,因为它不能处理除了标签之外还有属性的边。 下面是一个RDF数据集:

  • 本文向大家介绍图的属性,包括了图的属性的使用技巧和注意事项,需要的朋友参考一下 图具有各种特性,取决于图的结构,这些特性可用于图的表征。这些属性是在与图论领域相关的特定术语中定义的。在本章中,我们将讨论所有图形中共有的一些基本属性。 连通图的半径 来自所有顶点的最小偏心率被视为图G的半径。将顶点到所有其他顶点之间的所有最大距离中的最小值视为图G的半径。 表示法-r(G) 从图中一个顶点的所有偏心率

  • 属性图是一个有向多重图,它带有连接到每个顶点和边的用户定义的对象。 有向多重图中多个并行(parallel)的边共享相同的源和目的地顶点。支持并行边的能力简化了建模场景,这个场景中,相同的顶点存在多种关系(例如co-worker和friend)。每个顶点由一个 唯一的64位长的标识符(VertexID)作为key。GraphX并没有对顶点标识强加任何排序。同样,顶点拥有相应的源和目的顶点标识符。

  • 问题内容: 如果我有以下简单代码段: 如您从小提琴中看到的:http : //jsfiddle.net/basarat/czVPG/,该按钮不可单击,并且ng- click(仅是一个jquery )不会执行。但是,它确实为锚标记执行。 是否因为禁用不是锚标记的有效属性? 如果是这样,为什么在没有按钮的情况下仍会触发dom click事件? 问题答案: 禁用不是锚标记的有效属性。来源:http :

  • 在HTML文档中,我有以下标记 我正在使用JSoup,希望提取中包含的URL,该URL由标识。在阅读了下面的文章之后 > JSoup解析标记中的数据 我想出了这段代码 但这些都是印刷品 我尝试过其他的变化,但都没有成功。我要么什么也没打印出来,要么最后出现了空指针异常。 我不确定如何提取