{"schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","$id":"https://thedutchdirectory.com/schema/learning-graph/v1/schema.json","title":"Dutch Learning Graph Document","description":"Market map of Dutch-learning resources. Not a learner progress graph.","type":"object","required":["schema_version","generated_at","nodes","edges"],"additionalProperties":false,"properties":{"schema_version":{"const":"1.0.0"},"generated_at":{"type":"string","format":"date-time"},"publisher":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"url":{"type":"string","format":"uri"},"doctrine_url":{"type":"string","format":"uri"}}},"nodes":{"type":"array","items":{"$ref":"#/$defs/node"}},"edges":{"type":"array","items":{"$ref":"#/$defs/edge"}},"observations":{"type":"array","items":{"$ref":"#/$defs/observation"}},"meta":{"type":"object","additionalProperties":true,"properties":{"provider_count":{"type":"integer","minimum":0},"tutor_count":{"type":"integer","minimum":0},"verified_pro_count":{"type":"integer","minimum":0}}}},"$defs":{"cefr":{"type":"string","enum":["A0","A1","A2","B1","B2","C1","C2"]},"providerType":{"type":"string","enum":["school","university","tutor_platform","app","resource","community","exam","publisher","social","podcast","government","tutor"]},"goalId":{"type":"string","enum":["nt2","inburgering","business","conversation","academic","beginner","intensive","partner","kids","exam_prep"]},"nodeType":{"type":"string","enum":["Provider","Tutor","Exam","City","Region","Goal","CefrLevel","Platform","Signal"]},"edgeType":{"type":"string","enum":["TEACHES_LEVEL","SERVES_GOAL","LOCATED_IN","SERVES_ONLINE","PREPARES_FOR","LISTED_ON","OWNED_BY","ALTERNATIVE_TO","RECOMMENDED_WITH","NOT_FOR","VERIFIED_PRO","HAS_SIGNAL"]},"node":{"type":"object","required":["id","type"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Stable id, e.g. provider:babel-utrecht, tutor:preply-123, goal:nt2, cefr:B1"},"type":{"$ref":"#/$defs/nodeType"},"label":{"type":"string"},"provider_type":{"$ref":"#/$defs/providerType"},"slug":{"type":"string"},"url":{"type":"string"},"canonical_url":{"type":"string"},"city":{"type":"string"},"region":{"type":"string"},"score":{"type":"number"},"publisher":{"type":"string","description":"e.g. dutch_fluency when owned by DFL"},"disclosure":{"type":"string"},"cefr":{"type":"array","items":{"$ref":"#/$defs/cefr"}},"tags":{"type":"array","items":{"type":"string"}},"online":{"type":"boolean"},"in_person":{"type":"boolean"},"platform":{"type":"string","enum":["italki","preply"]},"verified_pro":{"type":"boolean"},"rating":{"type":["number","null"]},"lessons":{"type":"integer","minimum":0},"price_usd":{"type":["number","null"]},"price_kind":{"type":"string","enum":["trial","hour","unknown"]},"description":{"type":"string"},"extra":{"type":"object","additionalProperties":true}}},"edge":{"type":"object","required":["id","type","from","to"],"additionalProperties":false,"properties":{"id":{"type":"string"},"type":{"$ref":"#/$defs/edgeType"},"from":{"type":"string"},"to":{"type":"string"},"weight":{"type":"number"},"editorial":{"type":"boolean"},"note":{"type":"string"},"observed_at":{"type":"string","format":"date-time"}}},"observation":{"type":"object","required":["id","subject","kind","observed_at"],"additionalProperties":false,"properties":{"id":{"type":"string"},"subject":{"type":"string"},"kind":{"type":"string","enum":["price_usd","rating","lessons","online_flag","stub_name","scrape_batch"]},"value":{},"observed_at":{"type":"string","format":"date-time"},"source":{"type":"string"}}}}},"license":"CC BY 4.0","docs":"https://thedutchdirectory.com/graph"}