Сайфер настроить путь вывода - PullRequest
0 голосов
/ 03 мая 2019

У меня есть следующий запрос в Cypher.

MATCH (n:Resource { uri: 'http://elite.polito.it/ontologies/dogont.owl#StateValue' }),(m:Resource { uri: 'http://elite.polito.it/ontologies/dogont.owl#Actuator'}), p=allShortestPaths((n)-[r*]-(m)) WHERE NONE(x IN NODES(p) WHERE x.uri='http://www.w3.org/2002/07/owl#Thing') RETURN p

Возвращает следующие результаты:

│[{"uri":"http://elite.polito.it/ontologies/dogont.owl#StateValue"},{},│
│{"uri":"http://elite.polito.it/ontologies/dogont.owl#realStateValue"},│
│{"uri":"http://elite.polito.it/ontologies/dogont.owl#realStateValue"},│
│{},{"uri":"http://www.w3.org/2001/XMLSchema#string"},{"uri":"http://ww│
│w.w3.org/2001/XMLSchema#string"},{},{"uri":"http://purl.org/goodrelati│
│ons/v1#serialNumber"},{"uri":"http://purl.org/goodrelations/v1#serialN│
│umber"},{},{"rdfs__comment":"All building things that can be controlle│
│d by domotic system","uri":"http://elite.polito.it/ontologies/dogont.o│
│wl#Controllable","rdfs__label":"Controllable"},{"rdfs__comment":"All b│
│uilding things that can be controlled by domotic system","uri":"http:/│
│/elite.polito.it/ontologies/dogont.owl#Controllable","rdfs__label":"Co│
│ntrollable"},{},{"rdfs__comment":"A mechanism that puts something into│
│ automatic action","uri":"http://elite.polito.it/ontologies/dogont.owl│
│#Actuator","rdfs__label":"Actuator"}]                                 │

В результате промежуточные узлы появляются дважды. Почему это происходит и как это предотвратить? Также на данный момент, relationships пустые, как можно заменить {} для relationships их type.

1 Ответ

1 голос
/ 03 мая 2019

Возвращенный путь состоит из серии отношений, и данные, возвращаемые для каждого отношения, фактически являются триплетом (начальный узел, отношение, конечный узел). Таким образом, конечный узел одного отношения снова появляется как начальный узел следующего отношения.

Если вы хотите просто получить отношения без узлов, вы можете использовать RELATIONSHIPS(p); и если вам просто нужны узлы без связей, вы можете использовать NODES(p).

А если вы хотите создать свои собственные списки путей без дублированных узлов, попробуйте это:

MATCH
  (n:Resource { uri: 'http://elite.polito.it/ontologies/dogont.owl#StateValue'}),
  (m:Resource { uri: 'http://elite.polito.it/ontologies/dogont.owl#Actuator'}), 
  p=allShortestPaths((n)-[*]-(m))
WHERE NONE(x IN NODES(p) WHERE x.uri='http://www.w3.org/2002/07/owl#Thing') 
RETURN REDUCE(s=[PROPERTIES(n)], r IN RELATIONSHIPS(p) | s + r + ENDNODE(r)) AS p
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...