有什么方法可以在Neo4j中对类型层次结构进行建模吗?例如,如果我想构建一个cars的类层次结构,我可能有一个"Car“的基类型,然后有一个子类来扩展它,比如"SportCar",等等。
我希望能够创建"SportCar“的实例,但是运行一个查询来获得所有的”Car“。这可能吗?如果是这样,技术是什么?
我想我要做的是创建一个“标签层次结构”--但我就是不认为neo4j支持这一点。
发布于 2014-07-21 19:49:19
保罗,
首先,我建议您阅读“图形数据库”,这是一本免费的O‘’Reilly电子书,可以在this link上找到。
作为对答案的快速尝试,有许多方法可以做这类事情,最好的选择取决于您试图解决的问题。一种方法是构造一个"Car“节点,然后将"SportCar”节点与具有如下类型关系的"Car“节点关联起来
CREATE (m:Car)
MATCH (m:CAR) WITH m CREATE (n:SportCar)-[:IS_A]->(m)
并创建其他类型的汽车,也将它们与汽车节点相关联。
然后你就可以找到所有的汽车
MATCH (m:Car)<-[:IS_A]-(n) RETURN n
您也可以只在每个节点上放置Car和SportCar (以及LuxoCar等)标签。这只是众多方法中的两种。
恩典与和平,
吉姆
发布于 2017-08-26 16:55:56
至少有两种方法可以做到这点:
1)每个object使用多个lables
CREATE(BMW325d:Car:PassengerCar:DieselCar)
CREATE(Porsche911:Car:SportsCar:...)
本体2)创建
建模类层次结构的第二种方法是使用本体。尽管Neo4j将数据建模为属性图和本体,但它们更适合RDF,但也有使用它们的方法。
您可以使用Protégé(开源)创建本体。然后将本体保存在.owl文件中,并使用此Plugin将其上传到Neo4j。之后,将Neo4j中的节点断言到在Protégé中创建的Metagraph。在here中描述了更详细的描述。
有关此主题的更多信息...
对于您的目的来说,RDF Triple Store是一个有趣的选择,特别是如果您想要向数据添加语义,比如使用推断和继承。我建议仔细看看RDF Triple store,它们也是图-但它们以三元组(主语-谓语-宾语)而不是节点和关系来存储数据。Top Braid Composer是一个“易于学习”的-tool,用于开始使用它们。
不过,我希望属性图和RDF三元组存储之间的差距很快就会缩小,目前这是一种权衡。因此,在选择其中一个之前,您应该仔细设置对数据库的要求。
希望这能有所帮助。
发布于 2014-07-21 21:03:43
所以我能想到的壁橱是这个例子。
步骤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“的任何"Car",然后查找这些实例。
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
https://stackoverflow.com/questions/24873067
复制相似问题