我正在创建一个 API,它使用额外的属性和助手来封装JPA对象。我不希望用户访问数据库,因为我必须为 API 的使用者提供某些查询功能。
我有以下内容:
Node1(w/ attributes) -- > Edge1(w/ attr.) -- > Node2(w/ attr.)
和
Node1(w/ attributes) -- > |
Node2(w/ attributes) -- > | -- > HyperEdge1(w/ attr.)
Node3(w/ attributes) -- > |
基本上 aNode
可以是某个type
,这将决定可用属性的种类。所以我需要能够根据不同的类型和属性来查询这些“路径”。
例如:从一个节点开始,找到一个路径typeA > typeB & attr1 > typeC
。
所以我需要做一些简单的事情,并且能够将查询编写为字符串,或者可能是构建器模式样式。
到目前为止,我所拥有的是一个访问者模式,它设置为遍历节点/边缘/超边缘,这允许进行某种查询,但这并不是很简单,因为您必须为新类型的查询创建一个新的访问者。
到目前为止,这是我的实现:
ConditionImpl hasMass = ConditionFactory.createHasMass( 2.5 );
ConditionImpl noAttributes = ConditionFactory.createNoAttributes();
List<ConditionImpl> conditions = new ArrayList<ConditionImpl>();
conditions.add( hasMass );
conditions.add( noAttributes );
ConditionVisitor conditionVisitor = new ConditionVisitor( conditions );
node.accept( conditionVisitor );
List<Set<Node>> validPaths = conditionVisitor.getValidPaths();
上面的代码执行了一个查询,检查起始节点是否有质量2.5
并且链接节点(子节点)没有属性。访问者执行 acondition.check( Node )
并返回一个布尔值。
我从哪里开始为更简单的图创建查询语言?注意:我没有使用现有图形库的选项,我将拥有数十万个节点,加上边..