2016-12-07 16 views
1

我需要檢查,在給定的本體,通過SPARQL查詢的手段,不具有RDFS數據類型屬性:定義的範圍。例如,在下面的代碼中,我正在查找的結果是dataproperty2如何獲得,在給定的本體,數據類型的屬性沒有定義RDFS:範圍

ont:Class1 a owl:Class . 
ont:Class2 a owl:Class . 

ont:dataProperty1 a owl:DatatypeProperty ; 
rdfs:domain ont:Class1 ; 
rdfs:label "dataProperty1"@en ; 
rdfs:range xsd:string . 

ont:dataProperty2 a owl:DatatypeProperty ; 
rdfs:domain ont:Class2 ; 
rdfs:label "dataProperty2"@en . 

我定義這個SPARQL查詢檢索與此條件相匹配的屬性的數量,但由於是一個聚合函數,即COUNT,我有問題要得到數據類型的屬性,數量不限,沒有定義rdfs:範圍。

SELECT ?return WHERE 
{ 
    { 
    SELECT (COUNT(?p) as ?pCount) 
    WHERE 
    { 
     ?p rdf:type owl:DatatypeProperty . 
     ?p rdfs:range ?range . 
    } 
    } 
    { 
    SELECT DISTINCT (COUNT(?p) as ?prop) 
    WHERE 
    { 
     ?p rdf:type owl:DatatypeProperty . 
    } 
    } 
    BIND((?prop - ?pCount) as ?return) 
} 

回答

4

只需選擇數據類型屬性,然後過濾掉不具有範圍屬性的:

select ?p where { 
    ?p a owl:DatatypeProperty 
    filter not exists { 
    ?p rdfs:range ?range 
    } 
} 
相關問題