2017-12-05 2 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行になるようにしてください)。

1

RDF4Jコンソールは、デフォルトでは1行のSPARQLクエリしか使用しないため、Jamesが答えたとおり、クエリを1行で入力します。

代わりに、複数行モードに入ること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 

出力が紛らわしいですが、あなただけの新しい名前空間接頭辞を追加しました。しかし、それは起こっていることではありません。その代わりに、コンソールはこれを "body"がない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> 
関連する問題