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

How to represent an enumeration in RDF/XML?

我有这样的代码:

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

class Element {
    private ElementKind elementKind;

    /* ... */
}

我正在为此代码构建一个 RDF/XML (ontology) 表示:

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

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

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

我可以想到两种表示枚举的方法: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

一样进行 ORed 运算的 C 风格位域枚举

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

1。 RDFS 容器

rdfs:Container 的实例旨在向人类reader 传达其元素形成一个开放的collection。您是否正在处理 open collection 取决于是否存在第四个选项。对于您的情况,这在概念上相当于以下三元组:

〈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 的实例旨在向人类传达 reader容器中的元素是每个元素的替代品 其他。如果一个元素不能(在 同一时刻)有两种。
  • rdf:Seq 的实例是 旨在 向人类 reader 传达 元素的出现意义重大。这可能适用于您的情况,如果 complete 旨在 'follow-up' intermediate (某种意义上 词的)和 intermediate 的意思是 'follow-up' basic
  • rdf:Bag 的实例旨在向人类传达 reader表示元素出现的顺序不是 意义重大。

请注意,如果您使用 rdfs:Container 的这三个子类之一,您只需替换上述三元组中的 class-denoting 项。

2。 RDF 列表

rdfs:List 的实例旨在向 人 reader 传达 'element kinds' 的 collection 已关闭。例如,这意味着没有第四个 'element kind' 可以由其他人稍后添加。对于您的情况,这在概念上相当于以下三元组:

〈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〉