Доступ к буквальному значению объекта Triple
Я работаю над валидатором, который проверяет файлы черепах. Работая над функцией для проверки правильности указанного количества элементов для каждого объекта, я не могу понять, как получить доступ к значению литерала.
Буквальное значение 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:integer
а также xsd:nonNegativeInteger
не сравнивайте как равные
Тем не менее, мне кажется, что проще всего получить значение Card
но я действительно не понимаю, как это сделать. Любые решения или указатели, где можно найти пример этого, будут высоко оценены!
1 ответ
Если вы используете библиотеку rdf11
тогда наиболее распространенные IRI типа данных автоматически интерпретируются как значения Пролога. Другими словами: нет необходимости вообще преобразовывать литералы RDF в значения Prolog. Пример:
?- [library(semweb/rdf11)].
?- rdf_assert(rdf:a, rdf:b, 1^^xsd:int).
?- rdf(_S, _P, N^^xsd:int).
N = 1.
Вы можете расширить библиотеку rdf11
с ловушкой для менее распространенных типов IRI, например, я использую много географических данных (тип данных IRI geo:wktLiteral
) который я позволил rdf/[3,4]
интерпретировать как нотацию Пролог хорошо известного текста (WKT) автоматически.