2016-09-29 8 views
0

特定のSPARQLクエリが実際にINSERTまたはDELETEステートメントであるかどうかをテストする必要があります。INSERTおよびDELETEクエリのSPARQLパーサー

try: 
    sparql = parse(Query_String) 
except Exception as e: 
    raise ContentsUnacceptable(
     " The query attribute does not conform to the SPARQL query syntax !!") 

と:両方SELECT文と自分のコードの作業罰金の

try: 
    sparql = SPARQLWrapper("local/graph/file") 
    sparql.setQuery(Query_String) 
    results = sparql.query().convert() 
except Exception as e: 
    raise ContentsUnacceptable(
     " The query does not conform to the SPARQL query syntax !!") 

、しかし、すぐに私がしようとしてそのため、私は以下のように異なるパーサ(主に、fyzzSPARQLWrapper)を使用していますINSERTまたはDELETEステートメントでは、コード"The query does not conform to the SPARQL query syntax !!"に書かれている例外があります。これは、INSERTステートメントとDELETEステートメントがパーサーによって認識されないことを意味する可能性があります。私の研究によると、主にSPARQLクエリ用の2つのパーサーがあります。これらのステートメントをfyzzとSPARQLWrapperパーサーが認識できるようにする方法はありますか?

+1

読み取り専用DBpedia SPARQLエンドポイントで 'INSERT'または' DELETE'を実行しようとしていますか? *構文*エラーは発生しないはずですが、実際には例外が発生します。 – TallTed

+0

@TJCなぜ誰もが公開エンドポイントのデータを変更できると思いますか? – AKSW

+0

はい、私はそれも私が提供したリンクは公開されていると私はローカルディレクトリに変更を理解した。まだ動作しませんでした。 (私はそれらを実行しないクエリの構文をチェックする必要があります) – TJR

答えて

0

SPARQLWrapperは実際にはSPARQLパーサーとして意図されていません。それが行うことは、SPARQLエンドポイント・サービスのクライアントとして機能します。実際の問合せ文字列の解析は、エンドポイント自体によって行われます。

具体的な例では、ローカルファイルがSPARQLエンドポイントではないため、SPARQLWrapperをローカルファイルに指定します。これは動作しません。 のSPARQLエンドポイントを指している場合、そのエンドポイントはSPARQL更新を受け入れていません(リモートクライアントがそのデータを更新できないためです)。

あなたはSPARQLWrapperに固執したい場合は、(非常に不格好)ソリューションは、独自のSPARQLエンドポイントサービスを設定し、リモート更新を許可するように設定して、クエリ/更新を(検証するために、そのエンドポイントを使用することですRDF4J ServerとJena Fusekiを含む多くの無料のSPARQLエンドポイント実装がありますが、これは2つの一般的な実装です)。

しかし、これはちょっとした解決策です。文字列を構文解析して構文を検証するだけの目的なら、実際のSPARQLパーサをPythonで使用する必要があります。おそらくRDFLib's SPARQL Parserが良い選択でしょう。私は、Pythonの専門家だが、私はこれらの線に沿って何かを想像:

import rdflib.plugins.sparql.parser 

parser.parseQuery("SELECT ...") 

parser.parseUpdate("INSERT ...") 

はあなたを助けることができます。

関連する問題