Reasoner в программе Virtuoso Jena

Я использую Virtuoso Jena Provider для запроса моего графика, который загружен на Virtuoso, но я также хочу добавить аргументы в свои запросы.

Я пробовал этот код, но получаю сообщение об ошибке в строке .execSelect();

Exception in thread "main" java.lang.NullPointerException
    at mypackage.Main.main(Main.java:49)

Вот код, который я пробовал до сих пор.

VirtGraph vg = new VirtGraph(graph, url, username, password);
VirtModel model = new VirtModel(vg);
InfModel ont = ModelFactory.createInfModel(ReasonerRegistry.getOWLReasoner(), model);
Query sparql = QueryFactory.create("PREFIX sosa: <http://www.w3.org/ns/sosa/>\r\n" + 
                "PREFIX ex: <http://example.org/data/>\r\n" + 
                "SELECT ?s ?o FROM <http://147.27.60.65/sensorOntology> WHERE {?s sosa:isHostedBy ?o}");
QueryExecution vqe = VirtuosoQueryExecutionFactory.create(sparql, ont);
ResultSet results = vqe.execSelect();

Как правильно добавить аргумент в мой график и как запросить полученный набор?

Вот версии, которые я использую: Jena: 3.1 JDBC: 4 Virtuoso: 6

РЕДАКТИРОВАТЬ Я установил Pellet reasoner из https://github.com/stardog-union/pellet, но я могу правильно вывести только файл .owl, хранящийся на моем компьютере и загруженный в Jena, но я все еще не могу вывести тот же файл, загруженный как виртуальный график.


person Stelios Botonakis    schedule 08.05.2019    source источник
comment
Первая мысль, потому что они кусают многих людей, - это подтвердить версию всего, что связано с этим - Jena Provider, JDBC Driver, Jena, Java, Virtuoso и т. д. - актуальны и соответствуют версии. Затем взгляните на этот образец запроса из Документы по виртуозному поставщику Jena.   -  person TallTed    schedule 08.05.2019


Ответы (1)


VirtuosoQueryExecutionFactory мог работать только с _2 _ / _ 3_ источником данных.

Вы должны использовать Jena Query Engine, если хотите выполнять запросы к InfModel источнику данных.

Правильный пример находится в Пример Virtu Jenosoa14. => в public static void test4() { ... }

Код от test4()

...
    public static void exec_select(String header, Model m, String query) {
        String h = header==null?"":header;
        System.out.println("===========["+h+"]==========");
        System.out.println("Exec: "+ query);
        Query jquery = QueryFactory.create(query) ;
        QueryExecution qexec = QueryExecutionFactory.create(jquery, m) ;
        ResultSet results =  qexec.execSelect();
        ResultSetFormatter.out(System.out, results, jquery);
        qexec.close();
        System.out.println("============================\n");

    }

...

    public static void test4() {
        try {
            System.out.println("--------------- TEST 4 -------------------");
            VirtModel vdata = VirtModel.openDatabaseModel("test:inf4", URL, uid, pwd);
            vdata.removeAll();

            String NS = PrintUtil.egNS;
            Resource c1 = vdata.createResource(NS + "C1");
            Resource c2 = vdata.createResource(NS + "C2");
            Resource c3 = vdata.createResource(NS + "C3");
            vdata.add(c2, RDFS.subClassOf, c3);
            vdata.add(c1, RDFS.subClassOf, c2);
            OntModel om = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM_RDFS_INF, vdata);

            exec_select("Data in DB", vdata, "select * where {?s ?p ?o}");

            exec_select("Data in Ontology Model", om, "select * where {?s ?p ?o}");

            exec_select("Data in Ontology", om, "select * where {<"+c1+"> <"+RDFS.subClassOf+"> ?o}");

        } catch (Exception e) {
            System.out.println("ERROR Test Failed.");
            e.printStackTrace();
        }
    }

person Sergey Malinin    schedule 09.05.2019
comment
Проблема в том, что мои тройки находятся на графике, и я могу получить к ним доступ с помощью VirtGraph, я не могу получить к ним доступ с помощью OntModel / InfModel. Когда я использую указанный вами пример, я получаю пустой набор. `` `=========== [Данные в БД] ========== Exec: select * where {? S? P? O} -------- ----- | s | p | о | ============= ------------- ======================== ==== '' - person Stelios Botonakis; 10.05.2019
comment
Также в указанных вами примерах используется переменная _ruleset. Как я должен это создать. Разве не смысл использовать такой логический аргумент, как Pellet, который делает выводы самостоятельно? - person Stelios Botonakis; 10.05.2019
comment
Вы уверены, что проверили пример по ссылке выше? Где вы нашли var _ruleset в примере? Var _ruleset us использовал другой пример. - person Sergey Malinin; 14.05.2019
comment
1. при использовании VirtuosoQueryExecutionFactory запросы выполняются на стороне сервера с данными, хранящимися в VirtuosoDB. 2. когда вы используете Jena Query Engine, запросы выполняются на стороне клиента, и Jena Query Engine может использовать все данные со стороны клиента и со стороны сервера, но он будет работать медленнее. 3. Йена по умолчанию хранила тройки, связанные с выводом (для OntModel / InfModel), только в памяти на стороне клиента. - person Sergey Malinin; 14.05.2019
comment
Какая эта переменная набора правил используется? Как я должен его генерировать. Я построил свою онтологию на протеже. - person Stelios Botonakis; 19.05.2019
comment
Где вы видели ruleset var в приведенном выше примере? - person Sergey Malinin; 20.05.2019
comment
Вы правы, извините, ruleset используется в примере 13, но мне все еще интересно, как его создать. Также еще несколько вопросов. В чем разница между данными VirtuosoDB и графиком, хранящимся на виртуозе (это загруженный мной файл .owl). Во-вторых, как я могу получить доступ к предполагаемым тройкам, которые вы упомянули - через OntoModel / Model? - Я хочу иметь возможность запрашивать SPARQL VirtGraph из Jena, но с выводами. Наконец, я добавил механизм рассуждения гранул по этой ссылке в Github github.com/stardog-union/pellet но все равно ничего не удалось - person Stelios Botonakis; 20.05.2019