Sparql 有没有办法向RDF三元组添加其他信息?

Sparql 有没有办法向RDF三元组添加其他信息?,sparql,rdf,Sparql,Rdf,我有RDF三元组表示的文档,一些用户可以在这些文档之间添加关系。我计划记录这些关系的方式如下:(RDF/XML代码的子集) (关系建立在内容表中,因此tocMember和isInToc名称) 但我现在需要存储创建此关系的用户ID。一种异端的方式可能是添加属性,例如: <rdf:Description rdf:about="SOURCEDocId"> <kb:tocMember xml:createdBy="USERId" rdf:resource="TARGETDo

我有RDF三元组表示的文档,一些用户可以在这些文档之间添加关系。我计划记录这些关系的方式如下:(RDF/XML代码的子集)


(关系建立在内容表中,因此tocMember和isInToc名称)

但我现在需要存储创建此关系的用户ID。一种异端的方式可能是添加属性,例如:

<rdf:Description rdf:about="SOURCEDocId">
    <kb:tocMember xml:createdBy="USERId" rdf:resource="TARGETDocId"/>
</rdf:Description>

<rdf:Description rdf:about="TARGETDocId">
    <kb:isInToc xml:createdBy="USERId" rdf:resource="SOURCEDocId"/>
</rdf:Description>

我不确定RDF triplestores是否会接受此信息,并且此信息不能用于SPARQL请求。 也可以创建一个链接实体并对其进行限定,但这对于一个非常小的实现需求来说是一个混乱。
因此,一种更好的方式?

关于语句的语句可以通过以下方式在RDF中表示:

1) RDF物化

2) n元关系

3) 单态属性

4) 命名图

5) 使用RDF*

每种选择都有优点和缺点

下面是如何使用RDF具体化来表示您的案例(示例与第一条语句一起):

如前所述,使用Turle使其清晰易读。然而,由于您在RDF/XML中给出了示例,具体化将如下所示,用XML序列化:

  <rdf:Statement rdf:ID="SOURCEDocId-tocMember-TARGETDocId">
    <createdBy rdf:resource="#USERId"/>
    <rdf:subject rdf:resource="#SOURCEDocId"/>
    <rdf:predicate rdf:resource="http://example.org/kb/tocMember"/>
    <rdf:object rdf:resource="#TARGETDocId"/>
  </rdf:Statement>
这里的
:createdBy
显示为本地创建的,但是如果您重用适当词汇表中的属性,例如Dublic Core中的
dc:creator
,或者schema.org中的
schema:creator
,当然会更好

使用选项(2),您不会直接将源链接到目标,而是通过中间节点(如
:targetEntry1
)链接,然后可以将其与值和来源关联:

:SOURCEDocId kb:tocMember :targetEntry1 . 
:targetEntry1 :value :TARGETDocId ;
     :createdBy :USERId .

查看可用的出处方法:RDF具体化、singleton属性、RDF*和其他方法,如Wikidata。
xml:createdBy=“USERId”
-这是什么?RDF不是XML。。。不管是重新定义还是n元关系——仅此而已。顺便说一句,在我看来,将RDF数据显示为XML是最糟糕的情况。什么不使用更可读的格式,如N-Triples、Turtle等?在我的问题中,“XML:createdBy=“USERId”被认为是异端的东西。而RDF/XML则是公开案例的最简单方法
  <rdf:Statement rdf:ID="SOURCEDocId-tocMember-TARGETDocId">
    <createdBy rdf:resource="#USERId"/>
    <rdf:subject rdf:resource="#SOURCEDocId"/>
    <rdf:predicate rdf:resource="http://example.org/kb/tocMember"/>
    <rdf:object rdf:resource="#TARGETDocId"/>
  </rdf:Statement>
[
  rdf:type rdf:Statement ;
  :createdBy :USERId ;
  rdf:object :TARGETDocId ;
  rdf:predicate kb:tocMember ;
  rdf:subject :SOURCEDocId .
]
:SOURCEDocId kb:tocMember :targetEntry1 . 
:targetEntry1 :value :TARGETDocId ;
     :createdBy :USERId .