2016-12-26 1 views
0

Je dois obtenir une requête SPARQL qui correspond à des guillemets doubles dans le graphique Virtuoso. J'utilise cette requête:Correspondance de guillemets doubles dans une requête SPARQL dans Virtuoso

SELECT distinct ?o 
FROM <http://graph> 
WHERE 
{ 
    ?s ?p ?o. 
} 

Il me renvoie une colonne avec de telles valeurs:

http://some.prefix/Symbol 
"abcd" 

je dois correspondre seulement deuxième valeur ("abcd"). J'ai essayé d'ajouter ce filtre à WHERE clause:

FILTER regex(str(?o), "\"") 

Mais il renvoie aucun résultat. J'ai également essayé '"' comme un deuxième paramètre à regex, et quelques autres choses. Est-ce possible?

Répondre

2

"abcd" est un littéral de quatre caractères. Il n'inclut pas le ""; ce sont les délimiteurs de chaîne et ne font pas partie de la chaîne.

FILTER isLiteral(?o) 

devrait fonctionner.

+0

Merci, c'est exactement ce dont j'ai besoin! – Kviat

0

Puisque votre filtre ne fonctionne pas, "abcd" n'a pas de guillemet double. C'est un littéral de chaîne. Je ne sais pas de quel type il s'agit; donc vous pouvez utiliser -

select ?type where { "abcd" a ?type } 

- pour obtenir son type. Vous pouvez ensuite utiliser ce type comme un filtre dans votre requête comme:

SELECT distinct ?o 
FROM <http://graph> 
WHERE 
{ 
    ?s ?p ?o . 
    ?o a <whatever type you received in the previous query> . 
} 
+0

Il y a une différence quand la classe rdfs: Class est enregistrée avec 'rdf: type' (ou le mot-clé' a') et le type de données d'un littéral. "? o a ..." ne renvoie pas le type de données. Essayez DATATYPE (? O) mais ce n'est pas nécessaire car les tests 'isLiteral' pour les littéraux de tout type de données. – AndyS

+0

D'accord. isLiteral() est une meilleure façon de faire cela. –