Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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 Neo4j SPARQL插件REST用法_Java_Neo4j_Semantic Web - Fatal编程技术网

Java Neo4j SPARQL插件REST用法

Java Neo4j SPARQL插件REST用法,java,neo4j,semantic-web,Java,Neo4j,Semantic Web,我试图使用RESTAPI在我的neo4j数据库上运行SPARQL查询。为了获得SPARQL端点,我安装了Noe4j SPARQL插件()。我的系统现在公开这些sparql端点: http://localhost:7474/db/data/ext/SPARQLPlugin/graphdb/insert_quad http://localhost:7474/db/data/ext/SPARQLPlugin/graphdb/execute_sparql 我正在尝试使用第二个来执行查询。HTTP PO

我试图使用RESTAPI在我的neo4j数据库上运行SPARQL查询。为了获得SPARQL端点,我安装了Noe4j SPARQL插件()。我的系统现在公开这些sparql端点:

http://localhost:7474/db/data/ext/SPARQLPlugin/graphdb/insert_quad
http://localhost:7474/db/data/ext/SPARQLPlugin/graphdb/execute_sparql
我正在尝试使用第二个来执行查询。HTTP POST请求应该与中的“示例2”类似,只是查询稍微简单一些。 这是源代码:

private static final String ENDPOINT = "http://localhost:7474/db/data/ext/SPARQLPlugin/graphdb/execute_sparql";


private static String query = "SELECT ?x WHERE {?x ?y ?z} LIMIT 5";


public static void main(String[] args) {
try {
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(ENDPOINT);

    // Request parameters and other properties.
    httppost.addHeader(new BasicHeader("Method", "POST"));
    httppost.addHeader(new BasicHeader("Accept", "application/json"));
    httppost.addHeader(new BasicHeader("Content-Type", "application/json"));

    JSONObject holder = new JSONObject();
    holder.put("query", query);
    System.out.println(holder.toString());
    httppost.setEntity(new StringEntity(holder.toString()));

    //Execute and get the response.
    HttpResponse response = httpclient.execute(httppost);

    System.out.println("HEADER:");
    System.out.println("Status code : " + response.getStatusLine().getStatusCode());
    Header[] hlist = response.getAllHeaders();
    for (int i = 0; i < hlist.length; i++) {
        System.out.print(hlist[i].getName() + " ");
        System.out.println(hlist[i].getValue());
    }
    System.out.println("-----");
    HttpEntity entity = response.getEntity();
    if (entity != null) {
        BufferedReader rd = new BufferedReader(
                new InputStreamReader(entity.getContent()));

        String line = "";
        while ((line = rd.readLine()) != null) {
            System.out.println("x " + line);
        }
    } else {
        System.out.println("Entity is null");
    }
} catch (Exception e) {
    e.printStackTrace(System.out);
    }
}
我非常确定这个SPARQL查询是正确的;在安装sparqpl插件时,我也没有注意到任何问题,所以我不知道为什么会得到“null”。我试着通过谷歌寻找解决方案,但我没有发现任何有用的东西。我怎样才能解决这个问题? 我正在使用Windows 7上运行的Neo4j 1.9.2社区版 已安装sparql插件的版本为“0.2快照”


编辑1:如果我运行此查询:

SELECT ?x WHERE {?x ?y ?z} LIMIT 0
输出为:

{"query":"SELECT ?x WHERE {?x ?y ?z} LIMIT 5"}
HEADER:
Status code : 200
Content-Length 4
Content-Type application/json; charset=UTF-8
Access-Control-Allow-Origin *
Server Jetty(6.1.25)
-----
x null
{"query":"SELECT ?x WHERE {?x ?y ?z} LIMIT 0"}
HEADER:
Status code : 200: OK
Content-Length 3
Content-Type application/json; charset=UTF-8
Access-Control-Allow-Origin *
Server Jetty(6.1.25)
-----
x [ ]
也许这有助于发现错误

我还尝试从Neo4j的HTTP控制台运行查询:

http> POST http://localhost:7474/db/data/ext/SPARQLPlugin/graphdb/execute_sparql {"query":"select ?x where { graph ?g { ?x ?y ?z } }"}
==> 200 OK
==> null

http> POST http://localhost:7474/db/data/ext/SPARQLPlugin/graphdb/execute_sparql {"query":"select ?x where { ?x ?y ?z  }"}
==> 200 OK
==> null


编辑2: 我尝试重新下载并构建插件。之后,我在NEO4J_HOME/plugins/sparql上解压安装了它。然后,在我启动Neo4j.bat之后,我执行了我的java代码。控制台出现以下错误:

x {
x   "message" : "com/tinkerpop/blueprints/impls/neo4j/Neo4jGraph",
x   "exception" : "NoClassDefFoundError",
x   "fullname" : "java.lang.NoClassDefFoundError",
x   "stacktrace" : [ "org.neo4j.server.plugin.sparql.SPARQLPlugin.initSail(SPARQLPlugin.java:90)", "org.neo4j.server.plugin.sparql.SPARQLPlugin.executeSPARQL(SPARQLPlugin.java:61)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.plugins.PluginMethod.invoke(PluginMethod.java:57)", "org.neo4j.server.plugins.PluginManager.invoke(PluginManager.java:168)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:300)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:122)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)" ],
x   "cause" : {
x     "message" : "com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph",
x     "exception" : "ClassNotFoundException",
x     "stacktrace" : [ "java.net.URLClassLoader$1.run(Unknown Source)", "java.net.URLClassLoader$1.run(Unknown Source)", "java.security.AccessController.doPrivileged(Native Method)", "java.net.URLClassLoader.findClass(Unknown Source)", "java.lang.ClassLoader.loadClass(Unknown Source)", "sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)", "java.lang.ClassLoader.loadClass(Unknown Source)", "org.neo4j.server.plugin.sparql.SPARQLPlugin.initSail(SPARQLPlugin.java:90)", "org.neo4j.server.plugin.sparql.SPARQLPlugin.executeSPARQL(SPARQLPlugin.java:61)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.plugins.PluginMethod.invoke(PluginMethod.java:57)", "org.neo4j.server.plugins.PluginManager.invoke(PluginManager.java:168)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:300)", "org.neo4j.server.rest.web.ExtensionService.invokeGraphDatabaseExtension(ExtensionService.java:122)", "java.lang.reflect.Method.invoke(Unknown Source)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)" ],
x     "fullname" : "java.lang.ClassNotFoundException"
x   }
x }
我发现,“com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph”是一些“blueprints-neo4j-graph.jar”的一部分。我的sparql/文件夹中缺少这个jar文件,因此我搜索了最新的jar文件并添加了“blueprints-neo4j-graph-2.5.0-20130916.151744-5.jar”。重新启动服务器后,错误不再出现,但结果仍然是“null”(在两个查询中的任何一个)

编辑3:我还试着从neof4 sparql插件的github页面中隐藏“BerlinDatasetTest.java”的某些部分,并手动运行它(在添加所有必要的jar文件后使用ofc)。这是源代码:

public String runQuery(String raw_query) {
        String q_result = "";
        Sail sail = new GraphSail( new Neo4jGraph("my_db/") );
        try {
            sail.initialize();
            QueryParser parser = new SPARQLParserFactory().getParser();
            ParsedQuery query = null;
            CloseableIteration<? extends BindingSet, QueryEvaluationException> sparqlResults;

            SailConnection conn = sail.getConnection();

            query = parser.parseQuery(raw_query, "http://localhost:7474");
            sparqlResults = conn.evaluate( query.getTupleExpr(),


             query.getDataset(), new EmptyBindingSet(), false );

        while ( sparqlResults.hasNext() ) {
            q_result += "; " + sparqlResults.next();
        }

        conn.close();
        sail.shutDown();

    } catch (Exception e) {
        e.printStackTrace();
    }

    return q_result;
}
“QueryTest.java”是我运行此函数的java类的名称。

编辑4:如果

query.getDataset()
如果我在WHERE部分中添加FROM子句或开始使用URL,则query.Dataset()不再为null,并且我得到一个空结果(不为null),则会变为null(这在两个查询中都会发生)。这是两个“有效”查询:

从其中{graph?g{x?y?z}选择?x
选择?x,其中{graph?g{?x?z}

我仍然没有得到任何结果。

我正在运行4节点群集。 ClassNotFoundException的修复非常简单

  • 您复制的gremlin插件文件夹包含blueprints core和blueprints-neo4j-graph的旧版本(1.2)。删除gremlin插件目录下的那些旧库

  • 更新sparql插件项目的pom.xml以包含最新的蓝图库。触发maven构建(mvn清理包)。现在将neo4j-sparql-plugin-0.2-SNAPSHOT-server-plugin.zip解压缩到gremlin目录中。确保您拥有最新的蓝图-neo4j-graph-2.3.0.jar

  • 试一试


    现在,您的API应该可以工作了,您可以将Neo4j作为一个成熟的triplestore。玩得开心

    你实际期望得到多少结果?如果使用查询
    select?x where{graph?g{x?y?z}
    以便搜索所有命名图,而不仅仅是默认图,会发生什么情况?(在某些端点中,默认图形是命名图形的并集,但在其他端点中不是。)我已将2gb*.nt文件加载到neo4j中,因此我希望返回许多三元组;所以我加了“限制5”。不幸的是,如果我使用您的查询,结果不会改变。您的查询似乎正在成功运行(即,您正在获得无错误的结果),因此问题似乎确实存在于其他地方。也许您不必使用2GB数据集运行,您可以设置一个简单的示例—一个更容易调试的更简单的配置—发生了一些有趣的事情。。这就是我所做的,在一个空数据库上*创建了2个节点:Node1和Node2,但没有向它们添加属性*创建了1个关系:Node1[RELATED_to]Node2*使用您的查询执行了我的java程序*现在,数据库有另一个节点,称为Node3,具有1个属性:(是的,此属性的名称为value,其值为“urn:com.tinkerpop…”值:“urn:com.tinkerpop.blueprints.pgm.oupls.sail:namespace”我的java代码的结果没有改变。如果我再次运行java代码,它不会添加另一个节点。您成功地在源代码中执行测试了吗?
    query.getDataset()
    
    select ?x from <localhost:7474> where { graph ?g { ?x ?y ?z } } 
    select ?x where { graph ?g { ?x <http://localhost:7474#knows> ?z } }