我想根据数据类型为float和string的注释查询我的ontology。 例如,我有一个具有float类型注释“EBC_value”和String类型注释“Label”的个体。
我该怎么做?我曾尝试使用REGEX,但是它不起作用。我没有任何错误,只是没有结果。
PREFIX ont: <http://vestbrygg.no/ontologies/beer.owl#>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?title
WHERE { ?x ont:title ?title
FILTER regex(?title, "Sack")
}
希望你们能提供帮助。谢谢。是的,除非你想看到并测试整个本体, 注释的代码是这样的:
<NamedIndividual rdf:about="&beer;Base_malt_-_Best_Malz">
<rdf:type rdf:resource="&beer;Light"/>
<beer:EBC_value rdf:datatype="&xsd;float"></beer:EBC_value>
<beer:Label rdf:datatype="&xsd;string">Sack</beer:Label>
</NamedIndividual>
答案 0 :(得分:0)
您的查询与您的数据无关,这就是您没有结果的原因。
首先,您的查询引用的ont:title
属性似乎不存在于您的数据中。
其次你的命名空间似乎没有对齐,我假设查询中的ont
命名空间应该与RDF / XML中的beer
命名空间相同,但你没有显示了名称空间,所以我只能猜到这一点。尽管名称空间主要是一种便利机制,但最好与前缀的使用保持一致,因为它会让事情变得更加混乱。
第三,绝对不需要使用REGEX()
您只需要使用适当的图形模式:
PREFIX beer: <http://vestbrygg.no/ontologies/beer.owl#>
SELECT ?x
WHERE
{
?x beer:Label "Sack" .
}
由于beer:Label
是一个属性,因此您可以直接在查询中访问它。这将找到beer:Label
属性值为Sack
的所有个体,如果要对搜索字符串进行部分匹配,则可以始终使用CONTAINS()
函数,这样会更快比REGEX()
:
PREFIX beer: <http://vestbrygg.no/ontologies/beer.owl#>
SELECT ?x
WHERE
{
?x beer:Label ?label .
FILTER(CONTAINS(?label, "Sack"))
}
这会找到所有存在beer:Label
并且包含值Sack
的个人
要回答您的评论,匹配类型值需要您知道值的类型,假设您使用xsd:float
,那么您将查询如下:
PREFIX beer: <http://vestbrygg.no/ontologies/beer.owl#>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>
SELECT ?x
WHERE
{
?x beer:EBC_value "4.8"^^xsd:float .
}