Ich habe Schwierigkeiten, eine korrekte SPARQL-Abfrage zu erstellen, die das richtige Format erzeugen wird, damit ich darin Protege öffnen kann. Unsere Ontologie dreht sich um Cocktails, wir möchten alle DBPedia Cocktails in unserer Datenbank haben, einschließlich der Zutaten (dbp:ingredients
) und des Rezepts (dbp:prep
). Der Cocktail in der Datenbank funktioniert gut, aber die Zutaten und das Rezept nicht. Ich habe jetzt die folgende Abfrage:?Literal als Betreff in SPARQL CONSTRUCT Abfrage
CONSTRUCT {?drink dct:subject ?category.
?drink dbp:prep ?recipe.
?drink dbp:ingredients ?ingredients.
?drink rdf:type owl:NamedIndividual .
?category rdf:type owl:Class.
dct:subject rdf:type owl:ObjectProperty.
dbp:prep rdf:type owl:ObjectProperty.
dbp:ingredient rdf:type owl:Objectproperty.
}
WHERE {
?drink dct:subject ?category.
?drink dbp:prep ?recipe.
?drink dbp:ingredients ?ingredients.}
Da Zutaten und Rezept sind jetzt nicht erklärt, es zeigt nicht im Einzelnen Tab in Protege. Aber wenn ich dies den CONSTRUCT Teil der Abfrage hinzu:
?recipe rdf:type owl:NamedIndividual.
?ingredients rdf:type owl:NamedIndividual.
Ich erhalte eine Fehlermeldung:
Virtuoso RDF01 Error Bad variable value in CONSTRUCT: "*5 cL vodka *10 cL orange juice" (tag 246 box flags 0) is not a valid subject, only object of a triple can be a literal
Ich denke, weil die Vorbereitung und Zutaten auf dbpedia sind nur eine Zeichenfolge, keine verknüpften Daten. Wie aber mache ich das so, dass es in Protege angezeigt wird?
Kurz gesagt, Literale können nicht Gegenstand sein. Sie sollten Dateneigenschaften deklarieren - keine Objekteigenschaften - und entsprechende Literale als Werte definieren. Es scheint schwierig zu sein, diese Literale zu analysieren, um Objekte zu extrahieren. Wahrscheinlich könnten Sie Wikidata für strukturiertere Informationen zu Cocktails abfragen (mit föderierten Abfragen zu DBpedia, wenn Sie Textbeschreibungen behalten möchten). BTW: https://stackoverflow.com/a/44227937/7879193 –
So ist es unmöglich, einen Literal als eine Eule zu deklarieren: NamedIndividual? Oder vielleicht eine Möglichkeit, das Literal in der Abfrage so zu konvertieren, dass es möglich ist? –
Ein IRI wird als eindeutiger Bezeichner eines 'Owl: NamedIndividual' verwendet. – AKSW