原则上,您可以只指定多个域属性:
<rdf:Property rdf:ID="hasName">
<rdfs:domain rdf:resource="#user"/>
<rdfs:domain rdf:sources="#venue"/>
</rdf:Property>
然而,虽然这是有效的 RDF,但它并不意味着您可能认为它意味着什么。在 RDF 中,多个域被定义为具有交叉语义。这意味着,如果您如上所述定义多个域,RDF 推理器将推断任何具有属性“hasName”的东西都是 auser
和a venue
(而不是非此即彼)。
要表示具有名称的事物是 auser
或a venue
,您有多种选择。一种方法是找到(或创建) and 的公共超类,user
并将其设为venue
您的域:
<rdf:Property rdf:ID="hasName">
<rdfs:comment>
Comment here. Blah blah blah.
</rdfs:comment>
<rdfs:domain rdf:sources="#ThingsWithNames"/>
</rdf:Property>
<rdfs:Class rdf:about="#ThingsWithNames"/>
<rdfs:Class rdf:about="#user">
<rdfs:subClassOf rdf:resource="#ThingsWithNames"/>
</rdfs:Class>
<rdfs:Class rdf:about="#venue">
<rdfs:subClassOf rdf:resource="#ThingsWithNames"/>
</rdfs:Class>
另一种方法是您使用owl:unionOf
这两个类作为您的域。但是,这种方法需要使用 OWL,因此一个简单的 RDFS 推理器将无法完全解释它。
顺便说一句,提示:开始使用 Turtle 语法而不是 RDF/XML。它更容易阅读和编辑。例如,您在 Turtle 中的原始属性定义如下所示:
:hasName a rdf:Property ;
rdfs:domain :user ;
rdfs:range rdfs:Literal ;
rdfs:comment "Comment here. Blah blah blah." .