首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Java n-triple RDF解析

Java n-triple RDF解析
EN

Stack Overflow用户
提问于 2011-04-28 13:34:19
回答 3查看 8.8K关注 0票数 11

我想解析一个n-triple格式的RDF文件。

我可以编写自己的解析器,但我更愿意使用库,而Jena在这方面似乎过于复杂(或者至少我看不到他们的文档解释如何以合理的方式读取n-triple)。

你能给我推荐一些有用的库吗?或者如果你对Sesame或Jena很了解,你可能会知道他们是如何解决这个问题的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-04-28 16:07:19

如果您只想解析NTriples,并且除了基本的处理和查询之外不需要做任何事情,那么您可以尝试使用NxParser。这是一段非常简单的Java代码,它可以传递任何类似于NTriples的格式(如NQuads等),从而为您提供一个遍历文件中语句的迭代器。如果你只想要NTriples,你可以很容易地忽略少于/多于3项的语句。

在链接的页面上改编示例将会给出以下简单的代码:

代码语言:javascript
代码运行次数:0
运行
复制
NxParser nxp = new NxParser(new FileInputStream("filetoparse.nq"),false);

while (nxp.hasNext()) 
{
  Node[] ns = nxp.next();
  if (ns.length == 3)
  {
    //Only Process Triples  
    //Replace the print statements with whatever you want
    for (Node n: ns) 
    {
      System.out.print(n.toN3());
      System.out.print(" ");
    }
    System.out.println(".");
  }
}
票数 7
EN

Stack Overflow用户

发布于 2011-04-28 16:14:57

对于Jena,这并不是那么困难:

给定一个文件rdfexample.ntriple,其中包含以下N-三元组形式的RDF (示例取自here):

代码语言:javascript
代码运行次数:0
运行
复制
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#year> "1988" .
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#price> "9.90" .
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#company> "CBS Records" .
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#country> "UK" .
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#artist> "Bonnie Tyler" .
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#year> "1985" .
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#price> "10.90" .
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#company> "Columbia" .
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#country> "USA" .
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#artist> "Bob Dylan" .

下面的代码

代码语言:javascript
代码运行次数:0
运行
复制
public static void main(String[] args) {
    String fileNameOrUri = "src/a/rdfexample.ntriple";
    Model model = ModelFactory.createDefaultModel();
    InputStream is = FileManager.get().open(fileNameOrUri);
    if (is != null) {
        model.read(is, null, "N-TRIPLE");
        model.write(System.out, "TURTLE");
    } else {
        System.err.println("cannot read " + fileNameOrUri);;
    }
}

读取文件,并以海龟的形式打印出来:

代码语言:javascript
代码运行次数:0
运行
复制
<http://www.recshop.fake/cd/Hide your heart>
      <http://www.recshop.fake/cd#artist>
              "Bonnie Tyler" ;
      <http://www.recshop.fake/cd#company>
              "CBS Records" ;
      <http://www.recshop.fake/cd#country>
              "UK" ;
      <http://www.recshop.fake/cd#price>
              "9.90" ;
      <http://www.recshop.fake/cd#year>
              "1988" .

<http://www.recshop.fake/cd/Empire Burlesque>
      <http://www.recshop.fake/cd#artist>
              "Bob Dylan" ;
      <http://www.recshop.fake/cd#company>
              "Columbia" ;
      <http://www.recshop.fake/cd#country>
              "USA" ;
      <http://www.recshop.fake/cd#price>
              "10.90" ;
      <http://www.recshop.fake/cd#year>
              "1985" .

因此,使用Jena,您可以轻松地将RDF (以任何形式)解析为com.hp.hpl.jena.rdf.model.Model对象,从而允许您以编程方式对其进行操作。

票数 8
EN

Stack Overflow用户

发布于 2014-11-18 16:17:43

老问题,但既然您明确地问到了不同的库,我想我应该展示如何使用Eclipse RDF4JRio parser进行简单的RDF解析(透露:我是RDF4J开发人员之一)。

例如,要解析文件并将所有三元组放入Model中,只需执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
FileInputStream in = new FileInputStream("/path/to/file.nt");

Model m = Rio.parse(in, RDFFormat.NTRIPLES);

如果您希望立即将解析器输出打印到stdout (例如,以Turtle格式),请执行以下操作:

代码语言:javascript
代码运行次数:0
运行
复制
FileInputStream in = new FileInputStream("/path/to/file.nt");

RDFParser parser = Rio.createParser(RDFFormat.NTRIPLES);
parser.parse(in, "", Rio.createWriter(RDFFormat.TURTLE, System.out));

当然,使用这些基本工具的方法还有很多,请查看工具包文档以了解详细信息。

顺便说一句,Rio解析器可以作为单独的maven工件使用,所以如果您希望只使用解析器,而不使用其余的RDF4J工具,也可以这样做。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5814069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档