把链接和transclusion都表示为入向关系[#124]
link和transclude都直接指向tree ID;不再有heading fragment。incoming-pageo将两种入向引用合并:
(define-relation (incoming-pageo nodes page-id)
(exists (node-id kind)
(either ((== kind 'link)) ((== kind 'transclude)))
(nodeo nodes (node-id node-id) (kind kind))
(node-propertyo nodes node-id 'target page-id))) 先将kind限定为link或transclude,再调用nodeo,它就可以使用kind索引,而不必枚举全站所有节点。miniKanren的目标顺序会影响执行效率。
这里的nodes是Forest中的content-node relation。nodeo找出两类节点,node-propertyo读取目标;两种节点使用同一种tree身份,不需要解析目标字符串。