将字符串读入 Jena 模型
Read strings into Jena Model
我有一些三元组存储在像
这样的字符串中
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,我认为语法很好。问题在哪里?
出于调试目的,我在 link
处放置了一个小程序
您的 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> ."
使用三参数 read()
方法并将 null
作为第二个参数(基本 uri)传递。
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());
}
我有一些三元组存储在像
这样的字符串中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,我认为语法很好。问题在哪里? 出于调试目的,我在 link
处放置了一个小程序您的 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> ."
使用三参数 read()
方法并将 null
作为第二个参数(基本 uri)传递。
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());
}