如何在RDF / XML中表示枚举?

时间:2015-08-19 19:40:03

标签: xml rdf owl

我有这样的代码:

enum ElementKind {
    BASIC (0),
    INTERMEDIATE (1),
    COMPLETE (2);
}

class Element {
    private ElementKind elementKind;

    /* ... */
}

我正在为此代码构建RDF / XML(本体)表示:

<owl:Class rdf:about="#ElementKind">
    // how to define?
</owl:Class>

<owl:Class rdf:about="#Element">
</owl:Class>

表示枚举的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

如果您只想向人类读者传达意义,您可以选择以下两个RDF(S)选项之一:

1。 RDFS容器

rdfs:Container的实例旨在将传达给人类读者,其元素构成一个开放的集合。您是否正在处理开放收藏取决于是否存在第四种选择。对于您的情况,这在概念上相当于以下三元组:

〈ex:elementKind, rdf:type, rdfs:Container〉
〈ex:elementKind, rdf:_1,   ex:basic〉
〈ex:elementKind, rdf:_2,   ex:intermediate〉
〈ex:elementKind, rdf:_3,   ex:complete〉

如果您想传达更多人类意义,那么您可以选择RDFS容器的三个子类之一:

  • rdf:Alt的实例旨在向人类传达 读者容器中的元素是每个元素的替代品 其他。这将适用于你的情况,如果一个元素不能(在 同一时刻)有两种。
  • rdf:Seq的实例 旨在将传达给人类读者的顺序 元素的出现意义重大。这可能适用于您的情况 complete旨在跟进&#39; intermediate(在某种意义上说 ()intermediate旨在跟进&#39; basic
  • rdf:Bag的实例旨在向人类传达 读者元素出现的顺序不是 显著。

请注意,如果您使用rdfs:Container这三个子类中的一个,则只需要替换上述三元组中的类表示术语。

2。 RDF列表

rdfs:List的实例旨在向人类读者传达 元素种类的集合&#39;关闭了。例如,这意味着没有第四种元素&#39;以后可能会被其他人添加。对于您的情况,这在概念上相当于以下三元组:

〈ex:elementKind, ∊, rdf:List〉
〈ex:elementKind, rdf:first, ex:basic〉
〈ex:elementKind, rdf:rest, _:4〉
〈_:4, ∊, rdf:List〉
〈_:4, rdf:first, ex:intermediate〉
〈_:4, rdf:rest, _:5〉
〈_:5, ∊, rdf:List〉
〈_:5, rdf:first, ex:complete〉
〈_:5, rdf:rest, rdf:nil〉

答案 1 :(得分:1)

我可以想出两种表示枚举的方法:DisjointUnion方法和OneOf方法。

1)在DisjointUnion方法中,您将所有枚举常量表示为类E1, ..., En,并将枚举定义为这些类的不相交并集:

DisjointUnion(Enum,E1,...,En)

这个公理说明所有E1...En都是不相交的,Enum是它们的联合(因此Enum的每个实例都是一个Ei的实例)。

2)您可能让所有Ei成为不同的个体,并将Enum定义为这些人的联合:

EquivalentClasses(Enum,OneOf(E1,...,En)); AllDifferent(E1,...,En)

这两种方法都不允许您使用可以像std::failbit|std::badbit一样进行OR运算的C风格的位字段枚举