Xpath 对关系数据施加层次结构

Xpath 对关系数据施加层次结构,xpath,data-structures,hierarchical,Xpath,Data Structures,Hierarchical,我正试图发明一种语法,将层次结构强加给关系数据。(我目前正在使用一个关系数据库来存储它,但这与问题并不特别相关。)我使用的例子是(世界犬组织),它列出了狗的品种。它们的数据组织如下: 基本单位是一个品种。一个品种有: 十组之一 组内的一个部分(组有0到5个部分) 本节中的可选小节 一套可选的品种 一组(一到两个)起源地 变种有一组可选的子变种 我希望能够表达任何“合理”的结构,在其中放置的品种。以下是一些使用基于正则表达式的语法的示例,解释如下: 完整结构 /组/(节/(子节/)?)?地

我正试图发明一种语法,将层次结构强加给关系数据。(我目前正在使用一个关系数据库来存储它,但这与问题并不特别相关。)我使用的例子是(世界犬组织),它列出了狗的品种。它们的数据组织如下:

  • 基本单位是一个品种。一个品种有:
    • 十组之一
    • 组内的一个部分(组有0到5个部分)
    • 本节中的可选小节
    • 一套可选的品种
    • 一组(一到两个)起源地
  • 变种有一组可选的子变种
我希望能够表达任何“合理”的结构,在其中放置的品种。以下是一些使用基于正则表达式的语法的示例,解释如下:

  • 完整结构

    /组/(节/(子节/)?)?地点/品种(/品种(/子品种)??)

    • 结构的顶层是组
    • 如果组中有任何分区,则分区处于下一级别
    • 如果组包含子部分,则这些子部分是层次结构的下一级
    • 根据结构,位置在组、节或子节内
    • 品种是按地点组织的
    • 如果这个品种有品种,那么接下来就是这些品种
    • 如果一个品种有子品种,这些是下一个
  • 以最小结构按组和位置列出

    /群体/地点/(部门/)?品种(/品种)

    • 最高层是团队
    • 地点分组
    • 各部分在位置中列出
    • 品种列在其分区内(无论是否有分区)
    • 如果一个品种有一个品种,它将列在下一个
  • 列出每个原产地的组

    /地点/群体/品种

    • 排名第一
    • 地方内的群体
    • 群内繁殖
  • 选项:

    • 基于正则表达式的东西,如上所述。这很吸引人,但我不知道如何表达“如果有,就把这个品种放在一个区域,否则就把它放在它所属的群体中”,而不是“把这个品种放在它的群体中,不管这个区域,如果有的话”
    • XPath 2.0是一种可能性,但它需要我列举所有的可能性,就像第一个示例中的那样:

      (/group/group/section/group/section/SUBSION)/place/(品种/品种/品种/亚品种)
      这似乎不雅。考虑一下,如果地方是可选的,例如…
    • 基于Linux/UNIX命令行语法的东西:

      组[/节[/小节]]/品种[/子品种]]
    有什么建议或想法吗

  • 关于可能结构的几点意见
  • 层次结构不能真正应用于关系数据库(然后是数据)

    我试着把不同点放在这里:

    • 这就是你所描述的。它载着父母和孩子。旧数据库使用这个概念

    • 关系数据库使用不同的概念:由行(一组数据)和列(集合的每个组件)组成的表、关系(表之间的相同字段)和查询语言来进行选择、插入、更新和删除:SQL。SQL的力量在于他几乎无所不能,它是一种标准,每一种产品几乎都是兼容的

    然后,您可以使用关系数据库定义层次结构,但这取决于您(数据库不知道您的想法)

    例如:您可以创建父/子关系:

    品种:名称+索引+分部索引+地点索引

    分段:名称+索引+章节索引

    等等

    XPATH并不完全是一种层次结构,而是一种在XML文件中指定路径(用于选择)的语法

    但是,正如您所指出的,XML定义了分层类型的数据结构。

  • 关于你的需要
  • 它们没有完全定义

    我想:

    • 您想存储数据吗

    • 您已经考虑过层次结构

    • 它似乎是“只读”数据:一些字典、同义词表,而不是ERP:)

    • 数据量约为100或数千(狗品种),而不是数百万

    • 性能如何?当然不是很重要

    • 那个商店呢?用来保存数据的东西,也许还可以传输它们

    • 这样,简单的解决方案就是将XML结构存储在一个文件中
    您将能够存储和移动它

    您将能够使用简单的xpath检索数据,路径很容易理解,每个数据的文件也很容易理解

    但用代码修改它更为困难。如果您有一些修改,最好在文本文件中手动完成

    如果有多个层次结构,则必须有多个文件


    希望这对您的工作有所帮助

    我的经验是,当我的关系数据不适合一个清晰的层次结构时,是时候重新考虑我的方法了。通常我最终会意识到我其实并不需要层次结构。有没有什么方法可以不使用层次结构来解决问题?