Преобразование запроса SparQL в объект QueryBuilder, чтобы я мог использовать подготовленные операторы - PullRequest
0 голосов
/ 26 февраля 2019

Я пытаюсь привести в порядок некоторый код, который у меня сейчас есть, сделать его немного более общим.В настоящее время у меня есть StringBuilder, который работает, но я хотел бы преобразовать его в объект SelectBuilder, чтобы я мог передавать различные темы и тому подобное из других функций и не нуждаться в повторной записи того же кода.

Я могу передать строку, но я надеялся использовать jena.SelectBuilder, так как она выглядит аккуратно.

Это то, над чем я сейчас работаю, в идеале я хотел бы иметь возможность передать имяи установите эту переменную, а также день рождения (возможно, я мог бы вместо этого искать birthPlace)

Версия ниже работает, в том смысле, что она возвращает ВСЕ дни рождения, но не возвращает единственный день рождения, который я хочу ', что из TonyBlair.

Я понимаю, что, возможно, вопрос не ясен - как я могу передать значение 'Tony_Blair', чтобы значение '? Name' в запросе было заменено этой строкой и вернуло мне единственный результатЯ хочу?Я планирую иметь возможность передать ЛЮБУЮ тему и / или предикат.

String name = "Tony_Blair";

        SelectBuilder sbi = new SelectBuilder()
                .addPrefix("dbr", "http://dbpedia.org/resource/")
                .addPrefix("dbp", "http://dbpedia.org/property/")
                .addPrefix("dbo", "http://dbpedia.org/ontology/")
                //.addVar( "*" ) //the name?
                //.addWhere( "dbr:Tony_Blair",  "dbp:birthDate", "?dob" );
                //.addWhere( "dbr:"+name,  "dbp:birthDate", "?dob" );
                .addWhere( "?name",  "dbp:birthDate", "?dob" );

        sbi.setVar(Var.alloc("?name"), NodeFactory.createLiteral("dbr:Tony_Blair"));
        Query q = sbi.build() ;

Это старая версия

StringBuilder sb = new StringBuilder();
        sb.append("PREFIX dbr: <http://dbpedia.org/resource/> \n");
        sb.append("PREFIX dbp: <http://dbpedia.org/property/> \n");
        sb.append("PREFIX dbo: <http://dbpedia.org/ontology/> \n");
        sb.append("SELECT (STR(?dob) as ?date_of_birth) \n");
        sb.append("WHERE {dbr:Tony_Blair dbp:birthDate ?dob} \n");

1 Ответ

0 голосов
/ 26 февраля 2019

Передайте имя переменной в Var.alloc без '?', Оно добавляется автоматически.Кроме того, как @AKSW заявил в своем комментарии, поскольку dbr:Tony_Blair является URI, вызов должен быть:

sbi.setVar(Var.alloc("name"), NodeFactory.createURI("dbr:Tony_Blair"));

...