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')