Я пытаюсь определить следующее правило вывода для 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
.
Поэтому мой вопрос: Как правильно определить метки (включая спецификацию языка) в правиле вывода?