Scilake Lake API GraphQL

Unified access to Scilake's domain-specific graphs and enrichments.

Open GraphiQL

1. Overview

Scilake Lake API is a single GraphQL endpoint that exposes research products across domain-specific graphs (neuroscience, transport-maritime, transport-ccam, energy, cancer), plus graph‑specific enrichment entities (for example vehicle types, tissues, and techniques).

All GraphQL queries are served from /graphql. Use the GraphiQL UI at /graphql (GET) to explore the schema and run queries.

2. Selecting a graph

Every request must include a graphdb header to select the backend. Each configured value connects to a Neo4j or AvantGraph instance (both speak Bolt + Cypher). Canonical pilot graphs:

  • graphdb: neuroscience
  • graphdb: transport-maritime
  • graphdb: transport-ccam
  • graphdb: energy
  • graphdb: cancer

AvantGraph backends are also available as transport-ccam-ag, transport-maritime-ag, neuroscience-ag, energy-ag, and cancer-ag.

On large AvantGraph graphs (for example neuroscience-ag, energy-ag, and cancer-ag), prefer filters on getProducts rather than open-ended pagination.

In GraphiQL, set the header under “Headers”:

{ "graphdb": "transport-ccam" }

3. SKG-IF

The Lake API is aligned with the Scientific Knowledge Graph Interchange Format (SKG-IF), an interoperability framework for exchanging metadata about core scholarly entities and their relationships.

GraphQL types expose a curated subset of SKG-IF fields for everyday querying. When you need the canonical SKG-IF JSON-LD document rather than that simplified view, request skgif on core SKG-IF entities (e.g., Product, Topic, and Grant).

query SkgifExample { getProducts(page: 1, pageSize: 5) { id title skgif topics { name skgif } grants { title skgif } } }

4. Domain-specific enrichments

Each graph has its own enrichment entities connected to products; these entities are returned as part of the getProducts query, but can also be accessed through dedicated queries:

  • Energy (graphdb: energy or energy-ag): EnergyType, EnergyStorage, GeographicEntity — getEnergyTypes, getEnergyStorages, getGeographicEntities
  • Neuroscience (graphdb: neuroscience or neuroscience-ag): Technique, Species, UBERONParcellation, BiologicalSex, PreparationType — getTechniques, getSpecies, getUBERONParcellations, getBiologicalSexes, getPreparationTypes
  • Transport‑CCAM (graphdb: transport-ccam or transport-ccam-ag): CommunicationType, EntityConnectionType, LevelOfAutomation, ScenarioType, SensorType, VehicleType, VRUType — getCommunicationTypes, getEntityConnectionTypes, getLevelsOfAutomation, getScenarioTypes, getSensorTypes, getVehicleTypes, getVruTypes
  • Transport‑maritime (graphdb: transport-maritime or transport-maritime-ag): VesselType — getVesselTypes
  • Cancer (graphdb: cancer or cancer-ag): Disease, Drug, Protein, Gene — getDiseases, getDrugs, getProteins, getGenes

Each enrichment query checks that the graphdb header matches its pilot graph profile. Using the wrong graph returns an error (for example, getVesselTypes with transport-ccam requires transport-maritime).

5. Example queries

5.1 Products (all graphs)

This example returns the first page of products whose title contains “battery”, along with basic impact indicators.

query ProductsExample { getProducts( where: { product: { title: { contains: "battery" } } } page: 1 pageSize: 10 ) { id title productType citationCount popularity } }

5.2 Products filtered by technology and impact

This example uses the transport‑CCAM graph — set graphdb: transport-ccam or transport-ccam-ag in the request header. It returns products that (a) mention the technology “smart traffic signals” and (b) have a citation count greater than 2, using a combined AND filter.

query ComplexProductsExample { getProducts( where: { AND: [ { technology: { name: { equals: "smart traffic signals" } } }, { product: { citationCount: { gt: 2 } } } ] } page: 1 pageSize: 100 ) { id title productType impulse citationCount popularity technologies { localIdentifier name } } }

5.3 Products with domain-specific enrichments

Domain-specific entities are grouped under graphEnrichments on each product. This example uses the energy graph (graphdb: energy) to return products mentioning wind energy types, along with their linked enrichment entities.

query ProductsWithGraphEnrichments { getProducts( where: { energyType: { name: { contains: "wind" } } } page: 1 pageSize: 10 ) { id title graphEnrichments { energyTypes { localIdentifier name source } energyStorages { name } geographicEntities { name displayName } } } }

5.4 Transport‑CCAM – vehicle types

Lists vehicle types from the transport‑CCAM graph. Set graphdb: transport-ccam (Neo4j) or transport-ccam-ag (AvantGraph).

query VehicleTypesExample { getVehicleTypes( where: { name: { equals: "Motorcycle" } } page: 1 pageSize: 20 ) { localIdentifier name source } }

5.5 Cancer – diseases

This example shows how to search for diseases in the cancer graph whose name contains “breast”.

query DiseasesExample { getDiseases( where: { name: { contains: "breast" } } page: 1 pageSize: 20 ) { id name type } }