2016-03-30 18 views
2

Ich habe zwei Klassen in meiner kulinarischen Rezepte Ontologie:SPARQL REGEX läuft, aber zeigt nichts

<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"/> 

Das ist die Objekteigenschaften sind:

<!-- 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 

Zuerst, ich habe diese Abfrage zu erhalten alle Rezepte in meiner Ontologie

SELECT ?FoodAndBeveragesRecipes 
    WHERE { 
     ?Place :HasRecipe ?FoodAndBeveragesRecipes 
    } 

Das Ergebnis ist:

Coto Makassar

Saraba

EsPisangIjo

PalluMata

DanpoGoreng

DanpoRebus

SambalMangga

und jetzt versuche ich diese Abfrage auszuführen, um alle Datensätze mit dem Rezeptnamen "Danpo" zu erhalten (ich weiß nicht, ob es anderen Code einfacher als dieser gibt, wenn Sie wissen, bitte sagen Sie mir auch):

Die Abfrage läuft, aber es ist leer, ich bekomme meine Daten nicht und ich denke nichts Fehler. Ich habe mich gefragt, warum mein Filter nicht richtig funktioniert? und was soll ich tun, um die Datensätze mit dem genauen von meinem Keyword in meiner Regex zu bekommen? Kann mir jemand helfen?

Danke.

Antwort

2

Ich bin mir ziemlich sicher, dass dies ein Duplikat von Extract triples containing particular substring using SPARQL ist, und ich habe es als solches markiert, aber es könnte helfen, hier ein bisschen mehr Erklärung zu geben. Die hasRecipe Eigenschaft ist eine Objekteigenschaft. Das bedeutet, dass seine Objekte Individuen sein sollten, was bedeutet, dass sie IRIs sind. Die Funktion regex benötigt eine Zeichenfolge als Argument. Wenn Sie den regulären Ausdruck gegen den Text der IRI passen wollen, müssen Sie die str Funktion verwenden:

FILTER regex (str(?FoodAndBeveragesRecipes) ,"Danpo", "i") 

Das heißt, wenn Sie wollen einfach nur prüfen, ob es eine Zeichenfolge enthält, und wenn Sie mit SPARQL 1.1 können Sie contains verwenden:

filter contains(str(?FoodAndBeveragesRecipes), "Danpo") 
+0

es funktioniert, es fühlt sich so gut, vielen dank :) ich wirklich will den regulären Ausdruck gegen den Text der IRI entsprechen, so i wird die Regex-Funktion verwenden. – Jeje

+0

@Jeje OK, ich war mir nicht sicher, da es in Ihrem Beispiel eigentlich keinen regulären Ausdruck gibt (es passt nur zu einer Zeichenkette). Wenn Sie nur Fall wollen unsensibel überprüfen, können Sie prüfen, ob ** enthält (lcase (str (? FoodAndBeveragesRecipres)), "Danpo") **. Das könnte weniger kosten als ein ** Regex **. –

+0

ok, ich nehme deinen Rat. Es tut mir leid, ich bin neu in der Sparql-Abfrage, können Sie mir bitte erklären, wann und warum sollte ich stattdessen Regex verwenden?und was meinst du "es gibt eigentlich keinen regulären ausdruck in ihrem beispiel? ich dachte, es wäre die regex? oder sollte ich eine neue frage stellen? danke – Jeje