2014-04-02 2 views
4

내 RDF 데이터의 객체에서 부분 문자열을 가져 오는 SPARQL 쿼리를 구현하려고합니다.결과를 얻을 수 없습니다.

다음 쿼리를 사용하면 ?Substring 열에 빈 결과가 표시됩니다. ?subject, ?predicate?object 열에 올바른 출력이 표시되지만 ?Substring 열은 출력을 생성하지 않습니다.

SELECT * WHERE 
{ 
    ?S ?P ?O . 
    BIND(SUBSTR(?O, 2, 3) AS ?Substring) 
} 

답변

3

?O의 값은 실제로 문자열 리터럴입니까? 그렇지 않다면 SUBSTR()은 리터럴에 대해서만 작동하기 때문에 defined이므로 아무것도하지 않습니다. 값이 URI/빈 노드 인 경우, 항상 쿼리를 그대로 작성한 빈 열을 얻습니다. 식 평가에서 생성 된 열이 비어있는 경우 SPARQL에서 일반적으로

SELECT * WHERE 
{ 
    ?S ?P ?O . 
    BIND(SUBSTR(STR(?O), 2, 3) AS ?Substring) 
} 

:

당신은 당신이 이렇게 같은 비어 있지 않은 결과를 받기 시작 될 수 있습니다 문자열로 변환 할 STR() 기능을 사용할 수 있습니다 주어진 행은 표현식이 해당 행에 대한 오류로 평가되었음을 의미합니다. 여전히 빈 결과를 얻고 있다면, 무엇이 잘못되었는지를 알아보기 위해 표현을 좀 더 자세히 살펴야합니다.

귀하의 경우에 또 다른 가능성은 지정된 문자 범위가 유효하지 않다는 것입니다. SPARQL SUBSTR() 함수는 시작 색인과 길이를 사용하므로 여기에서 색인 2에서 시작하여 3자를 묻습니다.

BIND(SUBSTR(STR(?O), 2, 1) 

즉, 1 문자 인덱스 2

에서 시작 : 최종 인수가 종료 인덱스이고, 자바와 같은 언어 당신은 당신이 실제로 필요로하는 것은 다음과 같다 다음 인덱스 2와 3 사이의 문자열을 얻을하고자했다
관련 문제