0

我有一些三元组存储在一个字符串中,比如

String st =
<http://dbpedia.org/resource/53debf646ad3465872522651> <http://dbpedia.org/resource/end> <http://dbpedia.org/resource/1407106906391> . 
<http://dbpedia.org/resource/53debf676ad3465872522655> <http://dbpedia.org/resource/foi> <http://dbpedia.org/resource/SpatialThing> .

现在我正在使用 JENA 读取相同的字符串

           Model md= ModelFactory.createDefaultModel();
            InputStream in = IOUtils.toInputStream(st,"UTF-8");
            System.out.println(in.available());
            try{
                md.read(in, "N-TRIPLES");
            }catch(Exception e){
                e.printStackTrace();
            }
          System.out.println("model size:"+md.size());

我知道该字符串可用于 InputStream,但模型大小始终打印为 0。因此 md. read无法正常工作。我应该如何调试它?

更新 它抛出异常为

org.apache.jena.riot.RiotException: [line: 1, col: 7 ] Element or attribute do not match QName production: QName::=(NCName':')?NCName

根据 N-TRIPLES,我认为语法很好。问题出在哪里?出于调试目的,我在链接处放置了一个小程序

4

2 回答 2

2

使用三参数方法并作为第二个参数(基础 uri)read()传递。null

static String triples =
    "<http://dbpedia.org/resource/53debf646ad3465872522651> <http://dbpedia.org/resource/end> <http://dbpedia.org/resource/1407106906391> ." +
    "\n<http://dbpedia.org/resource/53debf676ad3465872522655> <http://dbpedia.org/resource/foi> <http://dbpedia.org/resource/SpatialThing> .";

public static void main(String[] args) throws IOException {
    Model model = ModelFactory.createDefaultModel()
        .read(IOUtils.toInputStream(triples, "UTF-8"), null, "N-TRIPLES");
    System.out.println("model size: " + model.size());
}
于 2015-08-20T14:31:57.767 回答
0

似乎您的 RDF 语法有点偏离。如果您正在解析 N3 或 Turtle,请尝试将您的字符串更改为:

String st =
"<http://dbpedia.org/resource/53debf646ad3465872522651> <http://dbpedia.org/resource/end> <http://dbpedia.org/resource/1407106906391> .
<http://dbpedia.org/resource/53debf676ad3465872522655> <http://dbpedia.org/resource/foi> <http://dbpedia.org/resource/SpatialThing> ."
于 2015-08-20T11:46:49.063 回答