1

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

例如,我们可以这样做:

from rdflib.namespace import FOAF

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

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

我是 RDF 的新手,如果这似乎是一个明显的问题,我很抱歉。

谢谢!

4

1 回答 1

0

IRI 只是不透明的标识符。当我们谈到关联数据和语义网时,rdfs:member分配给属性的含义的语义是在语义网之外定义的(希望通过良好的文档,当然,它应该与属性相关联rdfs:comment为像),并通过使用。对于rdfs:member,描述来自 RDFS 推荐:

5.1.6 rdfs:会员

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

rdfs:member 的 rdfs:domain 是 rdfs:Resource。rdfs:member 的 rdfs:range 是 rdfs:Resource。

容器成员属性在同一文档中进行了描述:

rdfs:ContainerMembership 属性

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 页面上的示例确实包含了一些 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中可用规范。尽管RDF名称空间似乎定义了一些符号常量(例如,RDF.type),但文档说这RDF.type实际上等同于RDF['type']

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

  >>> 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')
于 2013-08-05T03:00:03.910 回答