簡體   English   中英

如何表示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(本體)表示形式:

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

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

代表該枚舉的最佳方法是什么?

如果您只想向人類讀者傳達含義,則可以選擇以下兩個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是為了“跟進” intermediate (從某種意義上來說),而intermediate是為了跟進basic那么這可能適用於您的情況。
  • rdf:Bag實例旨在向人類讀者傳達元素出現的順序並不重要。

請注意,如果您使用rdfs:Container這三個子類之一,則只需要替換上述三元組中的類表示術語即可。

2. RDF清單

rdfs:List實例旨在向人類讀者傳達“元素種類”的集合已關閉。 例如,這暗示着以后沒有其他人可以添加的第四種“元素種類”。 對於您的情況,從概念上講,這將是以下三個方面:

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

我可以想到兩種表示枚舉的方法: 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)

這兩種方法都不允許您使用C型位域枚舉,這些枚舉可以像std::failbit|std::badbit那樣進行OR std::failbit|std::badbit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM