В чем преимущество определения типов данных для литералов в графе RDF? - PullRequest
2 голосов
/ 01 апреля 2019

Я использую rdflib в Python для построения моего первого rdf-графика.Однако я не понимаю явной цели определения типов данных Literal.Я просмотрел документацию и провел тщательную проверку с помощью Google и поиска в stackoverflow, но, похоже, не могу найти реального объяснения этому.Почему бы просто не оставить все как простой старый литерал?

Из того, с чем я экспериментировал, это так, что вы можете искать явные термины в вашем запросе Sparql с помощью BIND?Это также помогает с фильтрацией?т.е. FILTER (? var1>? var2), где var1 и var2 должны представлять целые числа / числа с плавающей запятой / etc?Это помогает с запросом скорости?Или я просто совсем далеко?

В частности, зачем добавлять следующую тройку к mygraph

mygraph.add((amazingrdf, ns['hasValue'], Literal('42.0', datatype=XSD.float)))

вместо этого?

mygraph.add((amazingrdf, ns['hasValue'], Literal("42.0")))

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

1 Ответ

4 голосов
/ 02 апреля 2019

Сравнение двух значений xsd:integer в SPARQL:

ASK { FILTER (9 < 15) }

Результат: true.Теперь с xsd:string:

ASK { FILTER ("9" < "15") }

Результат: ложь, потому что при сортировке строк 9 следует после 1.

Некоторые проверки на равенство с xsd:decimal:

ASK { FILTER (+1.000 = 01.0) }

Результат верен, это тот же номер.Теперь с xsd:string:

ASK { FILTER ("+1.000" = "01.0") }

False, потому что это явно разные строки.

Выполнение некоторых математических операций с xsd:integer:

SELECT (1+1 AS ?result) {}

Возвращает 2(как xsd:integer).Теперь для строк:

SELECT ("1"+"1" AS ?result) {}

Возвращает «11» как xsd:string, потому что добавление строк интерпретируется как конкатенация строк (по крайней мере, в Jena, где я пробовал это; в других движках SPARQL добавление двух строкможет быть ошибкой, ничего не возвращая).

Как видите, использование правильного типа данных важно для сообщения вашего намерения к коду, который работает с данными.Примеры SPARQL очень наглядно показывают это, но при работе непосредственно с RDF API возникают такие же проблемы, как идентификация объектов, упорядочение и т. Д.

Как показано в примерах выше, SPARQL предлагает удобныесинтаксис для xsd:string, xsd:integer и xsd:decimal (и, не показан, для xsd:boolean и для строк, помеченных языком).Это поднимает эти типы данных над остальными.

...