定义范围为有序列表的属性

时间:2018-08-10 12:19:02

标签: list owl protege

给出两个类ContainerElement,我想定义一个属性contains来描述Container的内容。

但是,Elements的顺序很重要,所以我不能简单地写

_:container :contains _:element1, _:element2, _:element3 .

如何正确定义contains属性?

我看过rdf:Listowl:Seq,但是我不知道如何将其转化为本体。

2 个答案:

答案 0 :(得分:2)

您可以根据需求和用例的不同以多种方式定义属性。

首先,有时可以避免完全使用列表或序列,但仍保持事物的顺序。如果要订购的元素具有固有顺序,则可以这样做。例如,如果要命名某人的孩子(从大到小),则可以使用hasChild关系:

ex:someone  onto:hasChild  ex:child3, ex:child1, ex:child2 .
ex:child1  onto:birthDay  "1995-10-25"^xsd:date .
ex:child2  onto:birthDay  "1997-03-10"^xsd:date .
ex:child3  onto:birthDay  "2003-01-14"^xsd:date .

如果您没有确切的日期,也可以使用关系isOlderThan使订单明确。但是,这在许多情况下不起作用。如果您想说比赛的参加者到达终点的顺序,您不能说:

ex:runner1  onto:arrivedBefore  ex:runner2 .
# etc.

因为这仅适用于该特定种族。一种解决方案是使用RDF列表,如下所示:

ex:race42  onto:arrival  (ex:runner1 ex:runner2 ex:runner3) .

但是,在OWL DL中不能像这样使用RDF列表。 OWSW中处理此类列表的典型方式是AKSW在其评论中链接到的文档中所描述的内容。也就是说,您定义了模仿RDF列表构造的类和属性:

ex:container42  onto:contains  [
    a  listonto:OWLList;
    listonto:hasElement  ex:element1;
    listonto:hasNext  [
        a  listonto:OWLList;
        listonto:hasElement  ex:element2;
        listonto:hasNext  [
            a  listonto:OWLList;
            listonto:hasElement  ex:element3;
            listonto:hasNext  listonto:emptylist
        ]
    ]
] .

这不是唯一的解决方案。也可以使用rdf:Seq(尽管很多人通常不建议使用)。同样,这不能在OWL DL中使用。但是,可以引入一种本体,它部分地模仿rdf:Seq的工作方式:

ex:container42  onto:contains  [
    a  seqonto:Sequence;
    seqonto:hasSlots
        [ a seqonto:Slot; seqonto:content ex:element1; seqonto:position 1 ],
        [ a seqonto:Slot; seqonto:content ex:element2; seqonto:position 2 ],
        [ a seqonto:Slot; seqonto:content ex:element3; seqonto:position 3 ],
    seqonto:numberOfElements 3
] .

属性position及其编号用于模仿RDF词汇表中的属性rdf:_1rdf:_2等。标识最后一个插槽的其他方法可以是特殊的seqonto:lastSlot属性。请注意,ordered list ontology就是这样做的。

也许还有其他选择,可能涉及这里讨论的选择,但我认为它涵盖了大多数可能性。

答案 1 :(得分:1)

也许您可以在本文中找到部分答案:

P。 Ciccarese ans S. Peroni,集合本体论:在OWL 2 DL框架中创建和处理集合,2013 Source