【问题标题】:Neo4j: Enforcing schema with XSDNeo4j:使用 XSD 执行模式
【发布时间】:2015-04-23 16:28:24
【问题描述】:

我想知道是否存在用于 Neo4j 的工具,它可以读取 XSD 文件并使用它在 Neo4j 上强制实施模式。

我是图形数据库的新手,但我开始欣赏无模式方法。有很多项目一直在注入大量非序列数据并理解这一切,这真的很酷。

我遇到了一些要求,这些要求要求控制节点或边可以赋予特定标签的哪些属性,以及边可以赋予其源节点和目标节点标签的标签。架构也可能发生变化 - 尽管不频繁。

据我了解,标准做法是从应用程序本身控制架构,在我看来这不应该是最佳做法。例如,来自 Oracle 的挑剔开发人员会为应用程序创建要与之交互的视图,然后在应用程序尝试在视图上插入或更新时将触发器应用于执行适当事务的视图。

我会在 Neo4j 中寻找类似的设备,并且由于我已经拥有 XSD 文件,因此将它们简单地转储到一个文件夹中并让它使用这些文件作为执行内容的参考会大大减少工作量。

这是我愿意自己写的东西,除非那里已经有一个图书馆。毕竟我有一份日常工作。 :)

谢谢!

【问题讨论】:

    标签: java rest xsd neo4j views


    【解决方案1】:

    这个工具不仅不存在,而且如果没有更多的工作来标准化 XML 在 neo4j 中的存储方式,它甚至不可能存在。 XML 模型和 neo4j 模型之间存在关键区别。

    this python application here可以将XML导入neo4j;文档,而不是模式。但就其实现方式而言,有很多事情需要牢记:

    1. 没有从 XML 元素/属性到 neo4j 节点/属性的明显映射。你会认为元素应该是节点、属性属性;但是更好的图形模型通常会有所不同。例如,XML 命名空间会成为很好的节点,因为它们连接到许多其他事物(例如命名空间中定义的所有元素),但通常它们是属性。也许命名空间应该是标签?也可能是一个合理的选择,除非那里没有标准答案。
    2. XML 树有顺序,顺序很重要;图表没有。假设您有一个带有 2 个子元素的 XML 元素,AB。在neo4j中,您可能有一个节点连接到其他两个节点,但您需要一种表达方式(可能通过关系属性)A在B之前。这在neo4j中当然是可行的,但据我所知没有协议怎么做。所以也许你选择一个sequence 属性,并给它一个整数值。似乎合理......但现在您的模式验证软件依赖于该设计选择。 Neo4j 中的 XML 以任何其他方式存储都不会验证。
    3. 有许多 XML 处理选项在模式验证中很重要,而在图表中并不重要,例如您是否关心忽略空白节点、严格与宽松的模式验证等等。

    看,neo4j 很棒,但如果您真的需要验证一堆 XML 文档,它可能不是您的最佳选择,因为图形模型和 XML 的 文档模型 之间存在一些不匹配。可能的选项可能是在文档进入 neo4j 之前对其进行验证,或者只是想出一种方法来合成 XML 文档 neo4j 中的内容,然后在结果超出图表时验证该结果数据库,作为 XML 文件。

    【讨论】:

    • 谢谢!这正是我想听到的。我不是在寻找 Neo4j 模块本身。更像是我可以在同一台机器上托管的连接器,因此我可以将 Neo4j 配置为仅在 localhost 上侦听。连接器将读取 XSD 并在将数据放入数据库之前验证数据(XML 或其他)。
    猜你喜欢
    • 2021-11-14
    • 2012-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多