SPARQLthon/SPARQL11test
提供:TogoWiki
ページのサイズが大きくなったので、2018年4月27日時点でダウンロード可能なものについての最新調査結果をこちらに置きました。 以前のページはBH12.12/SPARQL11testです。
Learning SPARQL 2nd Ed. のサンプルSPARQLクエリを全て処理させてパーズ可能であるかをテストする。 様々な実装に対して行うことで、実装間の比較が行える。
- W3Cのテスト用リソース一式 (2013年8月時点でSPARQL1.1Recommendationに準拠か不明。)
クエリの問題への対処
まずはApache Jenaについて試してみたところ、幾つかのクエリについてはPREFIX指定が抜けているものがあるなど幾つかの問題が判明したので、これを修正した。
PREFIX欠落
- ex025.rq
- ex048.rq
- ex049.rq
- ex114.rq
- ex269.rq
- ex528.rq
その他の文法間違い
- ex067.rq
FILTER が抜けている。
NOT EXISTS { ?s ab:workTel ?workNum }
ではなくて、
FILTER NOT EXISTS { ?s ab:workTel ?workNum }
本文中で触れられず
下記の両者ともクエリ未完成
- ex080.rq
- ex541.rq
全トリプル取得
末尾にLIMIT 10を挿入
- ex052.rq
- ex090.rq
- ex114.rq
- ex225.rq
- ex242.rq
- ex244.rq
- ex246.rq
- ex251.rq
- ex255.rq
- ex311.rq
- ex332.rq
- ex408.rq
- ex436.rq
- ex437.rq
テスト
テストした実装を以下に列挙していくこととする。
AllegroGraph 7.0.0
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://localhost:21400/repositories/dbcls --query=${f} --debug >& ../LearningSPARQL2ndEx_AllegroGraph_6.4.5/${o}.txt ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 172 - 21 @prefix err: <http://www.w3.org/2005/xqt-errors#> . 12 @prefix ab: <http://learningsparql.com/ns/addressbook#> . 9 HTTP Exeception 3 Ask => No 1 @prefix nn: <http://learningsparql.com/new/namespace/> . 1 @prefix im: <http://learningsparql.com/ns/importedData#> . 1 ==== No variables ====
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /' ex167.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:382) ex172.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:382) ex178.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:382) ex196.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:382) ex308.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:382) ex474.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:382) ex475.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:382) ex476.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:382) ex539.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:382)
- またWHERE外のVALUESの扱いがバグになった。
- SERVICE句でDBpediaに問い合わせすると得られるデータに以下のものが含まれていて、"1937-3-4"がxsd:date形式に違反しているので、エラーになる。
http://dbpedia.org/ontology/deathDate "1937-3-4"^^<http://www.w3.org/2001/XMLSchema#date>
- そのほか、ex308.rqはARQ独自関数利用のため。
AllegroGraph 6.4.5 - 6.6.0
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://localhost:21400/repositories/dbcls --query=${f} --debug >& ../LearningSPARQL2ndEx_AllegroGraph_6.4.5/${o}.txt ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 173 - 21 @prefix err: <http://www.w3.org/2005/xqt-errors#> . 11 @prefix ab: <http://learningsparql.com/ns/addressbook#> . 10 HTTP Exeception 3 Ask => No 1 @prefix nn: <http://learningsparql.com/new/namespace/> . 1 @prefix im: <http://learningsparql.com/ns/importedData#> .
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /' ex126.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex172.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex178.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex180.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex196.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex308.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex474.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex475.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex476.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex539.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371)
- ついにWHERE外のVALUESを適切に扱えるようになった。
- <file_name.ttl>というグラフ名は受け付けられなくなった。
- ex308.rqはARQ独自関数利用のため。
- その他、全てSERVICEクエリ周りで、DBpediaの返すリテラル値がxsd:date型としているにもかかわらず、例えば"1937-3-4"となっていることでエラー(400 Bad Request、'Parsing JSON failed due to unhandled error: `1937-3-4` is not of type date')になっている。この例の場合では、"1937-03-04"としなければならない(参考)。
AllegroGraph 6.4.0
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://localhost:21400/repositories/dbcls --query=${f} --debug >& ../LearningSPARQL2ndEx_AllegroGraph_6.4.0/${o}.txt ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 173 - 35 @prefix : <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 8 HTTP Exeception 3 Ask => No 1 ==== No variables ====
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /' ex172.txt- at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:446) ex178.txt- at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:446) ex196.txt- at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:446) ex308.txt- at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:446) ex474.txt- at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:446) ex475.txt- at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:446) ex476.txt- at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:446) ex539.txt- at com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:446)
- 遂にtimezone、tz関数に対応した模様。
- ex308.rqはARQ独自関数利用のため。
- ex492.rqはVALUESをWHEREの外に書いている例でこれに未対応の模様。
- 以上のクエリを除いて全てSERVICEクエリ周りで、DBpediaの返すリテラル値がxsd:date型としているにもかかわらず、例えば"1937-3-4"となっていることでエラー(400 Bad Request、'Parsing JSON failed due to unhandled error: `1937-3-4` is not of type date')になっている。この例の場合では、"1937-03-04"としなければならない(参考)。
Apache Jena 3.7.0
sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/qparse --print=op --explain --file ${f} > ../LearningSPARQL2ndEx_Jena-3.0.1/${o}.txt ; done'
Loading function or property function with old style 'jena.hpl.hp.com' used - preferred style is to use 'jena.apache.org': http://jena.hpl.hp.com/ARQ/property#versionARQ => http://jena.apache.org/ARQ/property#versionARQ
Apache Jena Fuseki 3.14.0
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://ep:21800/dbcls/query --query=${f} --debug >& ../LearningSPARQL2ndEx_Jena-Fuseki_3.14.0/${o}.txt ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 179 - 34 @prefix : <http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#> . 3 Ask => No 1 @prefix ab: <http://learningsparql.com/ns/addressbook#> . 1 17:22:49 WARN riot :: [line: 18, col: 17] Lexical form '1860-11-7' not valid for datatype XSD date
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /'
Apache Jena Fuseki 3.7.0
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://ep:21800/dbcls/query --query=${f} --debug >& ../LearningSPARQL2ndEx_Jena-Fuseki_3.7.0/${o}.txt ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 179 - 19 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 12 @prefix ab: <http://learningsparql.com/ns/addressbook#> . 3 Ask => No 2 @prefix d: <http://learningsparql.com/ns/data#> . 1 @prefix nn: <http://learningsparql.com/new/namespace/> . 1 @prefix im: <http://learningsparql.com/ns/importedData#> . 1 12:45:29 WARN riot :: [line: 13, col: 17] Lexical form '1860-11-7' not valid for datatype XSD date
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /'
Apache Marmotta 3.3.0
$ foreach f ( ../LearningSPARQL2ndEx/ex*.rq ) set a=`basename $f .rq` ./bin/rsparql --service='http://localhost:8080/marmotta/sparql' --query ${f} --debug >& ../LearningSPARQL2ndEx_Marmotta_3.3.0/${a}.txt end
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 174 - 15 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 12 @prefix ab: <http://learningsparql.com/ns/addressbook#> . 4 HTTP Exeception 3 Ask => No 3 @prefix : <http://purl.org/dc/terms/> . 1 @prefix owl: <http://www.w3.org/2002/07/owl#> . 1 @prefix nn: <http://learningsparql.com/new/namespace/> . 1 @prefix im: <http://learningsparql.com/ns/importedData#> . 1 @prefix d: <http://learningsparql.com/ns/data#> . 1 ==== No variables ==== 1 23:02:34 WARN riot :: Lexical form '1860-01-01+02:00' not valid for datatype http://www.w3.org/2001/XMLSchema#gYear 1 23:01:32 WARN riot :: {W107} Bad URI: <2014-12-18T22:55:21.000+09:00> Code: 10/SCHEME_MUST_START_WITH_LETTER in SCHEME: The scheme component must start with a letter. 1 23:01:07 WARN riot :: Lexical form '1860-01-01+02:00' not valid for datatype http://www.w3.org/2001/XMLSchema#gYear 1 23:00:57 WARN riot :: Lexical form '1860-01-01+02:00' not valid for datatype http://www.w3.org/2001/XMLSchema#gYear
$ grep 'HTTP Exeception' *.txt | sed -e 's/^/ /' ex118.txt:HTTP Exeception ex257.txt:HTTP Exeception ex262.txt:HTTP Exeception ex308.txt:HTTP Exeception
- ex118 はOFFSETだけでなく、LIMITも加えると問題が解消。
- ex257 はxsd:decimalに非対応。
- ex262 はxsd:dateTimeに非対応。
- ex308 はARQ独自関数のため。
Blazegraph Release 2.1.0 - 2.1.6rc
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://localhost:21300/bigdata/sparql --query=${f} --debug >& ../LearningSPARQL2ndEx_Blazegraph_2.1.0/${o}.txt ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 178 - 22 @prefix bds: <http://www.bigdata.com/rdf/search#> . 7 @prefix bd: <http://www.bigdata.com/rdf#> . 7 @prefix ab: <http://learningsparql.com/ns/addressbook#> . 3 Ask => No 1 HTTP Exeception 1 @prefix nn: <http://learningsparql.com/new/namespace/> . 1 16:21:57 ERROR riot :: [line: 36, col: 46] Triples not terminated by DOT
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /' ex308.txt- at com.hp.hpl.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:414)
- ex308.rq はarq独自関数を含むため。
- Federated Queryについては、StardogおよびVirtuosoとの相性が悪い。Apache Fuseki、AllegroGraph、GraphDBはOK。
CumulusRDF 1.0.1
$ foreach f ( ../LearningSPARQL2ndEx/ex*.rq ) set a=`basename $f .rq` ./bin/rsparql --service='http://localhost:9090/cumulus/sparql' --query ${f} --debug >& ../LearningSPARQL2ndEx_CumulusRDF_1.0.1/${a}.txt end
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 172 - 32 @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 7 HTTP Exeception 3 Ask => No 3 @prefix : <http://dbpedia.org/ontology/> . 1 @prefix v: <http://www.w3.org/2006/vcard/ns#> . 1 @prefix dc: <http://purl.org/dc/elements/1.1/> . 1 ==== No variables ====
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /' ex007.txt-ERROR /cumulus/sparql 400: Not a valid (absolute) URI: ex002.ttl ex123.txt-ERROR /cumulus/sparql 400: Not a valid (absolute) URI: ex069.ttl ex126.txt-ERROR /cumulus/sparql 400: Not a valid (absolute) URI: ex125.ttl ex128.txt-ERROR /cumulus/sparql 400: Not a valid (absolute) URI: ex125.ttl ex130.txt-ERROR /cumulus/sparql 400: Not a valid (absolute) URI: ex069.ttl ex135.txt-ERROR /cumulus/sparql 400: Not a valid (absolute) URI: ex134.ttl ex180.txt-ERROR /cumulus/sparql 400: Not a valid (absolute) URI: ex125.ttl
- "<ex002.ttl>"といったURIに未対応。
- 他の多くの実装と同様、VALUESがWHERE外にある場合には未対応。
D2RQ 0.8.2dev - 0.8.3dev
$ foreach f ( ../LearningSPARQL2ndEx/ex*.rq ) set a=`basename $f .rq` ./bin/rsparql --service 'http://xxx/sparql/' --query ${f} --debug >& ../LearningSPARQL2ndEx_D2RQ_0.8.2dev/${a}.txt end
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 168 - 34 @prefix db: <http://localhost:2020/resource/> . 14 HTTP Exeception 3 Ask => No 1 @prefix dc: <http://purl.org/dc/elements/1.1/> .
$ grep -A1 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | sed -e 's/-HttpException//' | sed -e 's/^/ /' ex007.txt: 400 This service does not allow the dataset to be specified in the query ex123.txt: 400 This service does not allow the dataset to be specified in the query ex126.txt: 400 This service does not allow the dataset to be specified in the query ex128.txt: 400 This service does not allow the dataset to be specified in the query ex130.txt: 400 This service does not allow the dataset to be specified in the query ex135.txt: 400 This service does not allow the dataset to be specified in the query ex166.txt: 400 This service does not allow the dataset to be specified in the query ex180.txt: 400 This service does not allow the dataset to be specified in the query ex182.txt: 400 This service does not allow the dataset to be specified in the query ex492.txt: 400 Parse error: PREFIX dm: <http://learningsparql.com/ns/demo#> SELECT * WHERE { } VALUES ( ?color ?direction ) { ( dm:red "north" ) ( dm:blue "west" ) } Lexical error at line 6, column 7. Encountered: " " (32), after : "VALUES" ex496.txt: 400 Parse error: PREFIX e: <http://learningsparql.com/ns/expenses#> SELECT ?description ?date ?amount WHERE { ?meal e:description ?description . ?meal e:date ?date . ?meal e:amount ?amount VALUES ?description { "lunch" "dinner" } } Lexical error at line 8, column 11. Encountered: " " (32), after : "VALUES" ex498.txt: 400 Parse error: PREFIX e: <http://learningsparql.com/ns/expenses#> SELECT ?description ?date ?amount WHERE { ?meal e:description ?description . ?meal e:date ?date . ?meal e:amount ?amount VALUES ( ?date ?description ) { ( "2011-10-15" "lunch" ) ( "2011-10-16" "dinner" ) } } Lexical error at line 8, column 11. Encountered: " " (32), after : "VALUES" ex500.txt: 400 Parse error: PREFIX e: <http://learningsparql.com/ns/expenses#> SELECT ?description ?date ?amount WHERE { ?meal e:description ?description . ?meal e:date ?date . ?meal e:amount ?amount VALUES ( ?date ?description ) { ( UNDEF "lunch" ) ( "2011-10-16" UNDEF ) } } Lexical error at line 8, column 11. Encountered: " " (32), after : "VALUES" ex540.txt: 400 This service does not allow the dataset to be specified in the query
FROMとVALUESに非対応。
Dydra (2015/09/15)
以前のテスト時に比べて格段に対応クエリが増加している。
$ foreach f ( ../LearningSPARQL2ndEx/ex*.rq ) set a=`basename $f .rq` ./bin/rsparql --service 'http://dydra.com/xxx/sparql/' --query ${f} --debug >& ../LearningSPARQL2ndEx_Dydra/${a}.txt end
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 173 - 30 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 10 HTTP Exeception 3 Ask => No 2 @prefix ns5: <http://www.w3.org/2002/07/owl#> . 1 @prefix ns6: <http://purl.org/dc/terms/> . 1 22:17:24 WARN riot :: {W109} The namespace URI: <http%3A%2F%2Fwww.w3.org%2F2002%2F07%2Fowl%23> is relative. Such ...
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /' ex167.txt- ex170.txt- ex172.txt- ex178.txt- ex196.txt- ex474.txt- ex475.txt- ex476.txt- ex539.txt-
- SERVICEクエリは、dydra内にあるデータセットに対してのみ可能としているらしい。
GraphDB 8.5.0 - 9.2.1
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://ep:21700/repositories/DBCLS --query=${f} --debug >& ../LearningSPARQL2ndEx_GraphDB_8.5.0/${o}.txt ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 167 - 15 HTTP Exeception 4 <http://www.w3.org/2002/07/owl#equivalentProperty> 3 Ask => No 1 ==== No variables ==== 1 <http://learningsparql.com/ns/data/book312>
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /' ex007.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex123.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex126.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex128.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex130.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex135.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex172.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex178.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex180.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex196.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex308.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex474.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:374) ex475.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex476.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:374) ex539.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:374)
- "<ex002.ttl>"といったURIに未対応。(ex007.rq - ex180.rq)
- DBpedia.orgのSPARQLエンドポイントへはクエリは適切になされているが、得られる結果のデータ型に問題があるためエラーになっている。
(datatype rdf:langString requires a language tag)
- ex308.rqはARQ独自関数利用のため。ただ、9.0.0からはエラーにならなくなった。9.2.1で、またエラーに。
MarkLogic 8.0-6
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; curl --anyauth --user user:pass -i -X POST --data-binary @${f} -H "Content-type: application/sparql-query" -H "Accept: application/sparql-results+json" http://localhost:8000/v1/graphs/sparql > ../LearningSPARQL2ndEx_MarkLogic_8.0-6/${o}.txt ; done'
$ grep '^{' *.txt | grep errorResponse | cut -c1-120 | sed -e 's/^/ /' ex128.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-COLLXCNNOTFOUND", "message":"X ex130.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-COLLXCNNOTFOUND", "message":"X ex135.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-COLLXCNNOTFOUND", "message":"X ex136.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-COLLXCNNOTFOUND", "message":"X ex167.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-UNEXPECTED", "message":"XDMP-U ex170.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-UNEXPECTED", "message":"XDMP-U ex172.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-UNEXPECTED", "message":"XDMP-U ex176.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex178.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-UNEXPECTED", "message":"XDMP-U ex180.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex182.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex184.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex185.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex188.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex190.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex192.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex194.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex196.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-UNEXPECTED", "message":"XDMP-U ex203.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex205.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex207.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex209.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex211.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex212.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex213.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex215.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex216.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex237.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex246.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex248.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex253.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex255.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex267.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex282.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex305.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex308.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-UNDFUN", "message":"XDMP-UNDFU ex314.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex326.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex332.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-COLLXCNNOTFOUND", "message":"X ex341.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-COLLXCNNOTFOUND", "message":"X ex427.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex428.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex437.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-COLLXCNNOTFOUND", "message":"X ex474.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-UNEXPECTED", "message":"XDMP-U ex475.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-UNEXPECTED", "message":"XDMP-U ex476.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-UNEXPECTED", "message":"XDMP-U ex479.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex480.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex491.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex523.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess ex538.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-COLLXCNNOTFOUND", "message":"X ex539.txt:{"errorResponse":{"statusCode":400, "status":"Bad Request", "messageCode":"XDMP-UNEXPECTED", "message":"XDMP-U ex540.txt:{"errorResponse":{"statusCode":406, "status":"Unacceptable Type", "messageCode":"REST-UNACCEPTABLETYPE", "mess
- 現時点ではあまり対応されていない模様。
Neptune 1.0.1.0
$ for f in ./LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./apache-jena-3.7.0/bin/rsparql --service=http://***.neptune.amazonaws.com:8182/sparql --query=${f} --debug >& ./LearningSPARQL2ndEx_Neptune_1.0.1.0/${o}.txt ; done
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 172 - 19 @prefix owl: <http://www.w3.org/2002/07/owl#> . 12 @prefix ab: <http://learningsparql.com/ns/addressbook#> . 10 HTTP Exeception 3 Ask => No 1 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 1 @prefix nn: <http://learningsparql.com/new/namespace/> . 1 @prefix im: <http://learningsparql.com/ns/importedData#> . 1 @prefix d: <http://learningsparql.com/ns/data#> .
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /' ex167.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex170.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex172.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex178.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex196.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex308.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex474.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex475.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex476.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex539.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371)
- Federatedクエリの利用は不可のため、SERVICEを含むクエリ(ex308以外)が失敗している。
- ex308.rqについてはARQ独自関数が実行できないため。
RDF-Endpoint-0.07
$ foreach f ( ../LearningSPARQL2ndEx/ex*.rq ) set a=`basename $f .rq` ./bin/rsparql --service='http://localhost:5000/sparql' --query ${f} --debug >& ../LearningSPARQL2ndEx_RDF-Endpoint-0.07/${a}.txt end
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 176 - 35 @prefix arq: <http://jena.hpl.hp.com/ARQ/function#> . 3 com.hp.hpl.jena.sparql.resultset.ResultSetException: Not a boolean result 3 HTTP Exeception
$ grep 'Exception' *.txt | grep -v 'Caused by' | sed -e 's/^/ /' ex199.txt:com.hp.hpl.jena.sparql.resultset.ResultSetException: Not a boolean result ex201.txt:com.hp.hpl.jena.sparql.resultset.ResultSetException: Not a boolean result ex202.txt:com.hp.hpl.jena.sparql.resultset.ResultSetException: Not a boolean result ex492.txt:HttpException: 400 Bad Request ex498.txt:HttpException: 400 Bad Request ex500.txt:HttpException: 400 Bad Request
- SERVICEキーワードについては問題が解消された。
- ASKキーワードには非対応 (ex199.rq, ex201.rq, ex202.rq)。
- ex492.rq について、VALUESのSELECT句外での使用に非対応の可能性。
- ex498.rq, ex500.rq について、VALUESキーワードの処理に問題がある模様。
RDF4J 3.2.1
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://localhost:21100/rdf4j-server/repositories/SYSTEM --query=${f} --debug >& ../LearningSPARQL2ndEx_RDF4J_2.2.4/${o}.txt ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 166 - 7 HTTP Exeception 4 <http://www.University0.edu> 3 org.apache.jena.atlas.json.JsonParseException: Not a JSON object START: [null] 3 org.apache.jena.atlas.json.JsonParseException: Broken token: u 3 Ask => No 1 ==== No variables ==== 1 <http://learningsparql.com/ns/data/book312> 1 16:29:45 ERROR riot :: [line: 54, col: 63] Broken IRI (End of file)
$ grep 'Exception' *.txt | grep -vP 'txt:\s' ex007.txt:HttpException: 400 ex123.txt:HttpException: 400 ex126.txt:HttpException: 400 ex128.txt:HttpException: 400 ex130.txt:HttpException: 400 ex135.txt:HttpException: 400 ex167.txt:org.apache.jena.atlas.json.JsonParseException: Broken token: u ex172.txt:org.apache.jena.atlas.json.JsonParseException: Not a JSON object START: [null] ex180.txt:HttpException: 400 ex308.txt:org.apache.jena.atlas.json.JsonParseException: Not a JSON object START: [null] ex474.txt:org.apache.jena.atlas.json.JsonParseException: Broken token: u ex475.txt:org.apache.jena.atlas.json.JsonParseException: Not a JSON object START: [null] ex476.txt:org.apache.jena.riot.RiotException: [line: 54, col: 63] Broken IRI (End of file) ex539.txt:org.apache.jena.atlas.json.JsonParseException: Broken token: u
- "<ex002.ttl>"といったURIに未対応。(ex007.rq - ex180.rq)
- ex308.rqはARQ独自関数利用のため。
- ex492.rqについては、期待される結果とは異なっている。("==== No variables ====")
- また、DBpediaの返すリテラル値にrdf:langString型があるが、言語タグが付いていないことでエラー(500 Internal Server Error)になっている(参考)。ただ、このエラーに対するHTTPステータスが500なのはどうなのか。
RDF4J 2.2.4 - 2.4.1
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://localhost:21100/rdf4j-server/repositories/SYSTEM --query=${f} --debug >& ../LearningSPARQL2ndEx_RDF4J_2.2.4/${o}.txt ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 167 - 15 HTTP Exeception 15 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 11 @prefix ab: <http://learningsparql.com/ns/addressbook#> . 4 @prefix : <http://www.openrdf.org/config/repository#> . 3 Ask => No 1 @prefix owl: <http://www.w3.org/2002/07/owl#> . 1 @prefix nn: <http://learningsparql.com/new/namespace/> . 1 @prefix im: <http://learningsparql.com/ns/importedData#> . 1 @prefix d: <http://learningsparql.com/ns/data#> . 1 ==== No variables ====
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /' | cut -c1-100 ex007.txt-MALFORMED QUERY: Not a valid (absolute) IRI: ex002.ttl ex123.txt-MALFORMED QUERY: Not a valid (absolute) IRI: ex069.ttl ex126.txt-MALFORMED QUERY: Not a valid (absolute) IRI: ex125.ttl ex128.txt-MALFORMED QUERY: Not a valid (absolute) IRI: ex125.ttl ex130.txt-MALFORMED QUERY: Not a valid (absolute) IRI: ex069.ttl ex135.txt-MALFORMED QUERY: Not a valid (absolute) IRI: ex134.ttl ex172.txt-<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.46 - Error report</title><style type= ex178.txt-<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.46 - Error report</title><style type= ex180.txt-MALFORMED QUERY: Not a valid (absolute) IRI: ex125.ttl ex196.txt-<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.46 - Error report</title><style type= ex308.txt-<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.46 - Error report</title><style type= ex474.txt-<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.46 - Error report</title><style type= ex475.txt-<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.46 - Error report</title><style type= ex476.txt-<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.46 - Error report</title><style type= ex539.txt-<!DOCTYPE html><html><head><title>Apache Tomcat/8.0.46 - Error report</title><style type=
- "<ex002.ttl>"といったURIに未対応。(ex007.rq - ex180.rq)
- ex308.rqはARQ独自関数利用のため。
- ex492.rqについては、期待される結果とは異なっている。("==== No variables ====")
- また、DBpediaの返すリテラル値にrdf:langString型があるが、言語タグが付いていないことでエラー(500 Internal Server Error)になっている(参考)。ただ、このエラーに対するHTTPステータスが500なのはどうなのか。
rdfstore-js 0.8.1
$ foreach f ( ../LearningSPARQL2ndEx/ex*.rq ) set a=`basename $f .rq` ./bin/rsparql --service 'http://xxx/sparql' --query ${f} --debug >& ../LearningSPARQL2ndEx_rdfstore-js0.8.1/${a}.txt end
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 119 ==== No variables ==== 56 com.hp.hpl.jena.query.QueryException: Endpoint returned Content-Type: application/rdf+xml which is not currently supported for SELECT queries 16 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 4 HTTP Exeception 2 com.hp.hpl.jena.query.QueryException: Endpoint returned Content-Type: application/rdf+xml which is not currently supported for ASK queries 2 12:00:33 ERROR riot :: Content is not allowed in prolog. 2 12:00:31 ERROR riot :: Content is not allowed in prolog. 1 Ask => No 1 12:01:45 ERROR riot :: Content is not allowed in prolog. 1 12:01:32 ERROR riot :: Content is not allowed in prolog. 1 12:01:28 ERROR riot :: Content is not allowed in prolog. 1 12:01:00 ERROR riot :: Content is not allowed in prolog. 1 12:00:55 ERROR riot :: Content is not allowed in prolog. 1 12:00:50 ERROR riot :: Content is not allowed in prolog. 1 12:00:47 ERROR riot :: Content is not allowed in prolog. 1 12:00:46 ERROR riot :: Content is not allowed in prolog. 1 12:00:45 ERROR riot :: Content is not allowed in prolog. 1 12:00:44 ERROR riot :: Content is not allowed in prolog. 1 12:00:42 ERROR riot :: Content is not allowed in prolog. 1 12:00:34 ERROR riot :: Content is not allowed in prolog. 1 12:00:32 ERROR riot :: Content is not allowed in prolog. 1 12:00:30 ERROR riot :: Content is not allowed in prolog. 1 12:00:29 ERROR riot :: Content is not allowed in prolog. 1 12:00:26 ERROR riot :: Content is not allowed in prolog. 1 12:00:23 ERROR riot :: Content is not allowed in prolog. 1 12:00:20 ERROR riot :: Content is not allowed in prolog.
SPIN API 1.3.1-1.3.2
TopBraidにより提供されているSPIN APIに対し、他の実装で試した全てのクエリを処理させ、適切にRDFへの変換、及び逆変換がなされるかを試した。 結果は全て問題なく処理された。
このテストを行うために、上記URLより取得出来るライブラリ(spin-1.3.1-distribution.zip, spin-1.3.2-distribution.zip)とapache-jena-2.11.0.zipを利用している。 前者のパッケージに含まれているサンプルプログラムSPINParsingExample.javaを参考にし、標準入力からクエリを受け付け、SELECTだけでなく、ASK、CONSTRUCT、DESCRIBEも処理可能な仕様にした。 なお、サンプルプログラムのままではSELECTクエリのみが対応可能なので、com.hp.hpl.jena.query.Queryクラスのメソッド、isAskTypeなどを利用してクエリの型を判定する形にした。
Stardog 5.2.3 - 5.3.6
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://ep:21200/myDB/query --query=${f} --debug >& ../LearningSPARQL2ndEx_Stardog_5.2.3/${o}.txt ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 176 - 12 @prefix ab: <http://learningsparql.com/ns/addressbook#> . 4 <http://www.Department0.University0.edu> 3 HTTP Exeception 3 Ask => No 3 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 2 @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 2 @prefix dm: <http://learningsparql.com/ns/demo#> . 2 @prefix dcterms: <http://purl.org/dc/terms/> . 2 @prefix d: <http://learningsparql.com/ns/data#> . 1 @prefix spin: <http://spinrdf.org/spin#> . 1 @prefix skos: <http://www.w3.org/2004/02/skos/core#> . 1 @prefix owl: <http://www.w3.org/2002/07/owl#> . 1 @prefix nn: <http://learningsparql.com/new/namespace/> . 1 @prefix im: <http://learningsparql.com/ns/importedData#> . 1 @prefix dc: <http://purl.org/dc/elements/1.1/> . 1 ==== No variables ====
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /' ex474.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex476.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371) ex539.txt- at org.apache.jena.sparql.engine.http.HttpQuery.rewrap(HttpQuery.java:371)
- 一部DBpediaに対するService句が失敗。おそらくDBpedia(つまりVirtuoso?)が返すヘッダー情報の問題と思われるが、はて。
- ex492.rqについては、期待される結果とは異なっている。("==== No variables ====")
Stardog 6.1.1 - 7.3.0
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://ep:21200/myDB/query --query=${f} --debug >& ../LearningSPARQL2ndEx_Stardog_6.1.1/${o}.txt ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 178 - 12 @prefix ab: <http://learningsparql.com/ns/addressbook#> . 3 Ask => No 3 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 3 <http://www.Department0.University0.edu/GraduateCourse0> 2 @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 2 @prefix dm: <http://learningsparql.com/ns/demo#> . 2 @prefix dcterms: <http://purl.org/dc/terms/> . 2 @prefix d: <http://learningsparql.com/ns/data#> . 1 @prefix spin: <http://spinrdf.org/spin#> . 1 @prefix skos: <http://www.w3.org/2004/02/skos/core#> . 1 @prefix owl: <http://www.w3.org/2002/07/owl#> . 1 @prefix nn: <http://learningsparql.com/new/namespace/> . 1 @prefix im: <http://learningsparql.com/ns/importedData#> . 1 @prefix dc: <http://purl.org/dc/elements/1.1/> . 1 ==== No variables ==== 1 10:40:27 WARN riot :: [line: 6, col: 44] Lexical form '1937-3-4' not valid for datatype XSD date
$ grep -A2 'HTTP Exeception' *.txt | grep -v 'HTTP Exeception' | grep -v '^--' | grep -v 'HttpException' | sed -e 's/^/ /'
- すべてのクエリで異常終了しなくなったが、ex492.rqについては、期待される結果とは異なっている。("==== No variables ====")
Virtuoso (VOS) 7.2.0 - 7.2.5 on Linux
$ sh -c 'for f in ../LearningSPARQL2ndEx/ex*.rq ; do o=`basename $f .rq`; ./bin/rsparql --service=http://ep:21600/sparql --query=${f} --debug >& ../LearningSPARQL2ndEx_Virtuoso_7.2.4/${o}.txt ; done'
$ foreach f ( ../LearningSPARQL2ndEx/ex*.rq ) set a=`basename $f .rq` ./bin/rsparql --service 'xxx' --query ${f} --debug >& ../LearningSPARQL2ndEx_Virtuoso_7.2.0/${a}.txt end
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr 173 - 33 @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 6 HTTP Exeception 3 Ask => No 1 14:49:41 WARN riot :: Lexical form '1860-01-01+02:00' not valid for datatype http://www.w3.org/2001/XMLSchema#gYear 1 14:48:12 ERROR riot :: {E211} Base URI is null, but there are relative URIs to resolve.: <http%3A%2F%2Fwww.openlinksw.com%2Fschemas%2Fvirtrdf%23QuadMapFormat> 1 14:48:11 ERROR riot :: {E211} Base URI is null, but there are relative URIs to resolve.: <http%3A%2F%2Fwww.openlinksw.com%2Fschemas%2Fvirtrdf%23QuadMapFormat> 1 14:47:45 WARN riot :: Lexical form '1860-01-01+02:00' not valid for datatype http://www.w3.org/2001/XMLSchema#gYear 1 14:47:10 WARN riot :: Lexical form '1860-01-01+02:00' not valid for datatype http://www.w3.org/2001/XMLSchema#gYear
$ grep -A2 'HTTP Exeception' *.txt | grep 'HttpException' | sed -e 's/^/ /' ex118.txt-HttpException: 500 SPARQL Request Failed ex262.txt-HttpException: 500 SPARQL Request Failed ex308.txt-HttpException: 500 SPARQL Request Failed ex492.txt-HttpException: 500 SPARQL Request Failed ex510.txt-HttpException: 500 SPARQL Request Failed ex511.txt-HttpException: 500 SPARQL Request Failed
7.1.0からの大きな違いはURI関数が追加された点。その他以下の点については変化無し。
- ex118.rqについては、OFFSETだけではどうやらダメらしく、LIMITと同時使用なら問題無し。
- ex262、ex510、ex511は関数の引数について型が合っていないとエラーになる。
- ex308.rqはARQの独自関数利用のため。
- ex492.rqについては恐らく、VALUESがWHERE外にある場合に未対応のため。
Oxigraph v0.3.6
$ bash -c 'for f in ./ex*.rq ; do o=`basename $f .rq`; echo ${o}; ../../apache-jena-4.6.0/bin/rsparql --service=http://localhost:7878/query --query=${f} --debug >& ${o}.result ; done'
$ head -1 *.txt | grep -v '^==>' | sed -ne '/^./p' | sed -e 's/^--*/-/' | sort | uniq -c | sort -nr
173 - 4 org.apache.jena.sparql.resultset.ResultSetException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 51 path $.results.bindings[0] 2 HTTP Exception 3 Ask => No 2 org.apache.jena.sparql.resultset.ResultSetException: Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 97 path $.results.bindings[0] 1 <http://learningsparql.com/ns/data/book312> 1 10:21:37 ERROR riot :: [line: 1, col: 1 ] Out of place: [KEYWORD:The] 1 10:17:07 ERROR riot :: [line: 1, col: 1 ] Out of place: [KEYWORD:Error] 1 10:16:40 ERROR riot :: [line: 1, col: 1 ] Out of place: [KEYWORD:Error]
$ grep -l 'malformed JSON' *.result ex167.result ex170.result ex172.result ex474.result ex475.result ex539.result
$ grep -l 'ERROR riot' *.result ex178.result ex196.result ex476.result
- 以上の9クエリは全てSERVICE句が原因。
$ grep -l 'HTTP Exception' *.result ex080.result ex308.result
- ex080.rq はプロパティパスの回数制限
- ex308.rq はARQ独自関数