将N-Triples转换为密文

时间:2014-12-23 20:04:08

标签: neo4j cypher n-triples

我有一个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文本的谓词来转换任何三元组?

1 个答案:

答案 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中的“节点”。