Java 读取RDF不起作用
我正在尝试传送foaf文件:Java 读取RDF不起作用,java,rdf,apache-jena,foaf,Java,Rdf,Apache Jena,Foaf,我正在尝试传送foaf文件: import org.apache.jena.rdf.model.Model; import org.apache.jena.rdf.model.ModelFactory; public class Testbed { public static void main(String[] args) { Model model = ModelFactory.createDefaultModel(); try {
import org.apache.jena.rdf.model.Model;
import org.apache.jena.rdf.model.ModelFactory;
public class Testbed {
public static void main(String[] args) {
Model model = ModelFactory.createDefaultModel();
try {
model.read("http://www.csail.mit.edu/~lkagal/foaf", "RDF/XML");
}
catch(Exception ex) {
System.out.println(ex.toString());
}
}
}
我得到以下例外情况:
org.apache.jena.riot.RiotException:[行:1,列:50]空白
publicId和systemId之间需要
我不明白这个例外是什么意思。我怎样才能修好它。我是否使用了错误的格式(看起来不像“海龟”或任何其他格式)
我的环境(Windows 10 x64,apache-jena-3.1.1):
java版本“1.8.0_112”java(TM)SE运行时环境(构建
1.8.0_112-b15)Java热点(TM)64位服务器虚拟机(构建25.112-b15,混合模式
URL
http://www.csail.mit.edu/~lkagal/foaf
实际上正在重定向到http://people.csail.mit.edu/lkagal/foaf
。出现重定向是错误的原因
这个问题已经在Jena
(bug)的开发分支中报告并修复
分析
用于连接处理。特别是,Jena 3.1.0
使用HttpClient 4.2.6
,它在Jena 3.1.1
中更新为HttpClient 4.5.2
如前所述,使用Jena 3.1.0
时不存在此问题,原因是它创建了一个默认支持各种功能的连接,包括自动跟踪重定向(它使用新的SystemDefaultHttpClient()
)
相反,随着HttpClient
的更新,在Jena 3.1.1
中,对代码进行了修改,以创建无法遵循重定向的最小连接类型(它使用HttpClients.createMinimal()
)
发生的情况是,它没有到达您的foaf
文件,而是检索重定向消息,即:
name="[xml]",ch=DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://people.csail.mit.edu/lkagal/foaf">here</a>.</p>
<hr>
<address>Apache/2.2.16 (Debian) Server at www.csail.mit.edu Port 80</address>
</body></html>
解决
- 使用直接URL,
http://people.csail.mit.edu/lkagal/foaf
- 使用以前版本的
Jena
- 使用Jena的开发分支
- 为
提供您自己的“可重定向”连接,以代替默认连接;您可以在使用Jena
模型之前调用方法
。阅读HttpOp.setDefaultHttpClient
,例如:
HttpOp.setDefaultHttpClient(HttpClientBuilder.create().build());
- URL
http://www.csail.mit.edu/~lkagal/foaf
实际上正在重定向到http://people.csail.mit.edu/lkagal/foaf
。出现重定向是错误的原因
这个问题已经在Jena
(bug)的开发分支中报告并修复
分析
用于连接处理。特别是,Jena 3.1.0
使用HttpClient 4.2.6
,它在Jena 3.1.1
中更新为HttpClient 4.5.2
如前所述,使用Jena 3.1.0
时不存在此问题,原因是它创建了一个默认支持各种功能的连接,包括自动跟踪重定向(它使用新的SystemDefaultHttpClient()
)
相反,随着HttpClient
的更新,在Jena 3.1.1
中,对代码进行了修改,以创建无法遵循重定向的最小连接类型(它使用HttpClients.createMinimal()
)
发生的情况是,它没有到达您的foaf
文件,而是检索重定向消息,即:
name="[xml]",ch=DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>301 Moved Permanently</title>
</head><body>
<h1>Moved Permanently</h1>
<p>The document has moved <a href="http://people.csail.mit.edu/lkagal/foaf">here</a>.</p>
<hr>
<address>Apache/2.2.16 (Debian) Server at www.csail.mit.edu Port 80</address>
</body></html>
解决
- 使用直接URL,
http://people.csail.mit.edu/lkagal/foaf
- 使用以前版本的
Jena
- 使用Jena的开发分支
- 为
提供您自己的“可重定向”连接,以代替默认连接;您可以在使用Jena
模型之前调用方法
。阅读HttpOp.setDefaultHttpClient
,例如:
HttpOp.setDefaultHttpClient(HttpClientBuilder.create().build());