我有OWL和SPARQL的問題,我無法解決。我已經定義了幾個類,但是對於有問題的問題,只有3個是重要的類:人,男性和女性;其定義是以下幾點:OWL中的類和子類用於推理的SPARQL查詢
<#People> a owl:Class ;
rdfs:label "People"@en .
<#Men> a owl:Class ;
rdfs:subClassOf <#People> ;
rdfs:label "Men"@en .
<#Women> a owl:Class ;
rdfs:subClassOf <#People> ;
rdfs:label "Women"@en .
然後例如在RDF數據:
<rdf:Description rdf:about="Registration#1">
<rdfs:label>ARCHEOLOGY GRADUATE</rdfs:label>
<ex:BranchKnowledge>ARTS AND HUMANITIES</ex:BranchKnowledge>
<ex:Degree>ARCHEOLOGY GRADUATE</ex:Degree>
<ex:Men rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">63</ex:Men>
<ex:Women rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">99</ex:Women>
<dcterms:coverage>2015/2016</dcterms:coverage>
</rdf:Description>
如果我想獲得號男士和每一個數據的婦女,我得到它用下面的查詢:
SELECT ?X ?degree ?branch ?men ?women
WHERE {
?X ex:Degree ?degree .
?X ex:BranchKnowledge ?branch .
?X ex:Men ?men .
?X ex:Women ?women
}
如果我現在想男人和女人的總數推斷都是Peopl Ë,我想,既然都是人的子類,我可以做下面的查詢:
SELECT ?X ?degree ?branch ?people
WHERE {
?X ex:Degree ?degree .
?X ex:BranchKnowledge ?branch .
?X ex:People ?people
}
然而我沒有得到任何結果。
我誤解了類和子類之間的關係,我想要做什麼或者會出現什麼問題? (我正在使用Virtuoso服務器)。
您應該意識到您正在使用punning這一事實,即對於'Men'和'Women'使用與OWL類和OWL數據屬性相同的URI。我不明白你爲什麼這樣做。 – AKSW
接下來,您使用'ex:People'作爲屬性,因此,您必須定義'ex:Men'和'ex:Women'是'ex:People'的子屬性。然後,如果支持,則必須在三重商店中啓用推理。 – AKSW
但是,更重要的是,這隻會導致兩行,這意味着您必須使用'sum'函數在SPARQL查詢中進行聚合。 – AKSW