2013-08-27 21 views
8

Herhangi biri Sparql'deki Nesne Özelliği Sınıflarını sorgulamayı nasıl biliyor? bizSparql'de Nesne Özelliğine Sahip Sınıflar nasıl sorgulanır

Human ----(hasPizza)---> Pizzas 

İnsan izler ve pizzalar sınıfları (veya kavramlar) vardır içeren bir OWL dosyası var varsayalım. SPARQL, bu sorgu hiçbir şey döndürür:

select ?x ?y where { 
    ?x hasPizza ?y 
} 

Ama

Human:Jim ----(hasPizza)---> Pizzas:cheesePizza 

gibi bu kavramların altında iki kişi (veya kişiler) eklerseniz bu sorgu dönmek ?x=Jim ve ?y=cheesePizza nasıl ?x=Human alabilir ve edecek ?y=Pizza SPARQL kullanarak? Böyle

+3

Eğer varlıkbilimin RDF sürümünü gönderir misiniz? Sınıflar doğrudan OWL'deki özelliklerle bağlantılı değildir, genellikle varoluşsal bir kısıtlama aksiyomu ile yapılır. Böylece ontolojinizin RDF versiyonunu açın ve yapıya bakın; Daha sonra SPARQL sorgunuzla eşleştirmeyi deneyebilirsiniz. – loopasam

+1

Daha büyük bir olasılıkla, "hasPizza", _rdfs: domain_ ve _rdfs: range_ olan "Human" ve "Pizzas" gibi bir nesne özelliğiniz var. Yine de, bu da aramak için nispeten kolaydır, ama ayrı bir görevdir. –

cevap

16

Verilen verileri (RDF/XML): daha okunabilir Turtle

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

veya aynı: onaylama işlemi Jim hasPizza CheesePizza bir üçlü olduğunu

@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 . 

ihbar olduğunu grafik. hasPizza nesne özelliği için etki alanı ve aralık aksiyomları iki üç katlıdır: hasPizza rdfs:domain Human ve hasPizza rdfs:range Pizza. SPARQL sorguları, grafikteki üçlülere karşı sorgu kalıplarını eşleştirir. Böylece gibi bir sorgudan: orada yüklem :hasPizza olduğu grafikte üçlü biridir ve bu üçlü konu olarak bir :Jim çünkü

prefix :  <http://example.org/pizzas#> 

select ?x ?y where { 
    ?x :hasPizza ?y 
} 

sonuçların böyle

olarak
$ arq --data pizzas.ttl --query query.sparql 
----------------------- 
| x | y   | 
======================= 
| :Jim | :CheesePizza | 
----------------------- 

alacak ve nesne olarak :CheesePizza. Aslında almak için kolay olan :hasPizza özelliğinin etki alanını ve aralığını gerçekten soruyormuşsunuz gibi geliyor. Böyle bir sorgu kullanın:

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 . 
} 

ve böyle sonuçlar alırsınız:

$ arq --data pizzas.ttl --query query.sparql 
------------------- 
| domain | range | 
=================== 
| :Human | :Pizza | 
-------------------