graphdl
Semantic graph definition language for modeling business domains
graphdl
GraphDL (Graph Definition Language) is a semantic modeling language for defining business domains using graph structures and triple patterns.
Quick Start
import { graph } from 'graphdl'
// Define graph schema
const schema = graph.define({
Business: {
owns: 'Brand',
employs: 'User',
sells: 'Product',
},
Brand: {
offers: 'Product',
targets: 'Audience',
},
Product: {
belongsTo: 'Category',
has: 'Review',
},
})
// Query using semantic triples
const brands = await schema.query($.Business.owns.Brand, {
subject: 'acme-inc',
})Semantic Triples
Basic Pattern
// Subject.Predicate.Object
$.Business.owns.Brand
$.User.has.Role
$.Product.belongsTo.CategoryChained Relationships
// Navigate multiple levels
$.Business.owns.Brand.sells.Product
// Get all products from business's brands
const products = await graph.traverse($.Business.owns.Brand.sells.Product, { businessId: 'acme-inc' })Schema Definition
import { defineSchema } from 'graphdl'
const schema = defineSchema({
entities: {
Business: {
properties: {
name: 'string',
industry: 'string',
founded: 'number',
},
relationships: {
owns: { target: 'Brand', cardinality: 'many' },
employs: { target: 'User', cardinality: 'many' },
},
},
Brand: {
properties: {
name: 'string',
logo: 'string',
},
relationships: {
ownedBy: { target: 'Business', cardinality: 'one' },
sells: { target: 'Product', cardinality: 'many' },
},
},
},
})Graph Queries
// Get direct relationships
const brands = await graph.related('business-id', 'owns')
// Get inverse relationships
const business = await graph.relatedOne('brand-id', 'ownedBy')
// Navigate graph
const employees = await graph.traverse($.Business.owns.Brand.employs.User, { businessId: 'acme-inc' })
// Query with filters
const products = await graph.query($.Brand.sells.Product, {
subject: 'brand-id',
where: { price: { gte: 50, lte: 200 } },
})Graph Operations
// Create relationship
await graph.relate('business-id', 'owns', 'brand-id')
// Remove relationship
await graph.unrelate('business-id', 'owns', 'brand-id')
// Update relationship metadata
await graph.updateRelation('business-id', 'owns', 'brand-id', {
since: '2020-01-01',
percentage: 100,
})Documentation
Related
- database - Graph storage
- schema.org.ai - Schema vocabulary
- sdk - SDK integration