私は2つのグラフを比較しています.1つは単純なリテラルオブジェクトを含むTurtleファイルからのもので、明示的なデータ型IRIを持つファイルからのものです。他の点でグラフは等しい。dotnetrdfのシンプルリテラルと型付きリテラルを比較するには?
グラフA:
<s> <p> "o"
グラフB:
<s> <p> "o"^^xsd:string
RDF 1.1 (3.3 Literals)によれば、 "[S] impleリテラルは、データ型IRI http://www.w3.org/2001/XMLSchema#stringと抽象構文リテラルの糖衣構文です"。これは、具体的な構文仕様(N-Triples、Turtle、RDF XML)にも反映されています。
だから私は両方の私のグラフタイプXSDで oをURIノードの件名、URIノードP述語、およびリテラルノードを持つ単一のトリプルで構成することを期待したい:文字列オブジェクト。これに基づいて私は2つの間に違いがないと思うだろう。
しかし、これは実際にはそうではありません。
var graphStringA = "<http://example.com/subject> <http://example.com/predicate> \"object\".";
var graphStringB = "<http://example.com/subject> <http://example.com/predicate> \"object\"^^<http://www.w3.org/2001/XMLSchema#string>.";
var graphA = new Graph();
var graphB = new Graph();
StringParser.Parse(graphA, graphStringA);
StringParser.Parse(graphB, graphStringB);
var diff = graphA.Difference(graphB);
追加1との差分レポートのトリプル取り除か1があります。オブジェクトノードのデータ型が異なるため、グラフは異なります。graphA.Triples.First().Object.Datatype
は何も表示されず、graphB.Triples.First().Object.Datatype
は正しいURIです。
私がダウンしLiteralNodeへのすべての道を行く(リテラルのノードについて、その仮定を変更する)のいずれか
- にあるんだけど、この動作を変更するために私それに表示され、または
- 作成します新しいGraphDiff(これは、文字列リテラルのデフォルトのデータ型を考慮に入れます)。
この問題を回避するには、「デフォルト」のデータ型削除することです:
private static void RemoveDefaultDatatype(IGraph g)
{
var triplesWithDefaultDatatype =
from triple in g.Triples
where triple.Object is ILiteralNode
let literal = triple.Object as ILiteralNode
where literal.DataType != null
where literal.DataType.AbsoluteUri == "http://www.w3.org/2001/XMLSchema#string" || literal.DataType.AbsoluteUri == "http://www.w3.org/2001/XMLSchema#langString"
select triple;
var triplesWithNoDatatype =
from triple in triplesWithDefaultDatatype
let literal = triple.Object as ILiteralNode
select new Triple(
triple.Subject,
triple.Predicate,
g.CreateLiteralNode(
literal.Value,
literal.Language));
g.Assert(triplesWithNoDatatype.ToArray());
g.Retract(triplesWithDefaultDatatype);
}
をせずに、RDF 1.1との一貫性のある方法で、型付きリテラルにシンプルなリテラルを比較するdotnetrdfにおける方法はあります上記のような大きな書き直しや回避策に頼っていますか?
:https://github.com/dotnetrdf/dotnetrdf/blob /master/Libraries/dotNetRDF/Parsing/Handlers/StripStringHandler.cs –