首先,RDF 中有一个内置的 List 结构,您可以通过以下方式使用它:
ex:mylist rdf:type rdf:List .
ex:myList rdf:first ex:firstElement .
ex:myList rdf:rest _:sublist1 .
_:sublist1 rdf:first ex:SecondElement .
_:sublist1 rdf:rest rdf:nil .
在这里,为了知道您到达列表的末尾,您需要一个名为 的特殊列表rdf:nil
。null
这与编程语言中链表末尾的指针所起的作用相同。
但是,即使rdf:List
在 Web 上的现有数据中得到了很好的使用,它也不会以任何方式限制谓词的使用rdf:first
and rdf:rest
,因此您可以在给定列表中包含许多第一个元素而不会触发不一致。
因此,如果您真的想以严格的方式对链表进行建模,您需要 OWL 的极具表现力的功能。我前一段时间做过,可以在http://purl.org/az/List找到。
你有一个空类是正常的,因为你指定 aNode
必须有一个nextNode
. 您不应该强加节点具有内容或下一个元素。您应该说基数最大为1,其域和范围hasNext
是Node,即EndNode
没有下一个节点的节点。但这仍然不够,因为它根本没有强加存在EndNode
。您可能有无限序列或循环。
如果要避免循环或无限序列,则必须定义传递属性hasFollower
并说类中至少有一个追随者EndNode
。
总而言之,在 OWL 中实现严格的列表在性能方面完全很糟糕,而且在大多数情况下完全没用,因为rdf:List
对于大多数情况来说已经足够了。