我有一个系统可以在本体中建模一些域数据,通常是三元组。
我一直在四处寻找表达多元化和订购的方法,但是没有通过谷歌找到任何东西。我的主要用例就像域中的一个实体可以是一个任务列表,(获得杂货,做饭,吃饭,类似的东西),但总的来说,我觉得有能力“重量”你的边缘可能是全面有用。
有可接受的方法吗?去四元店?中间项目(列表→列表项目)与边界到一个正常和一个域实体?从谓词到权重的谓词?
以下是一个例子:
答案 0 :(得分:5)
为了表示您在图中所显示的内容,您通常将其视为一种非关系。您应该查看W3C工作说明Defining N-ary Relations on the Semantic Web,但简短版本是您有3-ary关系,并且您正在表达
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,但您可以定义自己的类似属性并实现相同的结构。有一个在我的答案Can I specify a range for rdf:List members?中指定列表类的示例(其中有人想要一个列表,其所有元素必须是某种类型)。如果您确实采用了这条路线,并且想要恢复列表中每个元素的位置,您实际上可以使用RDF上的SPARQL查询来执行此操作,正如我在Is it possible to get the position of an element in an RDF Collection in SPARQL?的答案中所描述的那样。