我有一个用EasyRDF创建的RDF图:
以上不正确-- foaf:primaryTopic
中对空白节点的引用应该是_:genid1
。
当我把这一行改为
$meta_block->add('foaf:primaryTopic', $graph->resource('_:' . $symbol_block->getBNodeId()));
EasyRdf嵌套资源,如下所示:
如何阻止EasyRdf嵌套节点?我希望输出与第一个示例一样,只使用_:genid1
作为foaf:primaryTopic
的资源。
发布于 2015-11-05 02:33:46
您可能误解了RDF数据模型。空白节点实际上是空白的。虽然在特定的序列化中或在给定的API中可能有类似于空白节点id的东西,但它实际上并不是数据模型的一部分。在您展示的第一个片段中,带有genid nodeId的节点是foaf:primaryTopic三元组的对象。在第二个片段中也是一样的;有一个foaf:primaryTopic三元组,对象是一个空节点。你得到的是相同的RDF内容。如果您以更可读的格式(如Turtle或serialize )序列化,这可能会更容易看到。有关此问题的更多信息,您可能会发现How to access OWL documents using XPath in Java?中的一些讨论很有用。
尽管如此,您可能可以自定义easyRDF如何编写RDF/XML。这不是我使用过的库,但是您可以看看是否可以关闭语法缩写。例如,对于Jena (一个Java库),您可以指定您需要"RDF/XML“或”RDF/XML-缩写“。RDF/XML -缩写更像是第二个片段,而看起来更像RDF/XML。但是,我再次建议您尝试将RDF内容序列化为像N或Turtle这样的格式,以确保RDF内容实际上是相同的。RDF没有任何空白的节点in;这只是序列化中的一个概念,必须能够引用它们。
https://stackoverflow.com/questions/33477773
复制相似问题