异常耶拿 SPARQL

exception jena SPARQL

我想在 java 中使用 SPARQL 查询查询我的 data.rdf RDF 文件

为此我使用了 Jena API,这是我的源代码:

import org.apache.log4j.chainsaw.Main;
import com.hp.hpl.jena.query.Query;
import com.hp.hpl.jena.query.QueryExecution;
import com.hp.hpl.jena.query.QueryExecutionFactory;
import com.hp.hpl.jena.query.QueryFactory;
import com.hp.hpl.jena.query.QuerySolution;
import com.hp.hpl.jena.query.ResultSet;
import com.hp.hpl.jena.rdf.model.Literal;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.util.FileManager;
public class HelloRDFWorld {
    public static void main(String[] args) {
        FileManager.get().addLocatorClassLoader(Main.class.getClassLoader());
        Model model=FileManager.get().loadModel("D:/workspace_java/JenaTutorial/src/data.rdf");

        String querystring=
                "Prefix rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>"+
                "PREFIX FOAF: <http://xmlns.com/foaf/0.1/>"+
                "select *  where"+
                "{"+
                "?person foaf:name ?"+
                "}";
        Query query = QueryFactory.create(querystring);
        QueryExecution qexec= QueryExecutionFactory.create(query);
        try
        {
            ResultSet result= qexec.execSelect();
            while(result.hasNext()){
                QuerySolution sol= result.nextSolution();
                Literal name= sol.getLiteral("x");
                System.out.println(name);   
            }
        }
        finally{
            qexec.close();
        }

    }
}

这是我的 RDF 文件:

<rdf:RDF>
  <foaf:person>
    <foaf:name>gorge</foaf:name>
  </foaf:person>
  <foaf:person>
    <foaf:name>Johon</foaf:name>
  </foaf:person>
</rdf:RDF>

执行后;它向我展示了这个异常

Exception in thread "main" java.lang.UnsupportedClassVersionError: com/hp/hpl/jena/util/FileManager : Unsupported major.minor version 51.0
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClassCond(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access[=12=]0(Unknown Source)
    at java.net.URLClassLoader.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at tutorial.HelloRDFWorld.main(HelloRDFWorld.java:19)

那么问题出在哪里?

您已尝试 运行 在较旧的 JVM 中针对 Java 7 编译的库(在本例中为 Jena)。您有三个选择:

  1. 使用受支持的 JVM(JavaOracle 不再支持 6 及之前的版本)
  2. 使用您使用的 Java 重新编译您要使用的库(可能不可能,因为它可能使用 Java 7 中的 API)。
  3. 尝试一些 Java backporting tool(但如果使用来自更高版本 JDK 的 API,它可能仍会在 运行 时失败)。 (虽然在你的情况下似乎没有工具可以从 7 恢复到 6 或 5。)

强烈推荐第一个选项(最快最安全,可能是最受支持的选项)。