Йена: Ошибка при определении меток для правила вывода - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь определить следующее правило вывода для Apache Йена. Я использую GeneralRuleReasoner в гибридном режиме

[ aName:
        (?aRelation meta:refersTo meta:SomeOntologyClass)
        (?test rdfs:type dummy)
           -> (?anotherRelation rdfs:type meta:SomeType)
              (?anotherRelation meta:mainLabel "a"@fr)
              (?anotherRelation meta:mainLabel "b"@en)
              (?anotherRelation meta:mainLabel "c"@de)
              (?anotherRelation rdfs:label "a"@fr)
              (?anotherRelation rdfs:label "b"@en)
              (?anotherRelation rdfs:label "c"@de)
              (?test meta:has ?anotherRelation)
]

Я также пробовал то же самое с одинарными кавычками. Это происходит с ошибкой:

[error] - 2020-01-23 17:10:14,655 [play-dev-mode-akka.actor.default-dispatcher-58] ERROR controllers.IndexController - Triple with 4 nodes!

Я также пытался определить ее как

[ aName:
        (?aRelation meta:refersTo meta:SomeOntologyClass)
        (?test rdfs:type dummy)
           -> (?anotherRelation rdfs:type meta:SomeType)
              (?anotherRelation meta:mainLabel "a" lang:fr)
              (?anotherRelation meta:mainLabel "b" lang:en)
              (?anotherRelation meta:mainLabel "c" lang:de)
              (?anotherRelation rdfs:label "a" lang:fr)
              (?anotherRelation rdfs:label "b" lang:en)
              (?anotherRelation rdfs:label "c" lang:de)
              (?test meta:has ?anotherRelation)
]

Это на самом деле не работает, так как, очевидно, lang работает только для запроса DSL. Я также попытался сделать следующее: я определил другой класс в онтологии, который содержит метки и основные метки, которые я не могу определить в правиле вывода, и добавил свойство onto: к производному классу.

[ aName:
        (?aRelation meta:refersTo meta:SomeOntologyClass)
        (?test rdfs:type dummy)
           -> (?anotherRelation rdfs:type meta:SomeType)
              (?anotherRelation meta:refersTo onto:UtilityClassCarryngLabels)
              (?test meta:has ?anotherRelation)

]

Это работает в том смысле, что правило вывода IS создало НО при попытке запроса (SPARQL) на тройки, ни метки, ни основные появились метки для производного класса. Тем не менее, я вижу, что anotherR имеет , соотнесенное с test.

Поэтому мой вопрос: Как правильно определить метки (включая спецификацию языка) в правиле вывода?

1 Ответ

1 голос
/ 24 января 2020

Jena не поддерживает спецификацию языка c буквальное определение для правил вывода. Чтобы преодолеть это:

  1. Вы можете определить пользовательский BaseBuiltin, который создает языковой узел c вручную:

    NodeFactory.createLiteral (string.getLiteral.getLexicalForm, lang.getLiteral.getLexicalForm)

  2. Создайте другой класс, который содержит нужные вам языковые метки c и ссылается на этот другой класс. Этого будет недостаточно, поскольку вам нужно будет создать другое правило вывода , которое назначит метки нового класса классу реферера. Отношение будет выглядеть так: Из правила вывода

    a meta: ссылается на b

В определении онтологии

b rdfs:label "foo"@de , "bar"@fr ;

В другом выводе правило

?referrer meta:refersTo b
    -> [(?class rdfs:label ?label)
                  <- (b rdfs:label ?label)]
...