#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 как не-ребро (как вы сами предложили).