如何获取RDFlib中命名空间下的URI列表?
例如,我们可以这样做:
from rdflib.namespace import FOAF
但是我们如何找出FOAF中可用的URI?
事实上,有几个命名空间(RDF,RDFS,FOAF,...),我发现很难探究每个命名空间中的URI,以及使用哪个URI。比方说,如果我想表达一个归属关系,我应该使用RDFS.member或其他什么?链接数据是否有标准,或者它仍然是临时的?
我是RDF新手,对不起,如果这似乎是一个明显的问题。
谢谢!
答案 0 :(得分:0)
IRI只是不透明的标识符。当我们谈到关联数据和语义Web时,rdfs:member
语义分配给属性的语义是在语义Web的外部定义的(希望通过良好的文档,当然应该是,与rdfs:comment
等属性相关联,以及使用。对于rdfs:member
,描述来自RDFS建议:
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')