如何在Neo4j中使用类型层次结构?

thtygnil  于 2022-11-05  发布在  其他
关注(0)|答案(4)|浏览(139)

在Neo4j中有没有什么方法可以对类型层次结构进行建模?例如,如果我想构建一个汽车的类层次结构,我可能有一个基本类型“Car”,然后有扩展该类型的子类,如“SportCar”等。
我希望能够创建“SportCar”的示例,但运行一个查询来获取所有“Car“的示例。这可能吗?如果可以,技术是什么?
我想我尝试做的是创建一个“标签层次结构”--但我只是不认为neo4j支持这一点。

smdnsysy

smdnsysy1#

保罗,
首先,我建议您阅读“图形数据库”,这是一本免费的O'Reilly电子书,可在this link上获得。
作为一个快速的答案,有很多方法来做这类事情,最好的选择取决于你试图解决的问题。一种方法是构造一个“Car”节点,然后用一个类型化的关系将你的“SportCar”节点与“Car”节点关联起来,如

CREATE (m:Car)
MATCH (m:CAR) WITH m CREATE (n:SportCar)-[:IS_A]->(m)

并创建其他类型的汽车,同时将它们与Car节点相关联。
然后您可以通过

MATCH (m:Car)<-[:IS_A]-(n) RETURN n

你也可以在每个节点上放置Car和SportCar(以及LuxoCar等)标签,这只是许多方法中的两种。
恩典与平安,

ql3eal8s

ql3eal8s2#

至少有两种方法可以做到这一点:

1)为每个对象使用多个标签

CREATE(BMW325d:Car:PassengerCar:DieselCar)
CREATE(Porsche911:Car:SportsCar:...)

2)创建本体

第二种建模类层次结构的方法是使用本体。虽然Neo4j将数据建模为属性图,而本体更适合RDF三重存储,但仍有使用它们的方法。
您可以使用Protégé(开放源代码)创建本体,然后将本体保存在一个.owl-File中,并使用Plugin将其上传到Neo4j中,然后将Neo4j中的节点Assert到Protégé中创建的Metagraph中,here中描述了更详细的描述。

关于此主题的更多信息...

对于您的目的,RDF三元存储是一个有趣的选择,特别是如果您想添加语义到您的数据,如使用推理和继承。我建议仔细看看RDF三元存储,这也是图形-但他们存储数据在三元组(主体- predicate -对象),而不是节点和关系。顶部编织器是一个“易学”-工具开始使用它们。
尽管如此,我还是希望Property Graphs和RDF三元组存储之间差距会很快变小,因为这是一个权衡。所以在选择它们之前,你应该仔细地设置你对数据库的要求。
希望这对你有帮助。

velaa5lx

velaa5lx3#

所以我能想到的壁橱就是这个例子。
步骤1:创建汽车类型的类型层次结构。

create (c:CarType{Code:"Car"})
create (sc:CarType{Code:"SportCar"})
create (sc)-[:SubCarOf]->(c)

第2步:创建一个“SportCar”的示例,并记录(通过关系属性)它是“CarType”。

merge (sc:CarType{Code:"SportCar"})
create (i:SportCar)
create (i)-[:CarType]->(sc)

第3步:编写一个查询,查找所有从“Car”派生的“CarType“,以及任何仅属于“Car”类型的“CarType”,然后查找它们的示例。

match (c)-[:CarType]->(ct:CarType{Code:"Car"})
return c as Car
union
match (sct)-[:SubCarOf*]->(ct:CarType{Code:"Car"}), 
(c)-[:CarType]->(sct)
return c as Car
kgsdhlau

kgsdhlau4#

成分

你可以考虑用合成来代替继承。

CREATE (c0:Car:SportsCar {colour: "yellow", brand: "Bugatti", country: "France"}),
(c1:Car:LuxuryCar {colour: "red", brand: "Mercedes-Benz", country: "Germany"})
  • 查找所有Car
MATCH (c:Car) RETURN c;

  • 查找所有SportCar
MATCH (c:Car:SportsCar) RETURN c;

  • 查找所有LuxuryCar
MATCH (c:Car:LuxuryCar) RETURN c;

相关问题