为了表示类似于图中所示的内容,您通常会将其视为 n 元关系。你应该看看 W3C 工作说明定义语义网上的 N 元关系,但简短的版本是你有一个三元关系,并且你表达
hasTask(list,1,socks)
hasTask(list,2,shoes)
hasTask(list,3,leash)
对于其中的每一个,您都会有一个资源,通常是一个空白节点,但它也可以是一个 URI,并且具有与各个组件相关的属性,也许还有一个类型:
_:rel1 rdf:type :taskItem ;
:hasList :list ;
:hasord 1;
:hasTask :socks .
_:rel2 rdf:type :taskItem ;
:hasList :list ;
:hasord 2;
:hasTask :shoes .
_:rel3 rdf:type :taskItem ;
:hasList :list ;
:hasord 3;
:hasTask :leash .
当然,这里存在一些变化。列表可以与每个任务项相关,而不是让具体化关系将列表、数字和任务作为属性值:
:list :hasTaskItem [ rdf:type :taskItem ;
:hasord 1;
:hasTask :socks ] ,
[ rdf:type :taskItem ;
:hasord 2;
:hasTask :shoes ] ,
[ rdf:type :taskItem ;
:hasord 3;
:hasTask :leash ] .
但基本思想是相同的。或者,您可以使用列表。在纯 RDF 中,您可以使用 RDF 列表并保留数字隐式,例如:
:list :hasTasks ( :socks :shoes :leash ) .
这只是简写
:list :hasTasks [ rdf:first :socks ;
rdf:rest [ rdf:first :shoes ;
rdf:rest [ rdf:first :leash ;
rdf:rest rdf:nil ]]].
在 OWL 中,您不能使用 rdf:first 和 rdf:rest,但您可以定义自己的类似属性并实现相同的结构。我的答案中有一个指定列表类的示例我可以指定 rdf:List 成员的范围吗?(有人想要一个所有元素都必须是某种类型的列表)。如果您确实采用此路线,并且想要恢复列表中每个元素的位置,实际上可以使用 RDF 上的 SPARQL 查询来实现,正如我在回答中所描述的那样是否可以在 SPARQL 中获取 RDF 集合中元素的位置?.