Как создавать исходные состояния с помощью базы данных графиков neoj4?

#graph #neo4j #rdf #semantic-web #n-quads

#График #neo4j #rdf #семантическая сеть #n-квадрациклы

Вопрос:

Я с нетерпением жду возможности использовать NeoJ4 для некоторых исследований. Однако сначала я должен проверить, может ли он делать то, что я хочу.

Я хотел бы построить график, который говорит :

 StatementID1 = Cannabidiol hasPositiveEffectOn ChronicPain
    StatementID1 isSupportedBy Study1
    StatementID1 isSupportedBy Study2
    StatementID1 isNotSupportedBy Study3
  

В NeoJ4 легко добавить свойства ключ: значение к взаимосвязи.

Трудность в том, что я хочу, чтобы Study1, 2, 3 были узлами. Чтобы они могли иметь собственный набор свойств.

Это можно сделать в triplestore, где каждая тройка имеет идентификатор, подобный «Statment1» здесь. Это вопрос добавления троек, где объект является другим тройным идентификатором.

 url:TripleID1 = url:Cannabidiol url:hasPositiveEffectOn url:ChronicPain
url:TripleID2 = url:TripleID1 url:isSupportedBy url:Study1
url:TripleID3 = url:TripleID1 url:isSupportedBy url:Study2
url:TripleID4 = url:TripleID1 url:isNotSupportedBy url:Study3
  

На данный момент я не могу найти, как это просто сделать в NeoJ4.

Я мог бы добавить DOI исследования в качестве свойства :

 Study 1 :
    DOI:123/123
  

Затем добавьте тот же DOI в ссылку :

 isSupportedBy:
    DOI:123/123
  

Поскольку DOI уникален, можно было бы выполнить несколько поисковых запросов. Однако это значительно усложнит задачу.

Есть ли более простой способ добиться этого?

Ответ №1:

Я полагаю, что это проблема с дизайном базы данных.

Будет ли модель узла / взаимосвязи, подобная приведенной ниже, соответствовать вашим данным и упростить ваши запросы?

Модель графической базы данных

Комментарии:

1. Это все, но поскольку Каннаидиол может оказывать положительное влияние на другие медицинские состояния, нам нужны 2 ссылки: Заявление -> Субъект и заявление -> объект. Еще одна проблема заключается в том, что могут быть исследования, в которых говорится, что каннабидиол оказывает положительное влияние на хроническую боль, и исследования, в которых говорится, что это не оказывает никакого эффекта. Итак, нам нужно указать также Statement -> HAS_POSITIVE_EFFECT , что невозможно, или дважды сохранить имя ссылки в свойствах statment. Это сложно…

2. Можно было бы сделать: Cannabidiol -> HAS -> Effect {type:positive} -> ON -> Хроническая боль. Затем мы можем добавить заявление, содержащее 3 ссылки: ТЕМА -> Каннабидиол, ЭФФЕКТ -> Effect, ОБЪЕКТ -> ChronicPain, и связанное с исследованиями…

3. Мы могли бы даже удалить узел statement, если узел Effect уникален для этого оператора. Тогда все узлы исследований будут указывать на узел эффекта.

4. @Thib Или даже связать :Object напрямую с :Statement . Это действительно зависит от данных, которые у вас есть (или планируете иметь), и запросов, которые вы ожидаете выполнить. И, если через некоторое время у вас появится модель получше, вы можете просто изменить ее (при условии, что не будет множества других вещей / людей, зависящих от базы данных, которая не меняется).

Ответ №2:

Neo4j не поддерживает ребра, идущие от ребра к узлу. Ребра всегда находятся между узлами. Итак, вам нужно будет преобразовать ваше ребро positiveEffect в узел (как предложено в ответе rickhg12hs) или смоделировать positiveEffect как не-ребро (как вы сами предложили).