Data Modeling Cookbook
This guide shows how the Global.Church ontology models core entity types. Each example includes Turtle (the native RDF syntax) and JSON-LD (for developers more comfortable with JSON).
The ontology namespace is https://ontology.global.church/core# (prefix gc:). All domain classes descend from W3C PROV-O types: prov:Agent, prov:Activity, or prov:Entity. Reference data uses SKOS without PROV-O parentage.
Modeling an Organization
A gc:Organization is a prov:Agent -- an entity that can act, make decisions, and bear responsibility. Organizations include churches, mission agencies, denominations, and networks.
Every organization must have a name and at least one organization type. Other properties (city, state, website, belief classification) are optional.
Turtle
Code
JSON-LD
Code
Key Points
rdfs:labelis the required display name (enforced by SHACL).gc:hasOrganizationTypelinks to a SKOS concept from the OrganizationTypeScheme (Church, MissionAgency, Denomination, Network, etc.).- Classification properties (
gc:hasBeliefClassification,gc:hasDenominationClassification) link to SKOS concepts in the production vocabularies graph. - Country uses ISO 3166-1 alpha-2 codes (e.g.,
"US","IN","NG").
Modeling a Church
A church body is dual-typed: it carries both gc:Organization (with gc:hasOrganizationType gc:OrgTypeChurch) and gc:EkklesiaCommunity — the persistent gathered community of believers. gc:EkklesiaCommunity is a sibling of gc:PeopleGroupCommunity under the shared gc:Community taxonomy (it is not a subclass of gc:Organization); the two types coexist on the same URI because a gathered church is both an organization-as-actor and a community-on-the-ground. The Ekklesia typing is inferred automatically from gc:OrgTypeChurch, so most data sources only need to assert the Organization side and let inference produce the Ekklesia triples.
A church body must declare one gc:hasEkklesiaForm (e.g. gc:FormLocalChurch, gc:FormHouseChurch, gc:FormRegionalChurch, gc:FormApostolicBand, gc:FormMissionalOrder) and realize at least one gc:EkklesiaSegment — the scoped slice through which engagement attestations and per-scope assessments attach. A typical single-site local church realizes one gc:Ekk-LocalBody-scoped segment.
Turtle
Code
Key Points
- The body carries
a gc:Organization, gc:EkklesiaCommunitytogether —gc:EkklesiaCommunityis a subclass ofgc:Community, not ofgc:Organization. Queries for?x a gc:Organizationstill return church bodies (because the Organization typing is asserted directly), and queries for?x a gc:EkklesiaCommunityreturn only gathered bodies. gc:hasEkklesiaFormselects fromgc:EkklesiaFormSchemeand is required by SHACL. Forms cover the structural variety of church bodies: local church, house church, regional / multi-site church, apostolic band, missional order. The Form is auto-defaulted togc:FormLocalChurchfor OrgTypeChurch bodies that don't assert one.gc:realizesEkklesiaSegmentlinks the body to agc:EkklesiaSegmentwhosegc:hasEkklesiaScopesays what slice of the body is in view (the whole body, a single campus, a country-scoped slice of a network). Engagement attestations and segment-scoped assessments hang off the segment, not the body directly.gc:servesPeopleGrouplinks a church to the people groups it intentionally serves (distinct fromgc:targetsPeopleGroup, which is automated geographic association).- Non-gathered organizations (mission agency, denomination, network, parachurch, coalition) stay as plain
gc:Organizationcarrying their own type tag — they get no Ekklesia facets, no segment, no Form, no Lifecycle.
Multi-site: Campus-as-Segment
A multi-site church is not modeled as several churches with a parent — it is one gc:EkklesiaCommunity body that realizes one rollup segment plus one gc:Ekk-LocalCampus-scoped segment per campus. Each campus-segment carries gc:campusName and gc:meetsAt a gc:Location venue (the precise physical address where that campus gathers).
Code
One directory record, N campuses, N venues — the rollup segment carries the cross-campus identity, the campus-segments carry the per-location detail. See the Ekklesia Model reference for the full pattern.
Church planting as a first-class lineage
A daughter body points at its sender via gc:wasSentFrom. For lightweight planting records that's all you need, and multi-hop ancestry walks via the SPARQL property-path gc:wasSentFrom+. When the sending event itself is the unit of record — with multiple participants (sending church, coaching parachurch, denominational underwriter) playing distinct roles — promote it to an n-ary gc:Commissioning activity with one gc:CommissioningParticipation per participant, each carrying its gc:organizationRole from gc:OrganizationRoleScheme (gc:RoleLead for the canonical sender, gc:RolePartner for coaches, etc.). The binary gc:wasSentFrom shortcut is materialized from the gc:Commissioning automatically, so lineage queries don't have to walk the n-ary structure. See Ekklesia Model → Commissioning for the full pattern.
Modeling an Engagement Attestation
A gc:EngagementAttestation is a dated declarative claim that an organization is engaging a particular scope. It is a prov:Entity — the fact of the claim — distinct from the underlying activity that produced it. Attestations are what the POST /v0/engagement-claims/submit endpoint creates.
An attestation carries its claiming organization (gc:claimingOrganization), the scope (gc:hasEngagementAccelerator, gc:claimedPeopleGroupName, gc:claimedCountryName), an gc:attestationStatus, and a gc:claimDate.
Turtle
Code
JSON-LD
Code
Key points
- An attestation is a claim, not an activity. The same organization may file multiple attestations over time as scope or status changes.
gc:hasEngagementAcceleratormay take either an accelerator-level concept (e.g.gc:AccPrayer) or a function-level concept (e.g.gc:FnBibleTranslation). See Engagement Accelerators.gc:fulfillsCommitmentmay optionally link the attestation to a priorgc:FulfillmentCommitment. See Needs & Commitments.- An attestation can be filed via the API (
POST /v0/engagement-claims/submit) or contributed as Turtle through a partner integration.
Modeling a People Group
A gc:PeopleGroup is a source-defined classification concept naming a people group under a governing scheme (Joshua Project, IMB, ROP3). Joshua Project bridge URIs follow the ROP3 + ISO country pattern (e.g. 110532-IN is the Shaikh classification scoped to India), so the example below combines classification properties and country-scoped assessment data on a single PG resource. Assessment metrics use the 3-block pattern: PeopleGroup + gc:Assessment + gc:AssessmentResult.
Turtle
Code
JSON-LD
Code
Key Points
- Identity vs. assessment separation. Descriptive properties (name, population, continent, language) live on the PeopleGroup. Assessment metrics (JP Scale, percent Christian, least reached) live on the AssessmentResult. This separation exists because different organizations can assess the same people group differently.
- HIS classification links. Four classification properties connect the people group to HIS registry SKOS concepts:
gc:hasPeopleClassification(ROP3),gc:hasLanguageClassification(ROL),gc:hasReligionClassification(ROR),gc:hasGeographyClassification(ROG). These serve as the cross-dataset join keys. - 3-block pattern. Both Joshua Project and IMB data follow this same structure. To query assessment data, always join through
gc:resultForPeopleGroup-- never expect assessment metrics directly on the PeopleGroup. owl:sameAslinks GC people group URIs to their source system URIs for cross-reference.
See also: the People Group Model reference page covers the four-layer shape (concept / collective / population segment / community), the 17 scope types, multi-source classification, population estimates, and reachedness assessment results.
Modeling Activity Reports
Ministry activities produce reports that capture outcomes. The ontology uses a 3-layer pattern: Plan (optional) → Activity → Report. This example shows a baptism activity and its report — the same pattern applies to gospel conversations and other ministry types.
Turtle
Code
Key Points
- Activity vs. report separation. The activity captures what happened (who, where, when, which people group). The report captures what was produced (number of baptisms, number of decisions, etc.). This follows the PROV-O Activity → Entity generation pattern.
gc:BaptismReportis a subclass ofgc:ActivityReport. Thegc:numberOfBaptizedproperty is specific to baptism reports (distinct fromgc:numberOfBaptizedBelievers, which is a community demographic ongc:EkklesiaCommunity).gc:GospelConversation+gc:GospelConversationReportfollow the same pattern for gospel sharing outcomes.- Inherited
gc:MinistryActivityproperties (people group, language, religion, location, contributors) apply to all activity subtypes — no need to redeclare them.
URI Patterns
The knowledge graph uses consistent URI patterns for all entities:
| Entity Type | URI Pattern | Example |
|---|---|---|
| Organization | https://data.global.church/org/{slug} | .../org/wycliffe |
| JP People Group | https://data.global.church/jp/pg/{ROP3}-{ROG3} | .../jp/pg/110532-IN |
| JP Assessment | https://data.global.church/jp/assessment/{ROP3}-{ROG3} | .../jp/assessment/110532-IN |
| JP Result | https://data.global.church/jp/result/{ROP3}-{ROG3} | .../jp/result/110532-IN |
| ROP3 People | https://data.global.church/his/rop3/{code} | .../his/rop3/110532 |
| ROL Language | https://data.global.church/his/rol/{iso639-3} | .../his/rol/urd |
| ROR Religion | https://data.global.church/his/ror/{code} | .../his/ror/M |
| ROG Geography | https://data.global.church/his/rog/{code} | .../his/rog/IN |
Next Steps
- SPARQL Quickstart -- query the data you now understand
- Contributing Linked Data -- submit your own data to the graph
- Data Quality and SHACL -- understand validation rules
