我需要在给定的本体中通过SPARQL查询检查没有定义rdfs:range的数据类型属性。例如,在以下代码中,我要查找的结果为dataproperty2
。
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)
}
答案 0 :(得分:4)
只需选择数据类型属性,然后过滤掉那些没有范围属性的属性:
select ?p where {
?p a owl:DatatypeProperty
filter not exists {
?p rdfs:range ?range
}
}