2013-04-15 17 views

Odpowiedz

10

Można użyć numeru UNION, np.

PREFIX prefix: <http://example.org/ns#> 
SELECT * 
WHERE { 
    { ?x a prefix:type1 } UNION { ?x a prefix:type2 } 
} 

Uwaga wykorzystanie a co jest kluczowe SPARQL, które mogą być używane w pozycji kwantyfikatorów i odnosi się do typu RDF URI http://www.w3.org/1999/02/22-rdf-syntax-ns#type

Istnieją inne sposoby, aby to zrobić, takich jak korzystanie FILTER klauzule różnorodności:

  • Seria ?type = prefix:type1 połączone z warunkowego lub operatora ||
  • ?type IN (prefix:type1, prefix:type2)

Albo można użyć VALUES klauzuli określić opcje dla ?type

nich może być lepiej, jeśli zapytanie jest bardziej złożona i nie chcesz powielać wiele zapytania na obu stronach z UNION lub masz więcej niż dwie możliwości do rozważenia.

+0

"the? Type in" wydaje się interesujący, ale nie działa, na pewno popełniam błąd w składni, czy to prawda? SELECT * GDZIE { ? X rdf: type? Type ? Wpisz (wo: Kingdom, wo: Phumum) } – Noor

+2

Są to wyrażenia, które mogą być używane w klauzuli "FILTER", więc byłby to "FILTER (? type IN (wo: Kingdon, wo: Phylum)) ' – RobV

9

Znacznie szybciej niż funkcja FILTER IN jest użycie BINDINGS. Gorąco polecam używanie czegoś zgodnie z następującym zapytaniem, a nie FILTER(?type IN (wo:Kingdon, wo:Phylum).

SELECT * WHERE { ?x rdf:type ?type } BINDINGS ?type {(prefix:type1) (prefix:type2)} 

Korzystanie BINDINGS pozwala silnik SPARQL ograniczyć wyniki, ponieważ jest przetwarzane zamiast powrocie wszystkich wyników przed ich filtrowanie. Powoduje to, że wyniki są znacznie szybsze.

+4

To już nie jest WIERSZ; to WARTOŚCI. To podejście jest jednak przyjemniejsze od tego, które używa UNION, i przyjemniejsze niż użycie FILTER (? Type IN ...). –

2

Można to zrobić przy użyciu składni FILTR, tak:

PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> 
PREFIX prefix: <http://example.org/ns#> 

SELECT ?s ?p ?o ?type 
WHERE { 
    ?s a ?type . 
    ?s ?p ?o . 
    FILTER(?type IN (prefix:Type1, prefix:Type2)) 
} 

Należy pamiętać, że nie może zagwarantować skuteczności, bo nie wiem, czy filtrowanie będą miały zastosowanie po zostaną zwrócone wszystkie wyniki lub nie.