Конфигурирование логического вывода Jena Fuseki + и TDB?
Я новичок в Дженне TDB и Fuseki. Я хотел бы загрузить в Fuseki данные, полученные в Lehigh University Benchmark (LUBM), сгенерированные их генератором данных (версия 1.7). Это около 400 файлов.owl. Использовал следующий файл конфигурации, который поставляется вместе с Fuseki для вывода:
<#service1> rdf:type fuseki:Service ;
fuseki:name "inf" ; # http://host/inf
fuseki:serviceQuery "sparql" ; # SPARQL query service
#fuseki:serviceUpdate "update" ;
fuseki:serviceReadWriteGraphStore "data" ;
# A separate read-only graph store endpoint:
fuseki:serviceReadGraphStore "get" ;
fuseki:dataset <#dataset> ;
.
<#dataset> rdf:type ja:RDFDataset ;
ja:defaultGraph <#model_inf> ;
.
<#model_inf> a ja:InfModel ;
ja:baseModel <#tdbGraph> ;
ja:reasoner [
ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>
] .
<#tdbDataset> rdf:type tdb:DatasetTDB ;
tdb:location "myDB" ;
tdb:unionDefaultGraph true ;
.
<#tdbGraph> rdf:type tdb:GraphTDB ;
tdb:dataset <#tdbDataset> .
Фусеки запускается без проблем. Однако, когда я выполняю следующую команду:
./s-put http://localhost:3030/inf/data default ~/Owl/univ-bench.owl
Я получаю сообщение об ошибке:405 HTTP method PUT is not supported by this URL http://localhost:3030/inf/data?default
У меня есть пара вопросов:
1. Обновление в файле конфигурации явно не отключено, так почему я получаю это сообщение.
2. Для того, чтобы загрузить все 400 .owl файл в виде одного графика, очевидно, я должен отключить обновление и включить tdb:unionDefaultGraph true
(Это упоминается в файле конфигурации, поставляемом вместе с Fuseki), если это так, как, черт возьми, я полагаю, чтобы загрузить данные в Fuseki. Пожалуйста, дайте мне знать, что мне здесь не хватает и как я могу сделать это правильно.
Заранее спасибо за помощь.
Изменить: я узнал, что вам нужно будет добавить следующее:
fuseki:serviceReadWriteGraphStore "data" ;
# A separate read-only graph store endpoint:
fuseki:serviceReadGraphStore "get" ;
для того, чтобы иметь возможность использовать s-put
для загрузки данных, однако каждый раз, когда я добавляю новый файл, он перезаписывает данные из предыдущего файла, и поэтому вывод не работает. Что я тут не так сделал? Как правильно загрузить данные, чтобы все файлы загружались в один и тот же график и работа с выводами?
Редактировать Итак, углубившись в эту проблему, я обнаружил, что есть два способа загрузки данных.
Вы можете добавить следующее, где вы определяете модель в файле конфигурации:
ja:content [ja:externalContent <file://// Path_to_owl_file >] ;
Так что для меня я добавил это под
<#model_inf> a ja:InfModel ;
Однако, если у вас есть 400 файлов, это будет очень утомительно.Вы можете отдельно загрузить данные, используя
tdbloader2
и укажите файл конфигурации в каталог, который tdbload создает в качестве базы данных. Который также описан здесь$ tdbloader2 --loc tdb PATH_TO_DIR_or_OWL_Files
В настоящее время проблема заключается в том, что когда я выполняю простой запрос, например, следующий запрос, я получаю ошибку "Недостаточно памяти".
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX ub: <http://cs.uga.edu#>
SELECT *
WHERE
{
?X rdf:type ub:GraduateStudent .
?X ub:takesCourse <http://www.Department0.University0.edu/GraduateCourse0>
}
Я увеличил объем памяти для Fuseki-Server (внутри серверного скрипта) до 5 ГБ и по-прежнему получаю сообщение об ошибке нехватки памяти для этого простого запроса. Есть идеи, почему это может происходить?
1 ответ
s-put делает PUT - который определяется как "заменить содержимое".
Используйте s-post для добавления в график.
LUBM достаточно прост по своей структуре, так что (1) он не очень реалистичен и (2) вывод может быть применен к каждому университету отдельно и к данным, загруженным таким образом, во время запроса все было расширено.