我試圖發明在關係數據上施加層次結構的語法。 (我目前使用關係數據庫來存儲它,但這與問題無關)。我使用的示例是Fédération Cynologique Internationale(世界犬組織),其中列出了狗的品種。他們的數據組織如下:在關係數據上實施分層結構
- 基本單位是一個品種。甲品種有:
- 一個十組
- 的組內的一個部分的(基團具有零到五段)
- 部分
- 一組可選的品種內可選的第
- 甲集(一到兩個)的原籍地
- 品種有一組可選的子簇的
我希望能夠表達放置品種的任何「合理」結構。下面是使用基於正則表達式語法一些實例中,用下面的解釋:
完整結構
/組/(部分/(小節/)?)處/品種(/品種(/? subvariety)?)?
- 該結構的頂層是組
- 部分在下一級別,如果組具有任何
- 如果組中包含的小節,這些是層級
- 地方的下一級接下來,組,部分或分段內,因結構
- 品種由地方
- 如果品種有品種組織,這些都是未來
- 如果一個品種有亞種,這些是下一個
按組和結構最小的名單列出。
/group/place /(section /)?品種(/品種)?
- 頂層是組
- 地方去組
- 節的地方
- 品種是其部分中列出中列出內(無論他們是否有一個小節)
- 如果一個品種有一個品種,它是下一個列表
列表組的每個原產地
/位/組/品種
- 排名第一
- 場所內組羣
選項中
- 基於正則表達式的東西,如上所述。這很有吸引力,但我不確定如何表達「如果這個品種有一個品種,否則將它放在它所屬的品種中」,而不是「把這個品種放到它的組中」,而不管部分,如果有的話「。
- XPath 2.0將是一種可能性,但它需要列舉所有可能性,如第一個示例所示:
(/ group |/group/section |/group/section/subsection)/ place /(品種/品種/品種/品種)
這似乎不雅觀。試想,如果地方是可選的,例如... - 東西基於Linux/UNIX命令行語法:
組[/條[/款] /品種[/品種[/ subvariety]
任何建議或想法?
我的經驗是,當我的關係數據將不適合一個漂亮的層次清晰,是時候重新考慮我的做法。通常我最終意識到我並不需要層次結構。有沒有什麼辦法可以解決你的問題而不使用層次結構? –