Получить родителей и детей с помощью HyperGraphQL - PullRequest
0 голосов
/ 22 февраля 2019

Я запрашиваю go.owl файл, содержащий Онтологию гена , используя HyperGraphQL , чтобы найти родителей / предков и детей / потомков дающихGO id

Я мог бы найти родителей, используя запрос:

{
  Class_GET_BY_ID(uris:[
    "http://purl.obolibrary.org/obo/GO_0032259",
    "http://purl.obolibrary.org/obo/GO_0007267"]) {
    id
    label
    subClassOf {
      id
      label
      subClassOf {
        id
        label
        subClassOf {
        ...
        }
      }
    }
  }
}

, но я не знаю, как сделать то же самое для извлечения потомков.

The schema.graphql:

type __Context {
    Class:          _@href(iri: "http://www.w3.org/2002/07/owl#Class")
    id:             _@href(iri: "http://www.geneontology.org/formats/oboInOwl#id")
    label:          _@href(iri: "http://www.w3.org/2000/01/rdf-schema#label")
    subClassOf:     _@href(iri: "http://www.w3.org/2000/01/rdf-schema#subClassOf")
}

type Class @service(id:"go-local") {
    id: [String] @service(id:"go-local")
    label: [String] @service(id:"go-local")
    subClassOf: [Class] @service(id:"go-local")
}

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

В SPARQL мы можем получить родителя следующим образом:

GO:0000XYZ rdfs:subClassOf ?parent

И потомка:

GO:0000XYZ ^rdfs:subClassOf ?child
# or
?child rdfs:subClassOf obo:GO_0000XYZ .

Как вы видите, мы можем получить и то и другое, просто переключив запрос.способ сделать что-то подобное, используя GraphQL?

РЕДАКТИРОВАТЬ Чтобы прояснить мою проблему

Я знаю, что мы должны явно указать глубину / количество уровней, которые мы хотимдля извлечения с использованием GraphQL.

Это ограничение, с которым я сталкиваюсь здесь, заключается в том, что невозможно пройти по дереву какЯ могу подняться, используя superClassOf

Например, если мы представим, что у нас есть поле superClassOf, мы можем сделать это следующим образом:

{
  Class_GET_BY_ID(uris:["http://purl.obolibrary.org/obo/GO_0032259"]) {
    id
    label
    superClassOf {
      id
      label
      superClassOf {
        ...
      }
    }
  }
}

Кажется логичным, что это полене существует, так как это бесполезно, если мы используем SPARQL, поскольку мы можем легко перемещаться вверх и вниз, используя только subClassOf, как показано в запросе выше.

...