2016-12-07 1 views
1

指定されたオントロジで、rdfs:rangeが定義されていないデータ型プロパティをSPARQLクエリでチェックする必要があります。たとえば、次のコードでは、私が探している結果はdataproperty2になります。定義されたrdfs:rangeを持たないデータ型プロパティを取得する方法

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:rangeが定義されていません。

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 
    } 
} 
関連する問題