2015-06-16 10 views
2

Что такое простой способ создания нескольких skolems без копирования правила несколько раз?Создание нескольких skolems с правилами Йены

[ 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== 

Я хочу иметь пять childens. Возможно ли подсчет? Я немного потерялся здесь.

ответ

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 будут жаловаться.

+0

Привет, спасибо. Я использую (? Mother: hasChildIndex? NewIndex). Но теперь их много: hasChildIndex предикаты. Как удалить старые? Или как я могу просто обновить: hasChildIndex по новому индексу? – user1091344

+0

ну, вам не нужно использовать (? Mother: hasChildIndex? NewIndex). Вы можете использовать объект-функтор, который не будет отображаться в данных RDF. например, заменить (? mother: hasChildIndex? newIndex) с hasChildIndex (? mother,? newIndex). –