Neo4j:使用XSD实施架构

时间:2015-02-22 06:49:07

标签: java rest xsd neo4j views

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

我是图表数据库的新手,但我开始欣赏无模式方法。那里有很多项目已经吸收了很多非顺序数据,并且理解了所有非常酷的项目。

我遇到了一些要求,这些要求要求控制节点或边缘在给定特定标签的情况下可以具有哪些属性以及边缘可以给出其源节点和目标节点的标签的标签。架构也可能会发生变化 - 虽然不常见。

据我所知,标准做法是从应用程序本身控制架构,这对我来说似乎不应该是最佳实践。例如,来自Oracle的挑剔开发人员为应用程序创建视图以进行交互,然后将触发器应用于在应用程序尝试在视图上插入或更新时执行适当事务的视图。

我会在Neo4j中寻找一个类似的设备,因为我已经拥有了XSD文件,所以将它们简单地转储到一个文件夹中并将其用于强制执行的参考将会少得多。 / p>

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

谢谢!

1 个答案:

答案 0 :(得分:2)

这个工具不仅不存在,而且如果没有更多的工作来标准化neo4j中的XML存储方式,它甚至不可能存在。 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处理选项在图表中不重要,例如您是否关心忽略空白节点,严格与宽松的模式验证等等。
  4. 看,neo4j很棒但是如果你真的需要验证一堆XML文档,那么它可能不是你最好的选择,因为图形模型和XML的文档模型之间存在一些不匹配。可能的选项可能是在文档进入neo4j之前验证文档,或者只是想出一种合成XML文档的方法来自 neo4j中的内容,然后在结果超出图形时验证该结果数据库,作为XML文件。