2017-12-05 8 views
1
sparql> PREFIX ab: <http://learningsparql.com/ns/addressbook#> 
Executing update... 
Update executed in 160 ms 
sparql> SELECT ?craigEmail WHERE { ?person ab:firstName "Craig" } 
Malformed query: org.eclipse.rdf4j.query.parser.sparql.ast.VisitorException: 
QName 'ab:firstName' uses an undefined prefix 

sparql> SELECT ?craigEmail WHERE { ?person 
<http://learningsparql.com/ns/addressbook/firstName> "Craig" } 
Evaluating SPARQL query... 
+-----------------------------------------------------------------------------+ 
| craigEmail                 | 
+-----------------------------------------------------------------------------+ 
+-----------------------------------------------------------------------------+ 
0 result(s) (64 ms) 

답변

1

접두사를 쿼리와 동일한 줄에 넣어보십시오 (모든 내용이 한 줄로 표시됩니다).

1

기본적으로 RDF4J 콘솔은 단 한 줄의 SPARQL 쿼리 만 사용하므로 James는 대답에서 제안한 것처럼 쿼리를 한 줄로 입력하십시오.

다른 방법으로는 여러 모드로 들어갑니다 sparql 명령을 사용할 수 있습니다

memory> sparql 
enter multi-line SPARQL query (terminate with line containing single '.') 
PREFIX ab: <http://learningsparql.com/ns/addressbook#> 
SELECT ?craigEmail WHERE { ?person ab:firstName "Craig" } 
. 
Evaluating SPARQL query... 
+-----------------------------------------------------------------------------+ 
| craigEmail                 | 
+-----------------------------------------------------------------------------+ 
+-----------------------------------------------------------------------------+ 
0 result(s) (93 ms) 
memory> 

특히 유용합니다 당신이 복사 붙여 넣기 큰 쿼리를있을 때. 여담으로

, 당신이 처음 "쿼리" '업데이트 실행'제안 이후

sparql> PREFIX ab: <http://learningsparql.com/ns/addressbook#> 
Executing update... 
Update executed in 160 ms 

출력은 오해의 소지가, 당신은 단지 새로운 네임 스페이스 접두사를 추가했습니다. 하지만 그런 일은 일어나지 않습니다. 대신, 콘솔은 이것을 "본문"이없는 SPARQL 업데이트로 해석하고 빈 업데이트로 실행합니다. 접두사는 무시됩니다. SPARQL 구문 분석기의 오류라고 할 수 있습니다. 본문이없는 접두사 선언은 엄밀히 말하자면 합법적 인 쿼리가 아닙니다.

콘솔을 통해 RDF4J 저장소에 새 네임 스페이스 접두어를 추가하는 공식적인 방법은 없지만 사용할 수있는 트릭이 있습니다 (저장소 나 SPARQL에서 실행하는 경우에만 작동하지만 엔드 포인트는 당신이 쓰기 액세스)가하기 :

PREFIX ab: <http://learningsparql.com/ns/addressbook#> INSERT DATA {} 

이 새로운 트리플을 삽입 할 SPARQL 업데이트를 실행하지만, 빈 블록 (그래서 실제 트리플가 삽입되지 않음).

memory> show n 
--no namespaces found-- 
memory> PREFIX ab: <http://learningsparql.com/ns/addressbook#> INSERT DATA {} 
Executing update... 
Update executed in 3 ms 
memory> show n 
+---------- 
|ab http://learningsparql.com/ns/addressbook# 
|rdf http://www.w3.org/1999/02/22-rdf-syntax-ns# 
|owl http://www.w3.org/2002/07/owl# 
|xsd http://www.w3.org/2001/XMLSchema# 
|fn http://www.w3.org/2005/xpath-functions# 
|rdfs http://www.w3.org/2000/01/rdf-schema# 
|sesame http://www.openrdf.org/schema/sesame# 
+---------- 
memory> SELECT ?craigEmail WHERE { ?person ab:firstName "Craig" } 
Evaluating SPARQL query... 
+-----------------------------------------------------------------------------+ 
| craigEmail                 | 
+-----------------------------------------------------------------------------+ 
+-----------------------------------------------------------------------------+ 
0 result(s) (47 ms) 
memory> 
: 당신이 더 이상 콘솔에 입력 한 모든 쿼리를 선언 할 필요가 없습니다 그 후에 그러나이 , 저장소에 네임 스페이스 접두사를 추가합니다