2

我正在使用 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 的字符串时才起作用。

4

1 回答 1

3

这些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
              [] .
于 2013-09-13T14:57:26.467 回答