n3 вывод применения str: содержит к xsd: строку в EulerSharp

У меня есть набор данных, который содержит большое количество ресурсов, которые мне нужно согласовать с различными существующими данными. Самый простой подход - сделать несколько простых сравнений строк между различными литералами.

К сожалению, литералы имеют тип xsd:string, а встроенная строка EulerSharp str: содержит не работает с типизированными литералами.

Я прочитал все, что я могу найти на встроенных инструментах eulersharp, и самое близкое, что я могу найти, это попытаться привести xsd:string к PlainLiteral, используя предикат rdf:PlainLiteral из RIF; однако это не поддерживается EulerSharp.

Как я могу манипулировать и сравнивать литералы типа xsd:string?

Или я должен прибегнуть к предварительной обработке данных, чтобы удалить типы данных?

Следующий файл.n3 демонстрирует проблему:

@prefix : <http://local#> .

@prefix str: <http://www.w3.org/2000/10/swap/string#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

:Bob :name "Bob Smith" .
:Rob :name "Rob Smith"^^xsd:string .

{ ?P :name ?N .
  ?N str:contains "Smith" } => { ?P :bingo ?N } .

И результат запуска вышеуказанного файла:

$ eye --swipl test.n3 --pass --nope
Id: euler.yap 5974 2013-02-12 00:29:00Z josd
SWI-Prolog 5.10.4 (amd64): Dec 27 2011, 08:54:16
starting 80 [msec cputime] 78 [msec walltime]
GET file:///home/ubuntu/src/test/test.n3 SC=4
networking 0 [msec cputime] 2 [msec walltime]
#Processed by Id: euler.yap 5974 2013-02-12 00:29:00Z josd
#eye --swipl test.n3 --pass --nope

@prefix : <http://local#>.
@prefix str: <http://www.w3.org/2000/10/swap/string#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix var: <http://localhost/var#>.
@prefix e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>.
@prefix r: <http://www.w3.org/2000/10/swap/reason#>.
@prefix n3: <http://www.w3.org/2004/06/rei#>.

:Bob :name "Bob Smith".
:Rob :name "Rob Smith"^^xsd:string.
:Bob :bingo "Bob Smith".

TC=4 TP=8 BC=0 BP=5 PM=0 CM=0 FM=0 AM=0
reasoning 0 [msec cputime] 4 [msec walltime]

#ENDS 0 [msec] TC=4 TP=8 BC=0 BP=5 PM=0 CM=0 FM=0 AM=0

1 ответ

Решение

Я спросил в списке EulerSharp и получил этот ответ:

Вы можете получить литерал из литерала с типом данных через log:dtlit.

Дополнительное правило заставило бы это работать.

Не то чтобы вместо? Dt вы могли бы также использовать xsd:string

@prefix : <http://local#> .

@prefix str: <http://www.w3.org/2000/10/swap/string#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix log: <http://www.w3.org/2000/10/swap/log#>.


:Bob :name "Bob Smith" .
:Rob :name "Rob Smith"^^xsd:string .

{ ?P :name ?N .
  ?N str:contains "Smith" } => { ?P :bingo ?N } .

{ ?P :name ?N .
  (?lit ?dt) log:dtlit ?N.
  ?lit str:contains "Smith" } => { ?P :bingo ?N } .

Запуск этого дает желаемый результат:

$ eye --swipl test.n3 --pass --nope
Id: euler.yap 5974 2013-02-12 00:29:00Z josd
SWI-Prolog 5.10.4 (amd64): Dec 27 2011, 08:54:16
starting 50 [msec cputime] 62 [msec walltime]
#Processed by Id: euler.yap 5974 2013-02-12 00:29:00Z josd
#eye --swipl test.n3 --pass --nope

GET file:///home/ubuntu/src/test/test.n3 SC=4
networking 10 [msec cputime] 2 [msec walltime]
@prefix : <http://local#>.
@prefix str: <http://www.w3.org/2000/10/swap/string#>.
@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
@prefix log: <http://www.w3.org/2000/10/swap/log#>.
@prefix var: <http://localhost/var#>.
@prefix e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#>.
@prefix r: <http://www.w3.org/2000/10/swap/reason#>.
@prefix n3: <http://www.w3.org/2004/06/rei#>.

:Bob :name "Bob Smith".
:Rob :name "Rob Smith"^^xsd:string.
:Bob :bingo "Bob Smith".
:Rob :bingo "Rob Smith"^^xsd:string.

#ENDS 0 [msec] TC=6 TP=12 BC=0 BP=7 PM=0 CM=0 FM=0 AM=0

TC=6 TP=12 BC=0 BP=7 PM=0 CM=0 FM=0 AM=0
reasoning 0 [msec cputime] 2 [msec walltime]
Другие вопросы по тегам