我有一个RDFS本体,有两个完全独立的类:User和Venue.我希望它们都具有通过被称为属性提供的名称hasName,对于a User应该看起来类似于:
<rdf:Property rdf:ID="hasName"> 
    <rdfs:comment> 
        Comment here. Blah blah blah.
    </rdfs:comment>
    <rdfs:domain rdf:resource="#user"/> 
    <rdfs:range rdf:resource="Literal"/> 
</rdf:Property>
但是,如果我也想要它Venue,它不会验证.
我该怎么做呢?
您原则上只需指定多个域属性:
<rdf:Property rdf:ID="hasName"> 
    <rdfs:domain rdf:resource="#user"/> 
    <rdfs:domain rdf:sources="#venue"/> 
</rdf:Property>
但是,虽然这是有效的RDF,但它并不意味着您可能认为它意味着什么.在RDF中,多个域被定义为具有交叉语义.这意味着如果您如上所述定义多个域,则RDF推理器将推断具有属性'hasName'的任何内容都是a user 和 a venue(而不是/或).  
要表达名称为a user 或 a的内容venue,您有多种选择.一种方法是找到(或创建)公共超类的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." .