2016-12-26 9 views
0

Virtuoso 그래프에서 큰 따옴표와 일치하는 SPARQL 쿼리를 가져와야합니다.Virtuoso에서 SPARQL 쿼리의 큰 따옴표를 일치하십시오.

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

그것은 나에게 같은 값으로 열을 반환합니다 : 만 두 번째 값 ("abcd")와 일치 할 필요가

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

나는 그런 쿼리를 사용합니다. 나는 WHERE 절에 같은 필터를 추가하려고 :

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

하지만 결과를 반환합니다. 나는 또한 정규식에 두 번째 매개 변수로 '"'을 시도하고, 몇 가지 다른 것들. 전혀 가능합니까?

답변

2

"abcd" 네 개의 문자의 리터럴 : 당신은 다음과 같이 쿼리 필터로 그 유형을 사용할 수 있습니다. ""은 포함되지 않습니다. 이들은 문자열 구분 기호이며 문자열의 일부가 아닙니다.

FILTER isLiteral(?o) 

.

+0

고마워,이게 내가 필요한거야! – Kviat

0

필터가 작동하지 않으므로 "abcd"에는 큰 따옴표가 없습니다. 문자열 리터럴입니다. 어떤 유형인지 확실하지 않습니다. -

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

- 형식을 사용할 수 있습니다.

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

rdfs : Class가'rdf : type' (또는 키워드'a') 및 리터럴의 데이터 유형으로 기록 될 때 차이가 있습니다. "? o a ..."는 데이터 유형을 반환하지 않습니다. DATATYPE (? o)를 시도해보십시오. 그러나 isLiteral'이 모든 데이터 유형의 리터럴을 테스트하므로 반드시 필요한 것은 아닙니다. – AndyS

+0

동의. isLiteral()이 더 좋은 방법입니다. –