我有一个N-Triples的转储,我想将其转换为Cypher Text,这样它就可以直接加载到Neo4j数据库中。
对于像rdf-syntax-ns#type
这样的简单本体,我可以使用脚本轻松转换,即
<http://www.foo.org/triple1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.foo.org/Human>
可以轻松转换为
CREATE (t1:Human { type : "triple1" })
它准确无误,正如我所希望的那样。但是对于像<http://www.w3.org/2002/07/owl#equivalentProperty>
那样复杂的东西,它会变得愚蠢。
因此我的问题是如何使用<http://www.w3.org/2002/07/owl#equivalentProperty>
作为Cypher文本的谓词来转换任何三元组?
答案 0 :(得分:3)
有关如何将RDF导入Neo4J的一般问题,请参阅this related question。
具体来说,equivalentProperty
的东西,你在这里弄乱的原因是equivalentProperty
是一个引用模型本身的“元”语句;也就是说,在这种情况下,它正在声明属性而不是数据。在Neo4J中,您在数据库中没有明确的模型(我们希望这可能会随着时间的推移而改变,但现在就是这样)。所以你不能谈论一般的财产。可能最好的办法是创建一种代表该属性元数据的新节点。
E.g。如果你有RDF:
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#equivalentProperty> <http://my-ns.org/vocab#foobar>
然后你可以把它变成:
MERGE (p1:Property { ns: "http://www.w3.org/1999/02/22-rdf-syntax-ns#", name:"type" },
(p2:Property { ns: "http://my-ns.org/vocab#", name: "foobar" }),
(p1)-[:equivalentProperty]->(p2);
这是有效的原因是因为我们正在创建:Property
节点,使属性元数据成为现实。你没有默认使用neo4j,而在RDF中,由于这些属性有自己的URI这一事实,它们是RDF中的“节点”。