Не могу получить openllet работает на Fuseki - PullRequest
0 голосов
/ 07 апреля 2020

вчера я пытался заставить Pellet и / или Openllet работать на моем сервере Fuseki.

Я делаю запросы через веб-интерфейс. Без аргументов все работает нормально.

Это моя конфигурация:

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

<http://jena.apache.org/2016/tdb#DatasetTDB>
        rdfs:subClassOf  ja:RDFDataset .

ja:DatasetTxnMem  rdfs:subClassOf  ja:RDFDataset .

tdb:DatasetTDB  rdfs:subClassOf  ja:RDFDataset .

tdb:GraphTDB  rdfs:subClassOf  ja:Model .

<http://jena.apache.org/2016/tdb#GraphTDB2>
        rdfs:subClassOf  ja:Model .

ja:MemoryDataset  rdfs:subClassOf  ja:RDFDataset .

ja:RDFDatasetZero  rdfs:subClassOf  ja:RDFDataset .

<http://jena.apache.org/text#TextDataset>
        rdfs:subClassOf  ja:RDFDataset .

:service_tdb_all  a                   fuseki:Service ;
        rdfs:label                    "TDB FOOT" ;
        fuseki:dataset                :tdb_dataset_readwrite ;
        fuseki:name                   "FOOT" ;
        fuseki:serviceQuery           "query" , "" , "sparql" ;
        fuseki:serviceReadGraphStore  "get" ;
        fuseki:serviceReadQuads       "" ;
        fuseki:serviceReadWriteGraphStore
                "data" ;
        fuseki:serviceReadWriteQuads  "" ;
        fuseki:serviceUpdate          "" , "update" ;
        fuseki:serviceUpload          "upload" .

:tdb_dataset_readwrite
        a             ja:RDFDataset;
        ja:defaultGraph       <#model_inf> ;
        tdb:location  "C:\\etc\\fuseki/databases/FOOT" .

<#model_inf> a ja:InfModel ;
     ja:baseModel <#graph> ;
     ja:reasoner [
        ja:reasonerClass "openllet.jena.PelletReasonerFactory";
     ] .

<#graph> rdf:type tdb:GraphTDB ;
  tdb:dataset :tdb_dataset_readwrite .

Журнал ошибок в каталоге Tomcat:

ERROR Exception in initialization: the class 'openllet.jena.PelletReasonerFactory' required by the object 7c374328cddba9fa8091dcebd77a7598 [ja:reasoner of file:///C:/etc/fuseki/configuration/FOOT.ttl#model_inf] could not be loaded

Я копировал Openllet Jar -Файлы (openllet-query-2.6.5.jar и прочее) везде, но без шансов. Кстати, это правильное действие в любом случае?!

В моем проекте Apache Jena (и Snarp Sparql Protege Plugin) я запустил Openllet, и он дал мне правильные результаты.

Я получил Несколько правил этого типа

                       [ rdf:type owl:Class ;
                         owl:unionOf ( [ owl:intersectionOf ( [ rdf:type owl:Restriction ;
                                                                owl:onProperty food:hasIngredient ;
                                                                owl:someValuesFrom food:Dairy
                                                              ]
                                                              [ rdf:type owl:Restriction ;
                                                                owl:onProperty food:hasIngredient ;
                                                                owl:someValuesFrom [ rdf:type owl:Restriction ;
                                                                                     owl:onProperty food:hasFood ;
                                                                                     owl:someValuesFrom food:Meat
                                                                                   ]
                                                              ]
                                                            ) ;
                                         rdf:type owl:Class
                                       ]
                                       [ rdf:type owl:Restriction ;
                                         owl:onProperty food:hasIngredient ;
                                         owl:someValuesFrom [ rdf:type owl:Restriction ;
                                                              owl:onProperty food:hasFood ;
                                                              owl:someValuesFrom food:Pork
                                                            ]
                                       ]
                                     )
                       ]
                     ) ;
  rdf:type owl:Class ;
  rdfs:subClassOf [ rdf:type owl:Restriction ;
                    owl:onProperty food:violatesRestriction ;
                    owl:hasValue food:kosherReligious
                  ]
] .

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

Рассуждения ужасно медленны ( 8 секунд на 25000 тройных баз данных). Если я извлекаю модель до того, как она запустится быстро, но извлечение модели занимает 3 минуты .

Я просто хочу, чтобы пользователь мог запрашивать рецепты с выводами логика в разумные сроки (<2 секунды): (</p>

Есть ли еще (лучше?) мыслители, которые могут работать с пустыми узлами (отшельником ...) ??

Мои вопросы:

  1. Как мне заставить Fuseki работать с Pellet / Openllet
  2. Альтернативы Reasoner?
  3. Есть ли лучший способ вывести правила как приведенный выше?
  4. Совершенно ли я не прав и должен ли я разрешать запуск рассуждения только один раз в начале программы, а не для каждого запроса?

С уважением;)

1 Ответ

0 голосов
/ 08 апреля 2020

Вместо Openllet я попробовал OWLMicroFBRuleReasoner , он работал ! И его быстро !

<#model_inf> a ja:InfModel ;
     ja:baseModel <#graph> ;
     ja:reasoner [
        ja:reasonerURL <http://jena.hpl.hp.com/2003/OWLMicroFBRuleReasoner>
     ] .
...