首页 > 解决方案 > Neosemantics:链接本体和标签属性图

问题描述

我正在尝试将 neo4j 中的现有标签属性图导出为 RDF,并尝试为此目的使用新语义,并且为了 PoC,我尝试将示例数据库与 Neo4j 桌面预装的电影数据集一起使用。

以下是我遵循的步骤

  1. 在此处使用密码参考创建本体
  2. 数据已经存在于 neo4j 桌面
  3. 初始化配置CALL n10s.graphconfig.init();

差不多就是这样。我很确定我错过了一些步骤,阅读文档可以给我一些提示,但我想在这里问一下以获得方向,以便加快速度。

我可以使用 :GET 访问本体http://localhost:7474/rdf/neo4j/onto

@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

<neo4j://graph.schema#WROTE> a owl:ObjectProperty;
  rdfs:range <neo4j://graph.schema#Movie>;
  rdfs:domain <neo4j://graph.schema#Person>;
  rdfs:label "WROTE" .

<neo4j://graph.schema#RANGE> a owl:ObjectProperty;
  rdfs:range <neo4j://graph.schema#Class>;
  rdfs:domain <neo4j://graph.schema#ObjectProperty>;
  rdfs:label "RANGE" .

<neo4j://graph.schema#ACTED_IN> a owl:ObjectProperty;
  rdfs:label "ACTED_IN";
  rdfs:domain <neo4j://graph.schema#Person>;
  rdfs:range <neo4j://graph.schema#Movie> .

........

我可以像这样使用 Cypher 针对本体验证标签属性图

// DatatypeProperty domain semantics meta-rule
MATCH (n:Class)<-[:DOMAIN]-(p:DatatypeProperty) 
WITH DISTINCT n.uri as classUri, n.label as classLabel, p.uri as prop, p.label as propLabel
MATCH (x) WHERE  x[propLabel] IS NOT NULL AND NOT classLabel IN labels(x)
RETURN  id(x) AS nodeUID, 
        'domain of ' + propLabel + ' [' + prop + ']' AS `check failed`,  
        'Node labels: (' + reduce(s = '', l IN Labels(x) | s + ' ' + l) + ') should include ' + classLabel AS extraInfo

但我不能做的是将数据作为 RDF 访问,例如

:POST /rdf/neo4j/cypher
{ "cypher" :"match (m: Movie)<-[:ACTED_IN]-(actor: Person) match (m)<-[:DIRECTED]-(director: Person) where m.title = 'The Matrix' RETURN m, actor, director", "format": "RDF/XML"}

返回空

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

</rdf:RDF>

任何指针将不胜感激。

谢谢

标签: neo4jrdf

解决方案


仅当您要将 RDF 数据存储到 Neo4j 中时才需要 GraphConfig,但如果您使用的是“本机”属性图,则不需要它。

你可以摆脱它运行call n10s.graphconfig.drop();

完成后,对 cypher/RDF 端点的 POST 请求应返回序列化为 RDF/XML 的预期结果


推荐阅读