如何在给定 ontology 中获取未定义 rdfs:range 的数据类型属性

How to get, in a given ontology, the datatype properties without a defined rdfs:range

我需要在给定的 ontology 中通过 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: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) 
}

只是 select 数据类型属性,然后过滤掉没有范围属性的那些:

select ?p where {
  ?p a owl:DatatypeProperty
  filter not exists {
    ?p rdfs:range ?range
  }
}