Создайте несколько сколем с правилами Jena
Какой простой способ создать несколько сколемов без многократного копирования правила?
[ AddingMother:
makeSkolem(?mother, "a mother")
->
(?mother rdf:title "mother") (?mother rdf:type _:Mother)
]
[ AddingChild:
(?mother rdf:type _:Mother) makeSkolem(?child, "a child")
->
(?child rdf:title "child") (?child rdf:type _:Child) (?child rdf:hasMother ?mother) (?mother rdf:hasChild ?child)
]
Выход:
OYJ0Aokli2TZDVAK4EQzVA== --{title}-> mother
OYJ0Aokli2TZDVAK4EQzVA== --{type}-> :Mother
OYJ0Aokli2TZDVAK4EQzVA== --{hasChild}-> 8xEXOwnWH/tgxFN+HBwNeg==
8xEXOwnWH/tgxFN+HBwNeg== --{title}-> child
8xEXOwnWH/tgxFN+HBwNeg== --{type}-> :Child
8xEXOwnWH/tgxFN+HBwNeg== --{hasMother}-> OYJ0Aokli2TZDVAK4EQzVA==
Я хочу иметь пять детей. Здесь можно считать? Я немного потерян здесь.
1 ответ
Решение
Вы можете использовать столько аргументов в пользу сколема, сколько захотите, так что вы также можете сделать ребенка зависимым от матери. Например, это даст вам одного уникального ребенка на мать:
[ AddingChild:
(?mother rdf:type _:Mother) makeSkolem(?child, "a child", ?mother)
->
(?child rdf:title "child") (?child rdf:type _:Child) (?child rdf:hasMother ?mother) (?mother rdf:hasChild ?child)
]
Исходя из этого, если бы вы могли интегрировать какой-то подсчет, например, для создания индекса, то вы могли бы сгенерировать ребенка на индекс для каждой матери:
[ AddingChild:
(?mother :hasChildIndex ?index)
(?mother rdf:type _:Mother)
makeSkolem(?child, "a child", ?mother, ?index)
->
(?child rdf:title "child")
(?child rdf:type _:Child)
(?child rdf:hasMother ?mother)
(?mother rdf:hasChild ?child)
]
Кроме того, вы не должны использовать свойства в пространстве имен, которые не определены стандартом, такие как:
(?child rdf:title "child")
(?child rdf:hasMother ?mother)
(?mother rdf:hasChild ?child)
Некоторые рассудители и RDF-процессоры будут жаловаться.