Выполнение запросов к файлу RDF из Википедии (формат Turtle) с помощью Apache Jena - PullRequest
0 голосов
/ 16 мая 2018

Я ищу способ запроса файла RDF, отформатированного в синтаксисе Turtle. Файл RDF фактически представляет собой всю иерархию категорий Википедии, предоставленную Wikidata.

Вот выдержка из содержимого файла enwiki Categories.ttl , показывающая глобальную структуру данных:

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix mediawiki: <https://www.mediawiki.org/ontology#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix schema: <http://schema.org/> .
@prefix cc: <http://creativecommons.org/ns#> .

<https://en.wikipedia.org/wiki/Category:1148_establishments_in_France> a mediawiki:Category ;
    rdfs:label "1148 establishments in France" ;
    mediawiki:pages "2"^^xsd:integer ;
    mediawiki:subcategories "0"^^xsd:integer .

<https://en.wikipedia.org/wiki/Category:1148_establishments_in_France> mediawiki:isInCategory <https://en.wikipedia.org/wiki/Category:1140s_establishments_in_France>,
        <https://en.wikipedia.org/wiki/Category:1148_establishments_by_country>,
        <https://en.wikipedia.org/wiki/Category:1148_establishments_in_Europe>,
        <https://en.wikipedia.org/wiki/Category:1148_in_France>,
        <https://en.wikipedia.org/wiki/Category:Establishments_in_France_by_year> .

Моя конечная цель - получить все родительские категории категории Википедии, запросив файл RDF Turtle. Вот очень короткий пример кода Java, показывающий мою проблему:

LogCtl.setCmdLogging();
Model model = ModelFactory.createDefaultModel();
model.read("enwiki-categories.ttl");

Файл RDF Turtle занимает более 850 МБ, загрузка модели с использованием ранее показанного кода вызывает ошибку нехватки памяти. Мне нужен способ запроса файла RDF без необходимости загрузки полной базы данных RDF в память.

-

Есть ли способ сделать это, используя Apache Jena или другую библиотеку?

Если нет, есть ли более быстрый способ извлечь все родительские категории из данной категории в Википедии, используя локальные данные?

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

То, что вы намереваетесь сделать, называется «более широкая концепция».

Формализовано в СКОС (скос: шире). Вот ссылка на документацию: SKOS

Определение SKOS:

Простая система организации знаний (SKOS) - это общая модель данных для обмен и связывание систем организации знаний через Интернет.

Например, более широкое понятие Дерева - Растение. А дерево - это более широкое понятие сосны или дуба ... Оно формализовано в SKOS (skos: более широко).

0 голосов
/ 16 мая 2018

Да, вы можете сделать запрос с Йеной.Это именно то, на что рассчитана Йена.Однако я бы предложил вам импортировать файл в хранилище данных RDF, а затем использовать Jena для выполнения SPARQL-запроса к хранилищу данных RDF.

Возможно, вы захотите увидеть мой ответ на вопрос на SO, где я даю некоторые ссылки на хранилища данных RDF.

...