2017-04-26 14 views
1

私はタートルファイルを検証するバリデーターに取り組んでいます。記述されている基数が各オブジェクトに対して正しいかどうかを調べる関数を操作するとき、リテラルの値にアクセスする方法を理解できません。トリプルのオブジェクトのリテラル値へのアクセス

リテラル値はCard=literal(type(xsd:nonNegativeInteger, '1'))(または1^^'http://www.w3.org/2001/XMLSchema#nonNegativeInteger')です。

長さLの袋が見つかりました。L == Cardをどうすれば確認できますか?

% L and Card are both 1 
rdf_canonical_literal(L, LiteralL), rdf_compare(=, LiteralL, Card). 
% false 

rdf_canonical_literal(L, LiteralL). 
% LiteralL = 1^^'http://www.w3.org/2001/XMLSchema#integer'. 

問題がxsd:integerxsd:nonNegativeIntegerが等しいとしていないということです。

は、私はすでに、次の試してみました。

しかし、私にとって最も簡単なことは、Cardという値を得ているようですが、どうやってそれを行うのか本当に分かりません。どのような解決策やポインタがあれば、この例を見つけることができます。

+0

最終的に解決しました。リロラルから値を取得するには、Prologの統一を有効に利用できます。 'parse_literal(Lit、N): - Lit = N ^^ _ Type.' まだまだ改善の余地があります。 – MacHeath

答えて

1

ライブラリrdf11を使用すると、最も一般的なデータ型IRIは自動的にProlog値として解釈されます。言い換えれば、RDFリテラルからProlog値への変換はまったく必要ありません。例:

?- [library(semweb/rdf11)]. 
?- rdf_assert(rdf:a, rdf:b, 1^^xsd:int). 
?- rdf(_S, _P, N^^xsd:int). 
N = 1. 

あなたが例えば、私はrdf/[3,4]はPrologのwell-knownテキスト(WKTとして解釈してみましょう地理的な大量のデータ(データ型IRI geo:wktLiteral)を使用し、あまり一般的ではないデータ型のIRIのためのフックでライブラリrdf11を拡張することができます)表記が自動的に行われます。