创建
多个 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==
我想生五个孩子。这里可以计数吗?我在这里有点迷茫。
您可以根据需要对 skolem 使用任意数量的参数,因此您也可以让孩子依赖母亲。 例如,这将使每个母亲有一个独特的孩子:
[ 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处理器会抱怨。