原則として、複数のドメイン プロパティを指定するだけです。
<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
またはavenue
であることを表現するには、いくつかのオプションがあります。user
1 つの方法は、との共通のスーパークラスを検索 (または作成) し、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
として、2 つのクラスをドメインとして使用することもできます。ただし、このアプローチでは OWL を使用する必要があるため、単純な RDFS 推論では完全に解釈できません。
余談ですが、ヒント: RDF/XML の代わりに Turtle 構文を使い始めてください。読みやすく、編集しやすくなっています。たとえば、元のプロパティ定義は Turtle では次のようになります。
:hasName a rdf:Property ;
rdfs:domain :user ;
rdfs:range rdfs:Literal ;
rdfs:comment "Comment here. Blah blah blah." .