Global.Church Developer Portal
For App Developers

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.


How We Model 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
@prefix gc: <https://ontology.global.church/core#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . <https://data.global.church/org/example-church> a gc:Organization ; rdfs:label "Example Community Church" ; gc:orgName "Example Community Church" ; gc:hasOrganizationType <https://data.global.church/vocabs/org-type/Church> ; gc:city "Denver" ; gc:state "CO" ; gc:country "US" ; gc:hasBeliefClassification <https://data.global.church/vocabs/belief/Christian> ; gc:hasDenominationClassification <https://data.global.church/vocabs/denomination/Baptist> .

JSON-LD

JSONCode
{ "@context": { "gc": "https://ontology.global.church/core#", "rdfs": "http://www.w3.org/2000/01/rdf-schema#" }, "@id": "https://data.global.church/org/example-church", "@type": "gc:Organization", "rdfs:label": "Example Community Church", "gc:orgName": "Example Community Church", "gc:hasOrganizationType": { "@id": "https://data.global.church/vocabs/org-type/Church" }, "gc:city": "Denver", "gc:state": "CO", "gc:country": "US", "gc:hasBeliefClassification": { "@id": "https://data.global.church/vocabs/belief/Christian" }, "gc:hasDenominationClassification": { "@id": "https://data.global.church/vocabs/denomination/Baptist" } }

Key Points

  • rdfs:label is the required display name (enforced by SHACL).
  • gc:hasOrganizationType links 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").

How We Model a Church

A gc:Church is a subclass of gc:Organization. Every church is also an organization, inheriting all organization properties. Church adds properties specific to local congregations: multi-campus status, community state, gathering state, and services information.

In the data, churches carry both a gc:Organization, gc:Church (explicit OWL class) and gc:hasOrganizationType gc:OrgTypeChurch (SKOS classification). The OWL class enables SHACL validation targeting; the SKOS concept enables multi-typing (a church can also be gc:OrgTypeMissionAgency).

Turtle

Code
@prefix gc: <https://ontology.global.church/core#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . <https://data.global.church/org/calvary-church-denver> a gc:Organization, gc:Church ; rdfs:label "Calvary Church" ; gc:orgName "Calvary Church" ; gc:hasOrganizationType <https://data.global.church/vocabs/org-type/Church> ; gc:city "Denver" ; gc:state "CO" ; gc:country "US" ; gc:website "https://calvarychurch.com"^^xsd:anyURI ; gc:isMultiCampus false ; gc:servicesInfo "Sunday 9:00am & 11:00am" ; gc:hasBeliefClassification <https://data.global.church/vocabs/belief/Christian> ; gc:hasDenominationClassification <https://data.global.church/vocabs/denomination/NonDenominational> ; gc:servesPeopleGroup <https://data.global.church/jp/pg/100004-US> .

Key Points

  • gc:Church is rdfs:subClassOf gc:Organization — queries for ?x a gc:Organization will also return churches.
  • Church-scoped properties: gc:isMultiCampus, gc:campusName, gc:servicesInfo, gc:hasCommunityState, gc:hasGatheringState.
  • gc:servesPeopleGroup links a church to the people groups it intentionally serves (distinct from gc:targetsPeopleGroup which is automated geographic association).
  • Other organization types (Mission Agency, Denomination, Network, etc.) remain SKOS-only — they don't have enough type-specific properties to warrant OWL subclasses.

How We Model an Engagement

An engagement connects an organization to a people group through an activity. This uses the PROV-O participation pattern:

  1. A gc:MinistryActivity (prov:Activity) represents the engagement work.
  2. The activity links to the people group via gc:engagesPeopleGroup.
  3. The organization is connected as the agent through a qualified association.

Turtle

Code
@prefix gc: <https://ontology.global.church/core#> . @prefix prov: <http://www.w3.org/ns/prov#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . <https://data.global.church/activity/wycliffe-quechua-2024> a gc:MinistryActivity ; gc:engagesPeopleGroup <https://data.global.church/jp/pg/110532-PE> ; prov:startedAtTime "2024-01-15"^^xsd:date ; prov:wasAssociatedWith <https://data.global.church/org/wycliffe> ; prov:qualifiedAssociation [ a gc:MinistryParticipation ; prov:agent <https://data.global.church/org/wycliffe> ; gc:participationRole gc:StrategyCoordinatorRole ; ] . <https://data.global.church/org/wycliffe> a gc:Organization ; gc:orgName "Wycliffe Bible Translators" . <https://data.global.church/jp/pg/110532-PE> a gc:PeopleGroup ; gc:peopleName "Quechua, Cusco" ; gc:country "PE" .

JSON-LD

JSONCode
{ "@context": { "gc": "https://ontology.global.church/core#", "prov": "http://www.w3.org/ns/prov#", "xsd": "http://www.w3.org/2001/XMLSchema#" }, "@id": "https://data.global.church/activity/wycliffe-quechua-2024", "@type": "gc:MinistryActivity", "gc:engagesPeopleGroup": { "@id": "https://data.global.church/jp/pg/110532-PE" }, "prov:startedAtTime": { "@value": "2024-01-15", "@type": "xsd:date" }, "prov:wasAssociatedWith": { "@id": "https://data.global.church/org/wycliffe" }, "prov:qualifiedAssociation": { "@type": "gc:MinistryParticipation", "prov:agent": { "@id": "https://data.global.church/org/wycliffe" }, "gc:participationRole": { "@id": "gc:StrategyCoordinatorRole" } } }

Key Points

  • The engagement is modeled as an activity, not a property on the organization. This lets you attach provenance (who recorded it, when, based on what evidence).
  • prov:qualifiedAssociation is the PROV-O pattern for attaching a role to a participation. The same person or organization can play different roles in different activities.
  • Activity roles (FieldWorker, Leader, Trainer, ChurchPlanter, etc.) describe a function performed -- they are data, not permissions.

How We Model a People Group

A gc:PeopleGroup represents a people-group-in-country (PGIC). Identity properties live directly on the people group. Assessment data uses the 3-block pattern: PeopleGroup + gc:Assessment + gc:AssessmentResult.

Turtle

Code
@prefix gc: <https://ontology.global.church/core#> . @prefix jp: <https://ontology.global.church/joshuaproject#> . @prefix prov: <http://www.w3.org/ns/prov#> . @prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . # Block 1: People Group (identity and classification) <https://data.global.church/jp/pg/110532-IN> a gc:PeopleGroup ; gc:peopleName "Shaikh" ; gc:country "IN" ; jp:population 172572000 ; jp:continent "Asia" ; jp:affinityBloc "South Asian Peoples" ; jp:peopleCluster "Shaikh" ; gc:hasPeopleClassification <https://data.global.church/his/rop3/110532> ; gc:hasLanguageClassification <https://data.global.church/his/rol/urd> ; gc:hasReligionClassification <https://data.global.church/his/ror/M> ; gc:hasGeographyClassification <https://data.global.church/his/rog/IN> ; owl:sameAs <https://joshuaproject.net/people_groups/110532/IN> . # Block 2: Assessment (provenance — who assessed, when) <https://data.global.church/jp/assessment/110532-IN> a gc:Assessment ; gc:assessedPeopleGroup <https://data.global.church/jp/pg/110532-IN> ; prov:wasAssociatedWith <https://data.global.church/org/joshua-project> ; prov:generatedAtTime "2026-01-15T00:00:00Z"^^xsd:dateTime . # Block 3: Assessment Result (metric values) <https://data.global.church/jp/result/110532-IN> a gc:AssessmentResult ; gc:resultForPeopleGroup <https://data.global.church/jp/pg/110532-IN> ; prov:wasGeneratedBy <https://data.global.church/jp/assessment/110532-IN> ; jp:jpScale 1 ; jp:percentChristian 0.0 ; jp:leastReached true ; jp:frontier true ; jp:primaryReligion "Islam" .

JSON-LD

JSONCode
[ { "@context": { "gc": "https://ontology.global.church/core#", "jp": "https://ontology.global.church/joshuaproject#", "prov": "http://www.w3.org/ns/prov#", "owl": "http://www.w3.org/2002/07/owl#", "xsd": "http://www.w3.org/2001/XMLSchema#" }, "@id": "https://data.global.church/jp/pg/110532-IN", "@type": "gc:PeopleGroup", "gc:peopleName": "Shaikh", "gc:country": "IN", "jp:population": 172572000, "jp:continent": "Asia", "gc:hasPeopleClassification": { "@id": "https://data.global.church/his/rop3/110532" }, "gc:hasLanguageClassification": { "@id": "https://data.global.church/his/rol/urd" }, "gc:hasReligionClassification": { "@id": "https://data.global.church/his/ror/M" }, "owl:sameAs": { "@id": "https://joshuaproject.net/people_groups/110532/IN" } }, { "@id": "https://data.global.church/jp/result/110532-IN", "@type": "gc:AssessmentResult", "gc:resultForPeopleGroup": { "@id": "https://data.global.church/jp/pg/110532-IN" }, "jp:jpScale": 1, "jp:percentChristian": 0.0, "jp:leastReached": true, "jp:frontier": true } ]

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:sameAs links GC people group URIs to their source system URIs for cross-reference.

How We Model Activity Reports

Ministry activities produce reports that capture outcomes. The ontology uses a 3-layer pattern: Plan (optional) → ActivityReport. This example shows a baptism activity and its report — the same pattern applies to gospel conversations and other ministry types.

Turtle

Code
@prefix gc: <https://ontology.global.church/core#> . @prefix prov: <http://www.w3.org/ns/prov#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . # The activity <https://data.global.church/activity/baptism-2026-03-01> a gc:BaptismActivity ; gc:engagesPeopleGroup <https://data.global.church/jp/pg/110532-IN> ; prov:wasAssociatedWith <https://data.global.church/org/example-church> ; prov:startedAtTime "2026-03-01"^^xsd:date ; gc:hasLanguageClassification <https://data.global.church/his/rol/urd> . # The report (outcomes) <https://data.global.church/activity/baptism-2026-03-01/report> a gc:BaptismReport ; prov:wasGeneratedBy <https://data.global.church/activity/baptism-2026-03-01> ; gc:numberOfBaptized 12 .

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:BaptismReport is a subclass of gc:ActivityReport. The gc:numberOfBaptized property is specific to baptism reports (distinct from gc:numberOfBaptizedBelievers, which is a community demographic on gc:ChurchCommunity).
  • gc:GospelConversation + gc:GospelConversationReport follow the same pattern for gospel sharing outcomes.
  • Inherited gc:MinistryActivity properties (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 TypeURI PatternExample
Organizationhttps://data.global.church/org/{slug}.../org/wycliffe
JP People Grouphttps://data.global.church/jp/pg/{ROP3}-{ROG3}.../jp/pg/110532-IN
JP Assessmenthttps://data.global.church/jp/assessment/{ROP3}-{ROG3}.../jp/assessment/110532-IN
JP Resulthttps://data.global.church/jp/result/{ROP3}-{ROG3}.../jp/result/110532-IN
ROP3 Peoplehttps://data.global.church/his/rop3/{code}.../his/rop3/110532
ROL Languagehttps://data.global.church/his/rol/{iso639-3}.../his/rol/urd
ROR Religionhttps://data.global.church/his/ror/{code}.../his/ror/M
ROG Geographyhttps://data.global.church/his/rog/{code}.../his/rog/IN

Next Steps

Last modified on