почему у Джены фусеки нет ответа на рассуждения совы? - PullRequest
0 голосов
/ 08 января 2020

Я хочу использовать Jena Fuseki для создания конечной точки SPARQL для некоторого файла онтологии. и моя конфигурация fuseki выглядит следующим образом:

@prefix fuseki:  <http://jena.apache.org/fuseki#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix tdb:     <http://jena.hpl.hp.com/2008/tdb#> .
@prefix ja:      <http://jena.hpl.hp.com/2005/11/Assembler#> .

<#service1> rdf:type fuseki:Service ;
    fuseki:name                       "ds" ;       # http://host:port/ds
    fuseki:serviceQuery               "sparql" ;   # SPARQL query service
    fuseki:serviceQuery               "query" ;    # SPARQL query service (alt name)
    fuseki:serviceUpdate              "update" ;   # SPARQL update service
    fuseki:serviceUpload              "upload" ;   # Non-SPARQL upload service
    fuseki:serviceReadWriteGraphStore "data" ;     # SPARQL Graph store protocol (read and write)
    # A separate read-only graph store endpoint:
    fuseki:serviceReadGraphStore      "get" ;      # SPARQL Graph store protocol (read only)
    fuseki:dataset                   <#dataset> ;
    .

<#dataset> rdf:type ja:RDFDataset ;
    ja:defaultGraph <#inf_model> ;
    .

<#mv_data_model> a ja:MemoryModel;
    ja:content[ja:externalContent <file://D:/Program%20Files/d2rq-0.8.1/movie.nt>] ;
    ja:content[ja:externalContent <file://D:/Program%20Files/apache-jena-fuseki-3.13.1/run/ontology.ttl>]
    .

<#inf_model> a ja:InfModel ;
    ja:baseModel <#mv_data_model>;
    ja:reasoner [ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLFBRuleReasoner>] ;

    #ja:reasoner [
    #    ja:reasonerURL <http://jena.hpl.hp.com/2003/GenericRuleReasoner> ; 
    #    ja:rulesFrom <file://D:/Program%20Files/apache-jena-fuseki-3.13.1/run/rule.ttl>; ]
    .

Я запускаю fuseki как автономный сервер. Когда я закрываю OWL-анализатор, он работает хорошо. Но как только OWL-компоновщик включен, сервер не получает ответа на запрос даже запрос типа

SELECT ?s ?p ?o
WHERE {
    ?s ?p ?o
}
limit 10

не имеет ответа, а затем выдает исключение: java .lang.OutOfMemoryError. Тем не менее, RuleReasoner работает хорошо. И мой ttl-файл содержит около 1500000 троек, не слишком ли велик масштаб данных для OWL Reasoner, чтобы сделать вывод? Вся работа выполнена на моем р c, может ли какой-нибудь друг предложить мне помощь? Спасибо

1 Ответ

0 голосов
/ 17 февраля 2020

В fuseki, при запуске Reasoner через слишком большой DataSet, выводы будут применяться ко всему графику во время выполнения запроса. Кроме того, все выводы будут реализованы в случае, если рассудитель Fuseki TDB применяет прямое рассуждение. Это обременит систему, потому что график будет слишком большим для материализации и использования оперативной памяти.

Мы уже разбили машину, выделившую 1 ТД ОЗУ для Fuseki.

Возможное решение: разделить ваш набор данных на независимые части для настройки запросов. Для получения дополнительной информации, посмотрите на oop и решение AllegroGraph для высокой производительности с кластерами https://allegrograph.com/hadoop-and-allegrograph-the-semantic-data-lake-for-analytics/

Это зависит от ваших требований. В неограниченном масштабе кластерное решение кажется лучшим, но, возможно, локальное увеличение выделенной оперативной памяти для JVM решит вашу проблему.

...