wie diese gegebene Daten (in RDF/XML):
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:pizzas="http://example.org/pizzas#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<owl:Ontology rdf:about="http://example.org/pizzas"/>
<owl:Class rdf:about="http://example.org/pizzas#Pizza"/>
<owl:Class rdf:about="http://example.org/pizzas#Human"/>
<owl:ObjectProperty rdf:about="http://example.org/pizzas#hasPizza">
<rdfs:domain rdf:resource="http://example.org/pizzas#Human"/>
<rdfs:range rdf:resource="http://example.org/pizzas#Pizza"/>
</owl:ObjectProperty>
<owl:NamedIndividual rdf:about="http://example.org/pizzas#Jim">
<rdf:type rdf:resource="http://example.org/pizzas#Human"/>
<pizzas:hasPizza>
<owl:NamedIndividual rdf:about="http://example.org/pizzas#CheesePizza">
<rdf:type rdf:resource="http://example.org/pizzas#Pizza"/>
</owl:NamedIndividual>
</pizzas:hasPizza>
</owl:NamedIndividual>
</rdf:RDF>
oder gleich sein, in der lesbaren Schildkröte:
@prefix : <http://example.org/pizzas#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix pizzas: <http://example.org/pizzas#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
pizzas:Jim
a pizzas:Human , owl:NamedIndividual ;
pizzas:hasPizza pizzas:CheesePizza .
pizzas:hasPizza
a owl:ObjectProperty ;
rdfs:domain pizzas:Human ;
rdfs:range pizzas:Pizza .
pizzas:Human
a owl:Class .
pizzas:Pizza
a owl:Class .
<http://example.org/pizzas>
a owl:Ontology .
pizzas:CheesePizza
a pizzas:Pizza , owl:NamedIndividual .
Hinweis, dass die Behauptung Jim hasPizza CheesePizza
in einer Dreifach ist der Graph. Die Domänen- und Bereichsaxiome für die Objekteigenschaft hasPizza
sind zwei Tripel: hasPizza rdfs:domain Human
und hasPizza rdfs:range Pizza
. SPARQL-Abfragen stimmen Abfragemuster mit den Tripeln im Diagramm überein. So wird aus einer Abfrage wie:
prefix : <http://example.org/pizzas#>
select ?x ?y where {
?x :hasPizza ?y
}
Sie werden die Ergebnisse erhalten wie
$ arq --data pizzas.ttl --query query.sparql
-----------------------
| x | y |
=======================
| :Jim | :CheesePizza |
-----------------------
, weil es ein triple im Graphen, dessen Prädikat ist :hasPizza
, und das dreifache eines :Jim
als Gegenstand hat, und :CheesePizza
als das Objekt. Es klingt wie Sie tatsächlich nach der Domain und Reichweite der :hasPizza
Eigenschaft fragen, die auch einfach zu finden sind. Verwenden Sie eine Abfrage wie folgt:
prefix : <http://example.org/pizzas#>
prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>
select ?domain ?range where {
:hasPizza rdfs:domain ?domain ;
rdfs:range ?range .
}
und Sie werden Ergebnisse wie diese:
$ arq --data pizzas.ttl --query query.sparql
-------------------
| domain | range |
===================
| :Human | :Pizza |
-------------------
Könnten Sie die RDF-Version Ihrer Ontologie posten? Klassen sind nicht direkt durch Eigenschaften in OWL verknüpft, sie werden normalerweise über ein Existenzbeschränkungsaxiom ausgeführt. Öffnen Sie also die RDF-Version Ihrer Ontologie und schauen Sie sich das Konstrukt an. Sie können dann versuchen, es mit Ihrer SPARQL-Abfrage abzugleichen. – loopasam
Es klingt viel wahrscheinlicher, dass Sie eine Objekteigenschaft 'hasPizza' haben, die _rdfs: domain_ und _rdfs: range_ davon' Human' bzw. 'Pizzas' sind. Dies ist relativ einfach zu suchen, aber es ist eine unterschiedliche Aufgabe. –