Преобразование 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>
как предикат для шифровального текста?
1 ответ
Смотрите этот связанный вопрос для общих вопросов о том, как получить 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.