Виртуозная ошибка: отсутствует предикат и объект между объектом пустого узла верхнего уровня и точкой, обработанной в ожидании здесь
Я помещаю следующие данные (пустые узлы) в Virtuoso:
@prefix ns0: <http://linked.opendata.cz/ontology/chord/> .
@prefix ns1: <http://linked.opendata.cz/resource/business-entity/> .
[ ns0:source ns1:CZ00006947 ;
ns0:target <http://linked.opendata.cz/resource/domain/seznam.gov.cz/rejstriky/business-entity/28175492>
] .
[ ns0:source ns1:CZ00241610 ;
ns0:target <http://linked.opendata.cz/resource/domain/seznam.gov.cz/rejstriky/business-entity/60437359>
] .
Это точные данные, которые передаются в Virtuoso через POST
запрос (только усеченный; фактические отправленные данные длиннее).
Я получаю следующее сообщение об ошибке:
SP029: Загрузчик TURTLE RDF, строка 8: отсутствует предикат и объект между объектом пустого узла верхнего уровня и обработанной точкой, ожидающей обработки здесь.
Это не имеет особого смысла для меня. Есть идеи, что случилось?
2 ответа
Ваши данные (которые на первый взгляд казались Черепахами, и именно так их анализировал Virtuoso) - это просто список субъектов (сущностей) - неопознанных а / к / пустых узлов - без предикатов (атрибутов) или объекты (ценности). Это может помочь вам визуализировать то, что я имею в виду -
[ … ] .
Эта редакция вашего образца будет работать, но вы можете сделать лучшее заявление по каждому из ваших неназванных субъектов -
@prefix ns0: <http://linked.opendata.cz/ontology/chord/> .
@prefix ns1: <http://linked.opendata.cz/resource/business-entity/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
[ ns0:source ns1:CZ00006947 ;
ns0:target <http://linked.opendata.cz/resource/domain/seznam.gov.cz/rejstriky/business-entity/28175492>
] a owl:Thing .
[ ns0:source ns1:CZ00241610 ;
ns0:target <http://linked.opendata.cz/resource/domain/seznam.gov.cz/rejstriky/business-entity/60437359>
] a owl:Thing .
Кроме того, вы можете сделать это, не добавляя никаких утверждений -
@prefix ns0: <http://linked.opendata.cz/ontology/chord/> .
@prefix ns1: <http://linked.opendata.cz/resource/business-entity/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
[] ns0:source ns1:CZ00006947 ;
ns0:target <http://linked.opendata.cz/resource/domain/seznam.gov.cz/rejstriky/business-entity/28175492>
.
[] ns0:source ns1:CZ00241610 ;
ns0:target <http://linked.opendata.cz/resource/domain/seznam.gov.cz/rejstriky/business-entity/60437359>
.
Поскольку вы предоставили дополнительную информацию - ваши данные N3, а не черепаха - кажется вероятным, что ваши POST
неправильно идентифицирует ваше представление как N3, что приводит к ошибке синтаксического анализа Virtuoso.
Похоже, что синтаксис на самом деле правильный или, возможно, достаточно правильный, чтобы некоторые онлайн-переводчики RDF (например, этот) могли правильно извлекать триплеты и переводить их в другие форматы. Видимо, Виртуоз не способен на это. Как предлагается в другом ответе, этот синтаксис работает:
@prefix ns0: <http://linked.opendata.cz/ontology/chord/> .
@prefix ns1: <http://linked.opendata.cz/resource/business-entity/> .
[] ns0:source ns1:CZ00006947 ;
ns0:target <http://linked.opendata.cz/resource/domain/seznam.gov.cz/rejstriky/business-entity/28175492>
.
[] ns0:source ns1:CZ00241610 ;
ns0:target <http://linked.opendata.cz/resource/domain/seznam.gov.cz/rejstriky/business-entity/60437359>
.
Но проблема в моем случае заключается в том, что я генерирую вывод программно, используя Apache Jena. Данные в моем вопросе о том, как Apache Jena представляет пустые узлы в N3 (это название этого формата), что явно несовместимо с тем, как Virtuoso понимает пустые узлы в N3.
К сожалению, API Apache Jena не позволит мне изменить способ представления пустых узлов в N3. Но это позволяет мне использовать другой формат вывода. Поэтому я перешел на RDF/XML, и это работает. Точно такие же данные, представленные в RDF/XML вместо N3, теперь можно перенести в Virtuoso.