次のSPARQLクエリは、2つの一般的なSDK(JenaとSesame / OpenRDF)のSPARQLエンジンで実行すると異なる結果を生成します。
PREFIX xsd:<http://www.w3.org/2001/XMLSchema#>
SELECT ?v1 ?v2 ?v3 ?v4 ?v5 ?v6
WHERE
{
BIND ( 1 / 3 as ?v1)
BIND ( xsd:float(1 / 3) as ?v2)
BIND ( xsd:float(1) / 3 as ?v3)
BIND ( ( 1.0 / 3) as ?v4)
BIND ( xsd:float(1.0 / 3) as ?v5)
BIND ( xsd:float(1.0) / 3 as ?v6)
}
最新バージョンのイエナの結果は私には理にかなっています(読みやすくするためにフォーマットされています):
v1: 0.333333333333333333333333
v2: "0.333333333333333333333333"^^xsd:float
v3: "0.33333334"^^xsd:float
v4: 0.333333333333333333333333
v5: "0.333333333333333333333333"^^xsd:float
v6: "0.33333334"^^xsd:float
一方、Sesame / OpenRDFの最新バージョンは(読みやすいようにフォーマットされて)返されます。
v1: "0"^^<http://www.w3.org/2001/XMLSchema#decimal>
v2: "0.0"^^<http://www.w3.org/2001/XMLSchema#float>
v3: "0.33333334"^^<http://www.w3.org/2001/XMLSchema#float>
v4: "0.3"^^<http://www.w3.org/2001/XMLSchema#decimal>
v5: "0.3"^^<http://www.w3.org/2001/XMLSchema#float>
v6: "0.33333334"^^<http://www.w3.org/2001/XMLSchema#float>
要点を強調すると、JenaはSesame / OpenRDFのように0、0.0、0.3を返すことはありません。なぜ数値結果にこのような違いがあるのか、誰か説明できますか?そして、同じSPARQLクエリで同じ結果を得るにはどうすればよいですか?または、どちらが正しいですか(数学的な正確さに関係なく、SPARQL標準を正しく実装するという意味で)?