RDFLib:获取命名空间下的所有URI

时间:2013-08-04 21:53:11

标签: rdf rdflib linked-data

如何获取RDFlib中命名空间下的URI列表?

例如,我们可以这样做:

from rdflib.namespace import FOAF

但是我们如何找出FOAF中可用的URI?

事实上,有几个命名空间(RDF,RDFS,FOAF,...),我发现很难探究每个命名空间中的URI,以及使用哪个URI。比方说,如果我想表达一个归属关系,我应该使用RDFS.member或其他什么?链接数据是否有标准,或者它仍然是临时的?

我是RDF新手,对不起,如果这似乎是一个明显的问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

IRI只是不透明的标识符。当我们谈到关联数据和语义Web时,rdfs:member语义分配给属性的语义是在语义Web的外部定义的(希望通过良好的文档,当然应该是,与rdfs:comment等属性相关联,以及使用。对于rdfs:member,描述来自RDFS建议:

  

5.1.6 rdfs:member

     

rdfs:member是rdf:Property的一个实例,它是所有容器成员资格属性的超级属性,即每个容器成员资格属性与属性rdfs:member的rdfs:subPropertyOf关系。

     

rdfs:member的rdfs:domain是rdfs:Resource。 rdfs:member的rdfs:成员是rdfs:Resource。

容器成员资格属性在同一文档中描述:

  

rdfs:ContainerMembershipProperty

     

rdfs:ContainerMembershipProperty类具有属性rdf:_1,rdf:_2,rdf:_3 ...作为实例,用于声明资源是容器的成员。 rdfs:ContainerMembershipProperty是rdf:Property的子类。 rdfs:ContainerMembershipProperty的每个实例都是rdfs:subPropertyOf rdfs:member属性。

     

给定容器C,形式的三倍:

     
    

C rdf:_nnn O

  
     

其中nnn是大于0的整数的十进制表示,没有前导零,表示O是容器C的成员。

     

容器成员资格属性可以应用于容器以外的资源。

我读到最后一行时实际上有点意外,但由于成员资格属性和rdfs:member可以应用于容器以外的资源,因此在您自己的数据结构上使用它们似乎是可以接受的。

即便如此,定义自己更具体的属性并简单地断言它是rdfs:member子属性可能更合适。例如,您可以指定将一个国家/地区与某个多国联盟相关联的politics:memberStateOf属性为rdfs:subPropertyOf rdfs:member

在其他情况下,咨询词汇表的文档也是一个好主意。例如,RDFlib页面上的the examples确实包含了对FOAF的一些使用:

from rdflib import RDF
...
# Create a namespace object for the Friend of a friend namespace.
FOAF = Namespace("http://xmlns.com/foaf/0.1/")
...
# Add triples using store's add method.
store.add((donna, RDF.type, FOAF["Person"]))
store.add((donna, FOAF["nick"], Literal("donna", lang="foo")))

这里使用FOAF的方式(与你的问题有点不同,也许现在有一个库)传入字符串取决于知道哪些URI应该存在,并且该信息可用在FOAF specification。虽然看起来RDF命名空间定义了一些符号常量(例如,RDF.type),但the documentation表示RDF.type实际上等同于RDF['type']

  

命名空间中的完全限定URI可以通过Namespace实例上的属性或字典访问来构造:

  >>> owl.seeAlso
  rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#seeAlso')
  >>> owl['seeAlso']
  rdflib.term.URIRef(u'http://www.w3.org/2002/07/owl#seeAlso')