使用HyperGraphQL检索父母和孩子

时间:2019-02-22 16:35:03

标签: tree graphql ontology

我正在使用go.owl查询包含Gene OntologyHyperGraphQL文件,以便检索给定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 {
        ...
        }
      }
    }
  }
}

但是我不知道该怎么做才能提取后代。

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轻松地上下移动,如上面的查询所示。

0 个答案:

没有答案