在理解 RDF 三重语句的上下文中如何使用空白节点?

How are blank nodes used in the context of understanding RDF triple statements?

我理解 RDF 中的 named node 是一个有名称的节点(即可以通过 IRI 识别),而 blank node 是一个没有命名的节点(即未通过 IRI 描述)。

在 RDF 中节点表示资源是否正确?在这种情况下,命名节点和空白节点都将被视为资源。

查看 RDF 模式时,我看到许多 XML 标记似乎代表节点(空白和命名)。例如:

<rdf:Description rdf:about="http://.../SomeObject">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#Class"/>
    <rdfs:subClassOf rdf:resource="http://.../OtherClass"/>
    <rdfs:subClassOf rdf:nodeID="node1e2d5tndrx143"/>
</rdf:Description>

<rdf:Description rdf:nodeID="node1e2d5tndrx60">
    <rdf:type rdf:resource="http://www.w3.org/2000/01/rdf-schema#Datatype"/>
    <owl:oneOf rdf:nodeID="node1e2d5tndrx61"/>
</rdf:Description>

(因为这个节点引用了另一个空白节点)

<rdf:Description rdf:nodeID="node1e2d5tndrx61">
    <rdf:type rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#List"/>
    <rdf:first>1</rdf:first>
    <rdf:rest rdf:nodeID="node1e2d5tndrx62"/>
</rdf:Description>

在我看来,这个特定 API 端点的可用资源包括这三个节点,其中一个名为 http://www.w3.org/2001/XMLSchema#float,其中两个为空白(node1e2d5tndrx60 , node1e2d5tndrx61)

这个 link - https://lists.w3.org/Archives/Public/public-esw-thes/2004Nov/0061.html - 似乎是关于 rdf:about vs rdf:ID vs rdf:nodeID 的旧 w3.org 提到空白节点通过 rdf:nodeID 属性指示。

如果这两个节点在这个特定的 API 端点都是 'resources'(我假设它们是 - 如果不正确请告诉我),据我所知我永远无法查询直接是空白节点,但在这个特定的 RDF 文档中,空白节点用于限制指定 hasObjectClass [的三元组允许的对象(通过 rdf:range 属性) =84=]:

<rdf:Description rdf:about="http://.../hasSomeObjectClass">
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
    <rdfs:label>Some Object Class</rdfs:label>
    <rdfs:domain rdf:resource="http://..../SomeObject"/>
    <rdfs:range rdf:nodeID="node1e2d5tndrx60"/>
</rdf:Description>

我的理解是使用 :hasSomeObjectClass 谓词 (<subj> <pred> <obj>) 的三元组将:

  1. Include/can 仅包括 rdf:type "SomeObject"
  2. 的主题
  3. Include/can 仅包含空白节点 node1e2d5tndrx60
  4. 的 'subtyped' 对象

最后,在空白节点 node1e2d5tndrx60 中,我看到有一个 owl 约束 - 任何允许的对象都可以被视为列表的一部分。大概是共享特定 class?

的对象列表

问题

查看 hasSomeObjectClass 资源的域 属性,我可以找到:

  1. 代表 SomeObject class
  2. 的节点
  3. 许多节点具有 rdfs:subClassOf 属性 并且引用 SomeObject 作为资源

因此,就如何解析谓词指定此类域的三重规范而言,我从概念上理解它是如何 enforced/resolved。

但是我看不到空白节点之间的 link 和范围约束如何 enforced/resolved。 是否容易从概念层面解释如何使用空白节点来解析指定的三元组?

我对关联数据的世界非常非常陌生。请让我知道如何改进这个问题!

空白节点标识符是本地标识符,不是 IRI。空白节点与 RDF 规范中的 IRI 和文字 as defined 不相交。

空白节点的一些流行应用是:

  1. 描述多组件结构,例如列表或三元组分组,例如当三元组中的一个对象是地址时,它不是用 IRI 标识的,而是用一组描述它的三元组标识的。
locn:address [
       rdf:type locn:Address ;
       locn:addressArea "Amsterdam"@en ;
       locn:fullAddress "Oudekerksplein 23"@en ;
       locn:postCode "1012 GX" .
     ] .

这是最流行的表示空白节点的方式,但也可以显示它们:

ex:AdddressDeOudeKerk locn:address _:b1 .
_:b1 rdf:type locn:Address .
_:b1 locn:addressArea "Amsterdam"@en .
_:b1 locn:fullAddress "Oudekerksplein 23"@en .
_:b1 locn:postCode "1012 GX" .
  1. 关于陈述的陈述

    2.1。具体化

    2.2。替代方法,例如维基数据中使用的方法。

例如,在这个查询中

SELECT ?president ?presidentLabel ?image ?start
WHERE {
    ?president  wdt:P31 wd:Q5 ;      
         p:P39 [ ps:P39 wd:Q11696;
                 pq:P580 ?start ];
         wdt:P18 ?image .

   SERVICE wikibase:label {
           bd:serviceParam wikibase:language "en" .
   }

 }

p:P39 语句 "position held" 的 属性,而 ps:P39 value "position held" 空格不是这样的语句,它是三元组模式 ?president p:P39 ?statement for which ?statement ps:P39 wd:Q11696 and ?statement pq:P580 ?start and 的值(对象)要求语句的特定特征,在本例中为 "start time"(带有限定符 pq:P580

  1. OWL 中的匿名 类 示例:
:Vegetarian rdf:type owl:Class ;
        owl:equivalentClass [ rdf:type owl:Restriction ;
                              owl:onProperty :eats ;
                              owl:allValuesFrom :Vegetable
                            ] .
  1. SHACL 中的形状 示例:
:Contract
  rdf:type sh:NodeShape ;
  sh:property [
      rdf:type sh:PropertyShape ;
      sh:path :hasParty ;
      sh:minCount 2 ;
      sh:name "has party" ;
    ] ;
  sh:targetSubjectsOf :hasParty ;
.