Как выполнять запросы Sparql

пожалуйста, помогите.

пока я знаю, как использовать Jena с ARQ (командная строка), загрузить файл xml, записать запрос в файл query.rq и выполнить запросы с помощью следующей команды:


person user3358377    schedule 15.04.2014    source источник
comment
Вы много задаете в этом вопросе, и не совсем понятно, что вам нужно. Вы можете использовать поддержку Jena ключевого слова service для запроса внешних конечных точек или вы можете загрузить некоторые данные LinkedMDB (если они доступны для загрузки) и запросить их локально. Вам не обязательно использовать здесь фусеки, если вы этого не хотите. Вы можете либо написать код Java для выполнения запроса SPARQL, либо загрузить данные в экземпляр Fuseki и запросить его таким образом, либо вы можете использовать инструменты командной строки, которые входят в комплект Jena.   -  person Joshua Taylor    schedule 15.04.2014


Ответы (1)


LinkedMDB использует D2R Сервер, чтобы открыть доступную только для чтения конечную точку SPARQL в http://data.linkedmdb.org/sparql.

Если он соответствует, вы можете использовать Jena для запроса конечной точки:

final String service = "http://data.linkedmdb.org/sparql";
final Query query = QueryFactory.create("SELECT * WHERE { ?s ?p ?o } LIMIT 1");
final QueryExecution exec = QueryExecutionFactory.createServiceRequest(service, query);
final ResultSet resultSet = exec.execSelect();
ResultSetFormatter.out(resultSet);

Это работает и обеспечивает вывод, аналогичный следующему:

------------------------------------------------------------------------------------------------------------------------------------------------------------
| s                                                               | p                                            | o                                       |
============================================================================================================================================================
| <http://data.linkedmdb.org/resource/film_distribution_medium/1> | <http://www.w3.org/2000/01/rdf-schema#label> | "Theatrical (Film Distribution Medium)" |
------------------------------------------------------------------------------------------------------------------------------------------------------------

Если вы хотите извлечь данные и сохранить их в какой-либо другой модели, тогда Федеративный запрос было бы подходящим способом сделать это:

final Model localModel = ModelFactory.createDefaultModel();

final Query query = QueryFactory.create(
    "CONSTRUCT { ?s ?p ?o } WHERE {\n"+
    "  SERVICE <http://data.linkedmdb.org/sparql> { SELECT * { ?s ?p ?o . } LIMIT 1 } \n"+
    "}"
);

final QueryExecution exec = QueryExecutionFactory.create(query, localModel);
exec.execConstruct(localModel);
localModel.write(System.out, "N3");

Как видно из этих выходных данных, тройки, которые мы построили во время запроса на построение, были сохранены в локальной модели.

<http://data.linkedmdb.org/resource/film_distribution_medium/1>
        <http://www.w3.org/2000/01/rdf-schema#label>
                "Theatrical (Film Distribution Medium)" .

Если вы хотите использовать Fuseki в качестве хранилища данных, а не локальную модель, вы можете использовать любое количество методов для доступа к Fuseki из Java. Вам просто нужно будет соответствующим образом настроить структуру ваших запросов.

Например, чтобы изменить ваши собственные данные fuseki, вам нужно будет выполнить запрос на обновление, используя UpdateRemote.execute из документации, и этот запрос должен содержать объединенный запрос (SERVICE) согласно второму примеру.

person Rob Hall    schedule 16.04.2014