RDF资源中存在重复的命名空间(前缀)

RDF资源中存在重复的命名空间(前缀),rdf,jena,prefixes,n3,Rdf,Jena,Prefixes,N3,我有一个RDF,其中包含从数据模型生成的多个资源。因为每个资源都是单独添加(连接)的,所以我有多个前缀(在N3中时)。它看起来像这样: @prefix dc: <someURL>. <someURL/Tony_Benn> dc:title "Tony Benn"; dc:publisher "Wikipedia". @prefix dc: <someURL>. <someURL/Someone_Else> dc:

我有一个RDF,其中包含从数据模型生成的多个资源。因为每个资源都是单独添加(连接)的,所以我有多个前缀(在N3中时)。它看起来像这样:

@prefix dc: <someURL>.

<someURL/Tony_Benn>
     dc:title "Tony Benn";
     dc:publisher "Wikipedia".

@prefix dc: <someURL>.

<someURL/Someone_Else>
     dc:title "Someone Else";
     dc:publisher "Wikipedia".
@前缀dc:。
dc:标题为“Tony Benn”;
dc:出版商“维基百科”。
@前缀dc:。
dc:标题为“其他人”;
dc:出版商“维基百科”。
我正在使用JenaAPI创建RDF,但我已经在API周围编写了一个包装器,以保持其不相交。有没有更好的方法来解决这个问题,或者有没有删除重复前缀的方法

如果您正在使用一个实用程序(例如,Jena’s来连接RDF文档,那么您就不必担心。前缀只会使读写变得更容易,但RDF感知工具并不真正关心。如果能够使用基于文本的工具(即,不感知RDF的工具)连接数据是很重要的,那么你可能应该使用格式。它非常简单,只是

subject predicate object .

每行一个三元组。因为没有前缀,文本连接就简单有效。N-Triples也有相同的功能(甚至更好)如果您需要拆分文档(例如,为了分布式处理),只要在换行符处拆分,您就可以拆分文件。对于N3、RDF/XML和其他更复杂的格式,这是不可能的。

谢谢@Joshua。我考虑过了。与其删除重复条目,我认为最好不要同时使用它首先,与连接两个RDF文档相比,我发现最好将各自的模型合并起来。因此,下面是我所做的:
  • 将文档读入模型
  • 将模型合并。这可以使用该方法或更好的方法来完成
  • 使用Read(..,..)方法将第一个RDF文件(因为我将其作为字符串,将其作为inputstream读取)读取到模型中,并添加来自第二个RDF文件的语句。正如@Joshua在下面的注释中所建议的,它在内存使用方面要高效得多
  • 拿出统一的模型

  • 我发现这更容易、更可预测,并且处理前缀也更好。我也可以使用Notation3。

    感谢您的快速响应。是的,我知道N-Triples格式。我的坏;应该提到整个工作环境,即能够在JSON中可视化RDF。现在,工具(javascript)使用RDF/XML和生成JSON的代码没有标准化,因此更易于阅读。3.是的,我同意N-Triple比N3更容易阅读,我希望您能指点任何有助于将RDF转换为JSON的工具或API。P.S:我必须以编程方式进行转换,因此不能使用rdfcat。@Narayankrish the
    --help
    选项没有提到它,但是您可以将
    -out RDF/JSON
    与rdfcat一起使用,因此这是一个非常简单的解决方案。我不明白为什么通过编程方式执行某些操作会排除rdfcat的使用,但是如果您不能使用rdfcat,Jena是开源的,因此您仍然可以查看rdfcat的源代码以获取一些示例。Jena支持,因此,如果您只是简单地读入RDF,您可以将其写回RDF/JSON。@Narayankrishnan我看到您几天前接受了这个答案,只是不接受。您是否遇到了问题,以至于它不能满足您的需要?啊,所以您采纳了评论中的建议,决定做rdfcat所做的事情(请参阅)请注意,不是使用<代码>联合(模型),可以考虑只使用一个模型和(模型)>读(…)<代码>将文件中的内容添加到那个模型中,这应该占用大约一半的内存(联合创建一个全新的模型)。。如果您出于其他原因需要单独的模型,您可以将OntModel与子模型一起使用。很高兴您找到了解决方案!