2016-07-06 17 views
0

Ich versuche, eine SPARQL-Abfrage mit dem Virtuoso unterstützt bif:contains Relationen zu leichten String-Matching durchzuführen. Ich möchte überprüfen, ob das Etikett entweder Wort A oder B enthält, so dass ich bin mit einem union wie folgt:sparql virtuos bif: enthält in einer Union

SELECT DISTINCT ?s ?o WHERE { 
?s <http://www.w3.org/2000/01/rdf-schema#label> ?o . 
{?o bif:contains "Ramji"} 
union {?o bif:contains "Manjhi"}. 
} 

jedoch, die nicht kompiliert und wirft einen Fehler:

Virtuoso 37000 Error SP031: SPARQL compiler: The group does not contain 
triple pattern with '$o' object before bif:contains() predicate 

SPARQL query: 
define sql:big-data-const 0 
#output-format:text/html 
define sql:signal-void-variables 1 SELECT DISTINCT ?s ?o WHERE { 
?s <http://www.w3.org/2000/01/rdf-schema#label> ?o . 
{?o bif:contains "Ramji"} 
union {?o bif:contains "Manjhi"}. 
} 

Wenn nur Eine der Klauseln in der union wird verwendet, die Abfrage funktioniert. Irgendwelche Vorschläge bitte?

Antwort

1

Ihre Anfrage wird am falschen Punkt geteilt. Jeder Teil der UNION muss ein komplettes Muster sein. Siehe meine query und results -

SELECT DISTINCT ?s ?o 
    WHERE 
     { 
     { 
      ?s <http://www.w3.org/2000/01/rdf-schema#label> ?o  . 
      ?o bif:contains         "Ramji" 
     } 
     UNION 
     { 
      ?s <http://www.w3.org/2000/01/rdf-schema#label> ?o  . 
      ?o bif:contains         "Manjhi" 
     } 
     } 
    ORDER BY ?s 
+0

Dank dafür! – Ziqi

0

einfach können Sie auf diese Weise verwenden:

SELECT DISTINCT ?s ?o WHERE { 
?s <http://www.w3.org/2000/01/rdf-schema#label> ?o . 
?o bif:contains "'Ramji' or 'Manjhi'"}