是否有一些数据结构或数据库可以处理路径表达式语句和路径表达式查询?

men*_*ics 5 database data-structures

我需要根据有孩子的东西来建模一个图形(或者可以看作是一个递归树,因为它通常是一个或少数个根):

a hasChildren (b, c)
b hasChildren (d, e)
c hasChildren (f, g)
d hasChildren (h, a)
Run Code Online (Sandbox Code Playgroud)

现在有隐含路径,a/c/f和递归路径:a/b/d/a/b/d/...

然后我需要通过路径表达式在图表上设置内容,包括它们的属性(这些路径有颜色:蓝色等)以及更改它们的子项 - 可能是删除/隐藏它们,或者添加新的子项.

通过路径表达,我的意思是这样的:

a/b/** -> color = "blue"
Run Code Online (Sandbox Code Playgroud)

意味着所有以a/b /开头的路径都具有属性color ="blue".因此,如果我查询a/b/d/a/b/d/a的颜色,它将返回蓝色.但是如果我只询问a的颜色,那么就没有了.

其他表达可能是:

**/d/h
a/b/[color="blue"]
a/**/h
Run Code Online (Sandbox Code Playgroud)

所以,这将用于发表声明.我需要类似的查询方式.我需要简单的查询,例如:

a/b/d
Run Code Online (Sandbox Code Playgroud)

更复杂的是:

a/**[color="blue"]  -- descendants that have attribute color = "blue". This could be infinite in recursive case so we can put a restriction on this type of query to have it make sense, like does such a path exist, or just return first one or something.
Run Code Online (Sandbox Code Playgroud)

此外,可以随时添加更多节点.

a hasChildren(b,c,x,y,z)

之后我需要查询以恰当地匹配所有语句.换句话说,我不能只运行查询并在所有结果上设置属性,因为它不适用于以后添加的新内容.

当然,我需要它非常快:)我将拥有1000个节点的顺序,1000个路径表达式语句,以及100,000个路径表达式的查询.

有什么东西可以很好地处理这类事情吗?

我查看了RDF/OWL类似的东西,但它似乎没有任何路径支持.

Dmi*_* B. 1

如果我正确理解你的问题,你正在谈论针对对象关系做出的推论进行查询。如果是这样,您需要查看 RDF 和 SPARQL http://www.w3.org/TR/rdf-sparql-query/以及整个语义内容领域。