我试图发明一种在关系数据上强加层次结构的语法。 (我目前正在使用关系数据库来存储它,但这与问题并不特别相关。)我使用的例子是Fédération Cynologique Internationale(世界犬组织),其中列出了犬种。他们的数据组织如下:
- 基本单位是品种。一个品种有:
- 十个小组中的一个
- 组内的一个部分(组有零到五个部分)
- 本节中的可选小节
- 一组可选的品种
- 一组(一至两个)原产地
- 品种有一组可选的子品种
我希望能够表达任何合理的"放置品种的结构。以下是使用基于正则表达式的语法的一些示例,具有以下解释:
-
完整结构
/组/(部分/(小节/)?)?地点/品种(/品种(/ subvariety)?)?
- 结构的顶层是组
- 如果论坛有任何
,则会在下一级别进行
- 如果该组包含子部分,则这些是子层次结构的下一级
- 根据结构
,地点是下一个,在组,部分或子部分中
- 品种按地点组织
- 如果该品种有品种,那么下一步
- 如果品种有子品种,那么接下来就是
-
按结构最小的组和地点列出。
/组/地点/(部分/)?品种(/品种)?
- 顶级是
组
- 地方进入群组
- 部分列在地方
- 品种列在其章节内(无论是否有分节)
- 如果品种有品种,则会列出
-
列出每个原籍地的群组
/地点/组/品种
醇>
选项:
- 基于正则表达式的东西,如上所述。这很有吸引力,但我不确定如何表达"如果它有一个,请将该品种放入一个部分,否则将其放入它所属的组中"而不是"将该品种放入其组中,无论该部分是什么,如果有的话#34;。
- XPath 2.0是可能的,但它需要我列举所有的可能性,如第一个例子所示:
(/组| /组/节| /组/部分/子部分)/地点/(品种|品种/多种|品种/品种/ subvariety)
这似乎不优雅。考虑地点是否是可选的,例如......
- 基于Linux / UNIX命令行语法的东西:
组[/部分[/小节]] /品种[/品种[/ subvariety]]
有任何建议或想法吗?