Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接Dbpedia查找web服务时出现问题_Java_Semantic Web_Dbpedia - Fatal编程技术网

Java 连接Dbpedia查找web服务时出现问题

Java 连接Dbpedia查找web服务时出现问题,java,semantic-web,dbpedia,Java,Semantic Web,Dbpedia,我试图使用DBpedia中的Lookup web服务,但我发现有困难,因为web上的信息很少。我找到了一个代码示例,但当我执行它时,会出现错误: java.lang.NullPointerException at tutorial.DBpediaLookupClient.containsSearchTerms(DBpediaLookupClient.java:111) at tutorial.DBpediaLookupClient.endElement(DBpediaLookup

我试图使用DBpedia中的Lookup web服务,但我发现有困难,因为web上的信息很少。我找到了一个代码示例,但当我执行它时,会出现错误:

java.lang.NullPointerException
    at tutorial.DBpediaLookupClient.containsSearchTerms(DBpediaLookupClient.java:111)
    at tutorial.DBpediaLookupClient.endElement(DBpediaLookupClient.java:87)
    at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(SAXParser.java:195)
    at tutorial.DBpediaLookupClient.<init>(DBpediaLookupClient.java:56)
    at tutorial.DBpediaLookupClient.main(DBpediaLookupClient.java:126)
java.lang.NullPointerException
位于tutorial.DBpediaLookupClient.containsSearchTerms(DBpediaLookupClient.java:111)
位于tutorial.DBpediaLookupClient.endElement(DBpediaLookupClient.java:87)
位于org.apache.xerces.parsers.AbstractSAXParser.endElement(未知源)
位于org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.ScannedElement(未知源)
位于org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(未知源)
位于org.apache.xerces.impl.XMLDocumentFragmentScanneImpl.ScandDocument(未知来源)
位于org.apache.xerces.parsers.XML11Configuration.parse(未知源)
位于org.apache.xerces.parsers.XML11Configuration.parse(未知源)
位于org.apache.xerces.parsers.XMLParser.parse(未知源)
位于org.apache.xerces.parsers.AbstractSAXParser.parse(未知源)
位于org.apache.xerces.jaxp.SAXParserImpl$jaxpsaxpasser.parse(未知源代码)
位于org.apache.xerces.jaxp.SAXParserImpl.parse(未知源)
位于javax.xml.parsers.SAXParser.parse(SAXParser.java:195)
在tutorial.DBpediaLookupClient.(DBpediaLookupClient.java:56)
位于tutorial.DBpediaLookupClient.main(DBpediaLookupClient.java:126)
代码如下:

软件包教程;
导入java.io.IOException;
导入java.io.InputStream;
导入java.net.urlcoder;
导入java.util.ArrayList;
导入java.util.HashMap;
导入java.util.List;
导入java.util.Map;
导入java.util.StringTokenizer;
导入javax.xml.parsers.SAXParser;
导入javax.xml.parsers.parserConfiguration异常;
导入javax.xml.parsers.SAXParserFactory;
导入org.apache.commons.httpclient.httpclient;
导入org.apache.commons.httpclient.HttpException;
导入org.apache.commons.httpclient.HttpMethod;
导入org.apache.commons.httpclient.methods.GetMethod;
导入org.xml.sax.SAXException;
导入org.xml.sax.XMLReader;
导入org.xml.sax.helpers.DefaultHandler;
导入com.sun.org.apache.bcel.internal.classfile.Attribute;
公共类DBpediaLookupClient扩展了DefaultHandler{
/**
*@param args
*/
private List variableBindings=new ArrayList();
私有映射tempBinding=null;
私有字符串lastElementName=null;
私有字符串查询=”;
公共DBpediaLookupClient(字符串查询)引发异常{
this.query=query;
HttpClient=新的HttpClient();
HttpMethod方法=新的GetMethod(“http://lookup.dbpedia.org/api/search.asmx/KeywordSearch?QueryClass=place&QueryString=“+查询);
试一试{
客户端执行方法(方法);
系统输出打印LN(方法);
InputStream ins=method.getResponseBodyAsStream();
SAXParserFactory=SAXParserFactory.newInstance();
javax.xml.parsers.SAXParser sax=factory.newSAXParser();
parse(ins,this);
}catch(httphe异常){
System.err.println(“连接到lookup.dbpedia.org的Http错误”);
}捕获(ioe异常ioe){
System.err.println(“无法连接到lookup.dbpedia.org”);
}捕获(ParserConfiguration异常e){
System.out.println(“O parser nãO foi configurado corretation.”);
e、 printStackTrace();
}捕获(SAXE异常){
System.out.println(“Problema ao fazer o parse do arquivo.”);
e、 printStackTrace();
}
方法。releaseConnection();
}
public void startElement(字符串uri、字符串localName、字符串qName、属性属性)引发SAXException{
if(qName.equalsIgnoreCase(“结果”)){
tempBinding=newhashmap();
}
lastElementName=qName;
}
public void endElement(字符串uri、字符串localName、字符串qName)引发SAXException{
if(qName.equalsIgnoreCase(“结果”)){
System.out.println(“Qname:+Qname”);
if(!variableBindings.contains(tempBinding)和&containsSearchTerms(tempBinding))
variableBindings.add(tempBinding);
}
}
公共无效字符(char[]ch,int start,int length)引发异常{
字符串s=新字符串(ch,start,length).trim();
如果(s.长度()>0){
如果(“Description”.equals(lastElementName))tempBinding.put(“Description”,s);
if(“URI”.equals(lastElementName))tempBinding.put(“URI”,s);
如果(“Label”.equals(lastElementName))tempBinding.put(“Label”,s);
}
}
公共列表变量绑定(){
返回变量绑定;
}
私有布尔包含ArchTerms(映射绑定){
StringBuilder sb=新的StringBuilder();
for(字符串值:bindings.values()){
sb.append(value);//不需要空白
}
字符串text=sb.toString().toLowerCase();
StringTokenizer st=新的StringTokenizer(this.query);
而(st.hasMoreTokens()){
if(text.indexOf(st.nextToken().toLowerCase())=-1){
返回false;
}
}
返回true;
}
公共静态void main(字符串[]args){
试一试{
DBpediaLookupClient=新的DBpediaLookupClient(“柏林”);
}捕获(例外e){
e、 printStackTrace();
}
}
}
如果有人知道出了什么问题,请帮助我。或者,如果你们中的任何人有任何其他代码示例,它也会有很大帮助。

我和
private StringBuffer fechaiBuffer;
public void startElement(...) {
  fechaiBuffer = new StringBuffer();
}
public void characters(char ch[], int start, int length) {
  fechaiBuffer.append(ch, start, length);
}
public void endElement(...) {
  s = fechaiBuffer.toString();
  // and so on
}