Regex SPARQL正则表达式正在运行,但未显示任何内容
我的烹饪食谱本体中有两个类:Regex SPARQL正则表达式正在运行,但未显示任何内容,regex,sparql,jena,ontology,Regex,Sparql,Jena,Ontology,我的烹饪食谱本体中有两个类: <Class rdf:about="&SouthSulawesiCulinaryRecipes;FoodAndBeveragesRecipes"> <equivalentClass> <Restriction> <onProperty rdf:resource="&SouthSulawesiCulinaryRecipes;Numbe
<Class rdf:about="&SouthSulawesiCulinaryRecipes;FoodAndBeveragesRecipes">
<equivalentClass>
<Restriction>
<onProperty rdf:resource="&SouthSulawesiCulinaryRecipes;NumberOfIngredientsRequired"/>
<minQualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</minQualifiedCardinality>
<onDataRange rdf:resource="&xsd;int"/>
</Restriction>
</equivalentClass>
<equivalentClass>
<Restriction>
<onProperty rdf:resource="&SouthSulawesiCulinaryRecipes;UsesTools"/>
<onClass rdf:resource="&SouthSulawesiCulinaryRecipes;KitchenEquipment"/>
<minQualifiedCardinality rdf:datatype="&xsd;nonNegativeInteger">1</minQualifiedCardinality>
</Restriction>
</equivalentClass>
</Class>
<Class rdf:about="&SouthSulawesiCulinaryRecipes;Place"/>
结果是:
科托马卡萨
萨拉巴
埃斯皮桑乔
帕卢马塔
丹波哥伦
丹波里斯
桑巴曼加
现在我正在尝试运行这个查询,以便获得所有配方名称为“Danpo”的数据集(我不知道是否还有其他代码比这个更简单,如果您知道,请也告诉我):
查询正在运行,但它是空的,我没有获取数据,我认为没有任何错误。
我想知道为什么我的过滤器不能正常工作?我应该怎么做才能得到在正则表达式中包含我的关键字的精确数据集呢?
有人能帮我吗
谢谢。我很确定这是的一个副本,并且我已经标记了它,但是在这里提供更多的解释可能也会有所帮助。hasRecipe属性是一个对象属性。这意味着它的对象应该是个体,这意味着它们将是虹膜。regex函数需要一个字符串作为参数。如果要将正则表达式与IRI的文本相匹配,则需要使用str函数:
FILTER regex(str(?FoodAndBeveragesRecipes),“Danpo”,“i”)
也就是说,如果您只想检查它是否包含字符串,并且您正在使用SPARQL 1.1,则可以使用:
过滤器包含(str(?FoodAndBeveragesRecipes),“Danpo”)
它工作正常,感觉很好,非常感谢:)实际上我想将正则表达式与IRI的文本相匹配,所以我将使用regex函数。@Jeje好的,我不确定,因为您的示例中实际上没有正则表达式(它只是匹配字符串)。如果您只是想不敏感地检查大小写,那么可以检查是否包含(lcase(str(?FoodAndBeveragesRecipres)),“danpo”)。那可能比正则表达式便宜。好吧,我接受你的建议。对不起,我是sparql查询的新手,你能解释一下我应该在什么时候以及为什么使用contains来代替regex吗?你是什么意思“您的示例中实际上没有正则表达式?我还以为是regex?还是我应该提出一个新问题?thanks@jeje您的查询中有一个正则表达式,但它不是一个非常复杂的正则表达式。它只是检查单个字符串,不区分大小写。正则表达式可以找到更复杂的东西,比如重复或替代。例如,“a[bc]?”匹配a、ab和ac。检查简单字符串包含并不需要正则表达式的所有功能。我只是建议您使用最简单的工具,在本例中是contains。我正在尝试使用REGEX boundary匹配并找到确切的值。这是SPARQL查询+“过滤器正则表达式(str(?FoodAndBeverages),\“\\b”+配方+“\\b\”}”
。我也在protege上运行相同的SPARQL查询。当我执行查询时,Jena返回一个空集(甚至不是空指针异常),而Protégé返回/查找正确的结果。我不知道问题是否出在正则表达式代码上。我想知道为什么我的正则表达式不能正常工作?你能帮我吗?[
<!-- http://www.semanticweb.org/hp/ontologies/2014/4/SouthSulawesiCulinaryRecipes#HasIngredients -->
<rdfs:range rdf:resource="&SouthSulawesiCulinaryRecipes;FoodAndBeverages"/>
<rdfs:domain rdf:resource="&SouthSulawesiCulinaryRecipes;_IngR"/>
</ObjectProperty>
<!-- http://www.semanticweb.org/hp/ontologies/2014/4/SouthSulawesiCulinaryRecipes#HasRecipe -->
<ObjectProperty rdf:about="&SouthSulawesiCulinaryRecipes;HasRecipe">
<rdfs:range rdf:resource="&SouthSulawesiCulinaryRecipes;FoodAndBeveragesRecipes"/>
<rdfs:domain rdf:resource="&SouthSulawesiCulinaryRecipes;Place"/>
<rdfs:subPropertyOf rdf:resource="&owl;topObjectProperty"/>
</ObjectProperty>
<!-- http://www.semanticweb.org/hp/ontologies/2014/4/SouthSulawesiCulinaryRecipes#IngR -->
<ObjectProperty rdf:about="&SouthSulawesiCulinaryRecipes;IngR">
<rdfs:domain rdf:resource="&SouthSulawesiCulinaryRecipes;FoodAndBeveragesRecipes"/>
<inverseOf rdf:resource="&SouthSulawesiCulinaryRecipes;Relation_Of"/>
<rdfs:range rdf:resource="&SouthSulawesiCulinaryRecipes;_IngR"/>
</ObjectProperty>
<!-- http://www.semanticweb.org/hp/ontologies/2014/4/SouthSulawesiCulinaryRecipes#Ing_Type -->
<ObjectProperty rdf:about="&SouthSulawesiCulinaryRecipes;Ing_Type">
<rdfs:range rdf:resource="&SouthSulawesiCulinaryRecipes;IngType"/>
<rdfs:domain rdf:resource="&SouthSulawesiCulinaryRecipes;_IngR"/>
</ObjectProperty>
<!-- http://www.semanticweb.org/hp/ontologies/2014/4/SouthSulawesiCulinaryRecipes#IngredientUsedToMake -->
<ObjectProperty rdf:about="&SouthSulawesiCulinaryRecipes;IngredientUsedToMake">
<rdfs:domain rdf:resource="&SouthSulawesiCulinaryRecipes;FoodAndBeverages"/>
<inverseOf rdf:resource="&SouthSulawesiCulinaryRecipes;HasIngredients"/>
<rdfs:range rdf:resource="&SouthSulawesiCulinaryRecipes;_IngR"/>
</ObjectProperty>
<!-- http://www.semanticweb.org/hp/ontologies/2014/4/SouthSulawesiCulinaryRecipes#MeasurementUnit -->
<ObjectProperty rdf:about="&SouthSulawesiCulinaryRecipes;MeasurementUnit">
<rdfs:range rdf:resource="&SouthSulawesiCulinaryRecipes;CookingMeasurements"/>
<rdfs:domain rdf:resource="&SouthSulawesiCulinaryRecipes;_IngR"/>
</ObjectProperty>
<!-- http://www.semanticweb.org/hp/ontologies/2014/4/SouthSulawesiCulinaryRecipes#RecipeOrigin -->
<ObjectProperty rdf:about="&SouthSulawesiCulinaryRecipes;RecipeOrigin">
<rdfs:domain rdf:resource="&SouthSulawesiCulinaryRecipes;FoodAndBeveragesRecipes"/>
<inverseOf rdf:resource="&SouthSulawesiCulinaryRecipes;HasRecipe"/>
<rdfs:range rdf:resource="&SouthSulawesiCulinaryRecipes;Place"/>
</ObjectProperty>
<!-- http://www.semanticweb.org/hp/ontologies/2014/4/SouthSulawesiCulinaryRecipes#Relation_Of -->
<ObjectProperty rdf:about="&SouthSulawesiCulinaryRecipes;Relation_Of">
<rdfs:range rdf:resource="&SouthSulawesiCulinaryRecipes;FoodAndBeveragesRecipes"/>
<rdfs:domain rdf:resource="&SouthSulawesiCulinaryRecipes;_IngR"/>
</ObjectProperty>
<!-- http://www.semanticweb.org/hp/ontologies/2014/4/SouthSulawesiCulinaryRecipes#ToolsUsedByRecipe -->
<ObjectProperty rdf:about="&SouthSulawesiCulinaryRecipes;ToolsUsedByRecipe">
<rdfs:range rdf:resource="&SouthSulawesiCulinaryRecipes;FoodAndBeveragesRecipes"/>
<rdfs:domain rdf:resource="&SouthSulawesiCulinaryRecipes;KitchenEquipment"/>
<inverseOf rdf:resource="&SouthSulawesiCulinaryRecipes;UsesTools"/>
</ObjectProperty>
<!-- http://www.semanticweb.org/hp/ontologies/2014/4/SouthSulawesiCulinaryRecipes#UsesTools -->
<ObjectProperty rdf:about="&SouthSulawesiCulinaryRecipes;UsesTools">
<rdfs:domain rdf:resource="&SouthSulawesiCulinaryRecipes;FoodAndBeveragesRecipes"/>
<rdfs:range rdf:resource="&SouthSulawesiCulinaryRecipes;KitchenEquipment"/>
</ObjectProperty> here
SELECT ?FoodAndBeveragesRecipes
WHERE {
?Place :HasRecipe ?FoodAndBeveragesRecipes
}
SELECT ?FoodAndBeveragesRecipes
WHERE {
?Place :HasRecipe ?FoodAndBeveragesRecipes .
FILTER regex (?FoodAndBeveragesRecipes ,"Danpo", "i")
}