У меня есть RDF-график, который я создаю с помощью EasyRDF:
<?xml version="1.0" encoding="utf-8" ?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/terms/"xmlns:foaf="http://xmlns.com/foaf/0.1/" <rdf:Description rdf:about="http://the-query-url"> <dc:creator>me</dc:creator> <foaf:primaryTopic rdf:resource="genid1"> </rdf:Description> <rdf:Description rdf:nodeID="genid1"> <!-- stuff --> </rdf:Description> </rdf:RDF>
Выше не правильно — ссылка на пустой узел в foaf:primaryTopic
должно быть _:genid1
,
Когда я изменяю эту строку на
$meta_block->add('foaf:primaryTopic', $graph->resource('_:' . $symbol_block->getBNodeId()));
EasyRdf вкладывает ресурсы следующим образом:
<?xml version="1.0" encoding="utf-8" ?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"xmlns:dc="http://purl.org/dc/terms/"xmlns:foaf="http://xmlns.com/foaf/0.1/" <rdf:Description rdf:about="http://the-query-url"> <dc:creator>me</dc:creator> <foaf:primaryTopic> <rdf:Description> <!-- stuff --> </rdf:Description> </foaf:primaryTopic> </rdf:Description> </rdf:RDF>
Как мне остановить EasyRdf от вложения узлов?
Я хочу, чтобы вывод был таким же, как в первом примере, только с _:genid1
в качестве ресурса для foaf:primaryTopic
,
Возможно, вы неправильно понимаете модель данных RDF. Пустые узлы на самом деле пустые. Хотя может иметь что-то вроде пустого идентификатора узла в определенной сериализации или с заданным API, на самом деле это не часть модели данных. В первом фрагменте, который вы показали, узел с идентификатором узла genid является объект foaf: primaryTopic тройной. То же самое и во втором фрагменте; есть тройка foaf: primaryTopic, и объект является пустым узлом. Вы получаете так же Содержание RDF. Это может быть легче увидеть, если сериализовать в более удобочитаемом формате, например, Turtle или N-Triples. Чтобы узнать больше об этой проблеме, вы можете найти некоторые обсуждения в Как получить доступ к документам OWL, используя XPath в Java? полезно.
Все, что сказал, вы, вероятно, Можно настроить, как easyRDF пишет RDF / XML. Это не библиотека, которую я использовал, но вы можете посмотреть, можете ли вы отключить синтаксические сокращения. Например, с Jena (библиотека Java) вы можете указать, что вы хотите «RDF / XML» или «RDF / XML-ABBREV». RDF / XML-ABBREV больше похож на ваш второй фрагмент, тогда как похоже, что вы хотите что-то более похожее на RDF / XML. Но опять же, я советую попробовать сериализовать в такой формат, как N-Triples или Turtle, чтобы убедиться, что содержимое RDF на самом деле одинаково. RDF не имеет пустых идентификаторов узлов; это просто концепция сериализации, которая должна иметь возможность ссылаться на них.
Других решений пока нет …