Сезам 2.7 не смог распознать RDF Literal
У меня проблемы с кунжутом 2.7. Предположим, у меня есть следующий документ RDF:
<rdf:RDF xmlns:arq="http://example.com/vocab.rdf#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
<arq:Photo rdf:about="http://example.com/photo_2230.rdf">
<arq:photoName rdf:datatype="http://www.w3.org/2000/01/rdf-schema#Literal">Testing</arq:photoName>
<!-- More properties -->
...
</arq:Photo>
Когда я отправляю его в Sesame, появляется следующая ошибка:
"Тестирование" не было распознано и не могло быть проверено с типом данных http://www.w3.org/2000/01/rdf-schema
Он работал нормально с предыдущей версией Sesame (версия 2.6.9). Но теперь, после обновления, Sesame 2.7 не распознает его, и я не понимаю, почему. Может ли кто-нибудь догадаться, что происходит?
Спасибо!
1 ответ
В более старых версиях Sesame анализатор выдавал предупреждение только при обнаружении неизвестных типов данных. В Sesame 2.7 по умолчанию синтаксический анализатор фактически останавливается с ошибкой (хотя в следующем обновлении мы собираемся немного ослабить это). Так что даже в старых версиях Sesame это не распознавалось, и вы бы увидели предупреждение в журналах при попытке загрузить эти данные.
Причина, по которой этот тип данных не распознан, заключается в том, что " http://www.w3.org/2000/01/rdf-schema" вообще не является идентификатором типа данных. Вместо этого это идентификатор класса литералов (так что это совершенно другая вещь). Вы должны удалить этот тип данных из RDF, так как это неверное использование механизма типа данных.
Чтобы объяснить это, измените эту строку:
<arq:photoName rdf:datatype="http://www.w3.org/2000/01/rdf-schema#Literal">Testing</arq:photoName>
чтобы:
<arq:photoName>Testing</arq:photoName>
Помимо исправления ваших данных, вы, конечно же, можете настроить синтаксический анализатор Sesame так, чтобы он сразу не приводил к сбоям при неверных типах данных. Программно это легко сделать, адаптировав ParserConfig
используется в парсере вашего соединения.
RepositoryConnection conn; // your repository connection
// set the parser used in the connection to report datatype
// verification errors but not fail on them.
conn.getParserConfig().addNonFatalError(BasicParserSettings.VERIFY_DATATYPE_VALUES);