如何在SPARQL中列出所选OWL数据类型(此处为:VisibilityKind)的所有文字? VisibilityKind的OWL数据类型定义是:
DatatypeDefinition( :VisibilityKind
DataOneOf( "public"^^xsd:string "private"^^xsd:string "package"^^xsd:string )
)
答案 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
}