将 N 三元组转换为密码文本



我有一个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 文本?

有关如何将RDF引入Neo4J的一般问题,请参阅此相关问题。

具体来说equivalentProperty的东西,你在这里搞砸的原因是equivalentProperty是一个引用模型本身的"元"语句;也就是说,在这种情况下,它是关于属性而不是数据的陈述。 在 Neo4J 中,数据库中没有显式模型(我们希望这可能会随着时间的推移而改变,但现在就是这样)。 因此,您不能谈论一般的财产。 可能最好的办法是创建一种代表该属性元数据的新节点。

例如,如果你有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中的"节点"。

相关内容

  • 没有找到相关文章

最新更新