SPARQL列出所选OWL数据类型的文字

时间:2017-03-27 17:19:44

标签: sparql owl

如何在SPARQL中列出所选OWL数据类型(此处为:VisibilityKind)的所有文字? VisibilityKind的OWL数据类型定义是:

DatatypeDefinition( :VisibilityKind 
    DataOneOf( "public"^^xsd:string "private"^^xsd:string "package"^^xsd:string ) 
)

2 个答案:

答案 0 :(得分:1)

使用SPARQL,您可以获得具有特定数据类型IRI的所有文字。例如,假设您有包含"public"^^:VisibilityKind等文字的数据,您可以写:

SELECT ?literal WHERE {
    ?s ?p ?literal .
    FILTER (datatype(?literal) = :VisibilityKind)
}

但这肯定不是你想要的,因为你可能没有这种数据类型IRI的文字。你可能会喜欢的东西大致可以表达为:

SELECT ?literal WHERE {
    ?s ?p ?literal .
    FILTER (isInDatatype(?literal,:VisibilityKind))
}

其中isInDatatype检查与?o相关联的值是否属于:VisibilityKind的值空间。但是,标准SPARQL 1.1中不存在此类功能。而且,即使它存在,也需要查询引擎理解OWL 2的语义并进行推理。因此,您需要一个实现OWL 2 DL entailment regime的SPARQL引擎,并且您必须通过一些查询来获取所需内容:

SELECT ?literal WHERE {
    ?s ?p ?literal .
    [] a :VisibilityKind;
       :owl:sameAs ?literal;
    FILTER (isLiteral(?literal))
}

如果要查找SPARQL 1.1 Entailment制度的实现,可以查看SPARQL工作组收集的implementation reports

答案 1 :(得分:0)

要直接回答,您需要搜索owl:oneOf列表中的所有值:

SELECT ?resource ?value
WHERE {
   :VisibilityKind owl:equivalentClass / owl:oneOf / ( rdf:rest*/rdf:first ) ?value .
   ?resource ?prop ?value .
}

但是,有一点需要注意 - 其他属性的值可能是“public”“private”或“package”。要确保只获取:VisibilityKind的值,请将该数据类型定义为使用数据类型的一系列属性:

{ :someProp rdfs:domain :VisibilityKind }

然后使用以下查询获取在范围内定义:VisibilityKind的所有属性:

SELECT ?resource ?value
WHERE {
   ?prop rdfs:range :VisibilityKind .
   ?resource ?prop ?value
}