2013-03-03 14 views
9

Wygląda na to, że nie grokuję zapytań SPARQL DESCRIBE. Muszę pobrać pełne wykresy zasobów pasujących do warunku. Z jednej końcowym SPARQL Próbowałem (norweski Rådata NA, http://data.bibsys.no/data/query_authority.html) to działa dobrze:Zapytanie SPARQL DESCRIBE query

PREFIX foaf: <http://xmlns.com/foaf/0.1/> 
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX owl: <http://www.w3.org/2002/07/owl#> 

DESCRIBE ?person WHERE { 
    ?person rdf:type foaf:Person . 
    FILTER EXISTS { ?person owl:sameAs ?sameAs } 
} 
LIMIT 100 

dostaję wynik z zasobów osób, które mają owl: sameAs trzyosobowych.

Na innych punktów końcowych sparql, Onki Light (http://sparql.onki.fi/sparql.tpl) i dbpedia (http://dbpedia.org/sparql) podobne zapytanie

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX skos: <http://www.w3.org/2004/02/skos/core#> 

DESCRIBE ?x WHERE { 
    ?x rdf:type skos:Concept . 
    FILTER EXISTS { ?x skos:prefLabel ?prefLabel } 
} 
LIMIT 100 

zwraca wiele zasobów, które nie mają ani RDF: type = SKOS: Pojęcie ani SKOS: prefLabel, więc Oczywiście nie wykonuję poprawnie zapytania. W jaki sposób należy podać takie zapytanie, aby uzyskać wynik, którego potrzebuję?

Odpowiedz

10

W „otrzymane środki” bez skos:prefLabel lub skos:Concept prawdopodobnie związane z zasobem, który spełnia wymagania.

Zapytanie SPARQL DESCRIBE nie zwraca zasobów dopasowanych przez wzorzec wykresu zapytania, ale wykres RDF, który "opisuje" te zasoby. To od usług sparql zależy, jakie trójki zostaną uwzględnione w opisie zasobu. (Patrz poniżej normy)

W3C Proposed Recommendation on SPARQL 1.1 mówi:

DESCRIBE forma zwraca pojedynczy wynik RDF RDF wykres zawierający dane dotyczące zasobów. [...] Opis jest określony przez usługę zapytania.

Tak, zasoby niespodziewanie otrzymać być może opisujące zasoby rzeczywiście chcą. Aby zbadać problem: Sprawdź trzykrotnie, które powinieneś otrzymać w związku z pożądanym zasobem. Dobrym sposobem jest rozpoczęcie od LIMIT 1, aby zobaczyć efekt zapytań DESCRIBE.

Być może zapytanie SELECT jest tym, czego potrzebujesz? Zwraca tylko zasoby dopasowane przez wzorzec wykresu.

+0

Dzięki! Próbowałem DESCRIBE i otrzymałem oczekiwany zasób i wiązkę powiązanych zasobów, tak jak piszesz. SELECT lub CONSTRUCT nie są opłacalnymi opcjami w danym przypadku, ponieważ nie znam faktycznej struktury danych. Ale wiedząc, jakie są "dodatkowe" zasoby, mogę po prostu zignorować je podczas przetwarzania wyniku. –

1

SELECT lub budowy nie są realne możliwości w przedmiotowej sprawie, gdyż nie wiem rzeczywistą strukturę danych

Dlaczego tak mówisz? Myślę, że albo chce się tylko zasoby:

select ?x WHERE { 
    ?x rdf:type skos:Concept . 
    FILTER EXISTS { ?x skos:prefLabel ?prefLabel } 
} 
LIMIT 100 

lub ich wszystkie wychodzące trójek:

select ?x ?p ?y WHERE { 
    ?x rdf:type skos:Concept. 
    FILTER EXISTS { ?x skos:prefLabel ?prefLabel } 
    ?x ?p ?y 
} 
LIMIT 100 
+0

Dzięki! Próbowałem czegoś takiego, ale spartaczyłem składnię SPARQL. Kolejny numer to najlepszy sposób na zbudowanie rzeczywistego wykresu z wyniku XML SPARQL. –

1

Jak stwierdził @Thomas, DESCRIBE jest underspecified trochę przez normę, a więc będziesz uzyskać niespójne wyniki. Jednakże, używając CONSTRUCT, możesz zwrócić to, co wiele silników zwróci dla DESCRIBE, tj. SPO plus OPS, i robić to konsekwentnie pomiędzy usługami.Oto zapytanie, które wykonuje to:

CONSTRUCT { 
    ?person ?p ?o . 
    ?s ?p1 ?person . 
} 
WHERE { 
    ?person rdf:type foaf:Person . 
    FILTER EXISTS { ?person owl:sameAs ?sameAs } . 
    ?person ?p ?o . 
    ?s ?p1 ?person . 
} 

ten dostaje grafu RDF, że „opisuje” środki związany ?person, a mianowicie wszystkie właściwości ?person i wszystkie właściwości, których wartość (przedmiot) jest osobą?.

+0

Interesujące! Próbowałem to na dbpedia (punkt końcowy Rådata Nå SPARQL obecnie nie działa): PREFIX rdf: PREFIX skos: KONSTRUKCJA { ? koncepcja? p? o. ? S? P1? Koncepcji. } WHERE { ? Koncepcja rdf: type skos: Concept. FILTER EXISTS {? Concept skos: prefLabel? PrefLabel}. ? Pojęcie? P? O. ? S? P1? Koncepcji. } LIMIT 100 Z mieszanymi wynikami. Niektóre dane są tym, czego chcę, inne nie spełniają warunków. –

+0

Spróbuj zwiększyć LIMIT. SPARQL nie otrzyma danych w żadnej określonej kolejności, więc możesz również wypróbować kombinacje LIMIT/OFFSET z ORDER BY. – scotthenninger