java - 从字符串中读取 rdf 模型

标签 java rdf jena

我正在使用 Jena,我想创建一个模型,然后从包含 RDF 的字符串中读取其内容。例如:

String s= "<rdf:RDF 
    xmlns:res="http://www.w3.org/2005/sparql-results#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"> 
   <rdf:Description rdf:about="http://www.w3.org/2005/sparql-results#ResultSet">  
    <res:solution rdf:nodeID="r0"/> 
    <res:solution rdf:nodeID="r1"/> 
    <res:solution rdf:nodeID="r2"/> 
   </rdf:Description>
   </rdf:RDF>"; 

目前,我使用以下说明:

    Model rdf = ModelFactory.createDefaultModel(); 
    InputStream in = FileManager.get().open(s);
    if (in == null) {
        throw new IllegalArgumentException("File: " + s+ " not found");
    }
    rdf.read(in, "");

这些仅当 s 是文件名(例如 s="./myFile.rdf")时才起作用,而不是当我放置包含整个文件名的字符串时RDF。

最佳答案

Model.read(String,...) 方法使用字符串参数作为文件名。要从字符串读取 RDF 内容,您可以创建 ByteArrayInputStream 并使用 Model.read(InputStream,...) 方法。例如,使用 Model.read(InputStream in, String base)读取您的模型,然后在 Turtle 中将其写回:

import java.io.ByteArrayInputStream;

import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.ModelFactory;

public class ReadModelFromString {
    public static void main(String[] args) {
        final String modelText = "\n"
                + "<rdf:RDF \n"
                + "    xmlns:res=\"http://www.w3.org/2005/sparql-results#\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\"> \n"
                + "  <rdf:Description rdf:about=\"http://www.w3.org/2005/sparql-results#ResultSet\">\n"
                + "    <res:solution rdf:nodeID=\"r0\"/>\n"
                + "    <res:solution rdf:nodeID=\"r1\"/>\n"
                + "    <res:solution rdf:nodeID=\"r2\"/>\n"
                + "  </rdf:Description>\n" + "</rdf:RDF>";
        final Model model = ModelFactory.createDefaultModel();
        model.read(new ByteArrayInputStream(modelText.getBytes()), null);
        model.write(System.out, "TTL");
    }
}

产生:

@prefix res:     <http://www.w3.org/2005/sparql-results#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

res:ResultSet
      res:solution
              [] ;
      res:solution
              [] ;
      res:solution
              [] .

关于java - 从字符串中读取 rdf 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18787321/

相关文章:

java - Jena:如何添加带有数值的属性?

用于 Java 的 Javascript 解析器

rdf - SPARQL 查询传递

从 dbpedia 解析 .nt 文件的 Python 库/代码

java - 使用 APACHE JENA 自动检测文件扩展名

java - 无法查询链接电影数据库的本地版本

python - 如何通过获取所有类名称属性关系来创建领域本体词典并将其保存在列表中

java - Spring-Data-JPA分页

java - Windows 控制台中的 unicode 字符比预期的多

java - "import static class.*;"相对于多个静态 "class.method()"调用有何优势?