1.1.3.2. Overview¶
This page is a reference to the entities of the WHG v4 data model and their properties. The model is
PLATO, the Place Attestation Ontology, as of PLATO
0.7.1
(doi:10.5281/zenodo.23060220; all versions: doi:10.5281/zenodo.21688313); the Introduction explains the ideas behind it. Each table gives the
JSON key used in PLATO JSON (the keys of PLATO’s JSON Schema, plato.schema.json) and the RDF
property in PLATO’s ontology, where they differ. Anything on this page that is WHG’s own practice
rather than PLATO’s is marked as such.
1.1.3.2.1. Core entities¶
erDiagram
%% Logical entity-relationship diagram of the WHG v4 data model, which is PLATO (https://w3id.org/plato).
%% Relationship labels are PLATO RDF properties. Attribute names are PLATO JSON keys where PLATO JSON has one,
%% otherwise PLATO RDF properties. The id attribute is the node's IRI (JSON @id). This is a model, not a storage layout.
%% The attestation bundle
ATTESTATION }o--|| SPATIAL_ENTITY : "attests_about"
ATTESTATION }o--o{ NAME : "attests_name"
ATTESTATION }o--o{ GEOMETRY : "attests_geometry"
ATTESTATION }o--o{ TIMESPAN : "attests_timespan"
ATTESTATION }o--o{ TYPE : "attests_type"
ATTESTATION }o--o{ PROPERTY_VALUE : "attests_property"
%% Relations, identity and meta-attestations
ATTESTATION }o--o| SPATIAL_ENTITY : "relates_to"
ATTESTATION }o--o| RELATION_TYPE : "has_relation_type"
ATTESTATION }o--o{ IDENTITY_RELATION : "attests_identity"
IDENTITY_RELATION }o--|| SPATIAL_ENTITY : "identity_subject"
IDENTITY_RELATION }o--|| SPATIAL_ENTITY : "identity_object"
ATTESTATION }o--o| ATTESTATION : "meta_attestation_about"
%% Provenance
ATTESTATION }o--o{ AUTHORITY : "sourced_by"
ATTESTATION ||--o{ CITATION : "has_citation"
CITATION }o--|| AUTHORITY : "cites"
ATTESTATION }o--o| CERTAINTY_LEVEL : "certainty_level"
ATTESTATION }o--o| CONTRIBUTOR : "contributed_by"
%% The five kinds of Authority
SOURCE ||--|| AUTHORITY : "subClassOf"
DATASET ||--|| AUTHORITY : "subClassOf"
PERIOD ||--|| AUTHORITY : "subClassOf"
RELATION_TYPE ||--|| AUTHORITY : "subClassOf"
CERTAINTY_LEVEL ||--|| AUTHORITY : "subClassOf"
SOURCE }o--o| DATASET : "partOf"
SOURCE }o--o| TIMESPAN : "source_timespan"
SOURCE }o--o| SOURCE : "derived_from"
PERIOD }o--o| TIMESPAN : "has_timespan"
TIMESPAN }o--o| PERIOD : "relative_to"
RELATION_TYPE }o--o| RELATION_TYPE : "broader_relation"
%% Gazetteers and gazetteer groups
GAZETTEER |o--o{ SPATIAL_ENTITY : "contains_entity"
GAZETTEER |o--o{ ATTESTATION : "contains_attestation"
GAZETTEER |o--o{ IDENTITY_RELATION : "contains_identity_relation"
GAZETTEER |o--o{ RELATION_TYPE : "declares_relation_type"
GAZETTEER }o--o{ GAZETTEER_GROUP : "member_of_group"
GAZETTEER }o--o| CONTRIBUTOR : "gazetteer_owner"
SPATIAL_ENTITY {
iri id "JSON @id"
string label "display label, not evidence"
array ccodes "ISO 3166-1 alpha-2, a finding aid"
string entityIdentifier
string namespace
}
ATTESTATION {
iri id "JSON @id"
float certainty "0.0 to 1.0"
string certaintyNote
boolean negated
iri sourceStance
boolean computed
int sequence "with MemberOf only"
iri formStatus
string notes
datetime created
datetime modified
}
NAME {
iri id "JSON @id, optional"
string toponym "required"
string language "BCP 47 tag"
string script "ISO 15924"
array nameType "toponym, chrononym, ethnonym, ..."
string romanized
string transliterationSystem
string ipa
string nameEmbedding "WHG uses 128-dimensional Symphonym vectors"
string sourceLabel
}
GEOMETRY {
iri id "JSON @id, optional"
json geojson "Point, LineString, Polygon and Multi forms"
string wkt
array reprPoint "longitude, latitude"
array bbox
string hull "WKT polygon"
iri role "Extent, FeaturePoint, RepresentativePoint, LabelAnchor, Itinerary"
array spatialPrecision "exact, approximate, uncertain, historical_approximate"
array precisionKm
string sourceCrs
string sourceLabel
}
TIMESPAN {
iri id "JSON @id, optional"
string startEarliest "ISO 8601 or signed year"
string startLatest
string endEarliest
string endLatest
string startPrecision "day, month, year, decade, century, era, geological_period"
string endPrecision
int precisionValue "years"
boolean openStart
boolean openEnd
string duration "xsd duration"
string label
iri periodoUri
string edtfString
string sourceLabel
}
TYPE {
iri id "the dataset's own, never the concept IRI"
iri identifier "the concept IRI, e.g. AAT or plato TypeRoute"
iri scheme
string schemeVersion
string label "required"
string sourceLabel
}
PROPERTY_VALUE {
iri property "property IRI in an external vocabulary"
string value
iri datatype
iri unit
iri valueType
string label
string sourceLabel
}
IDENTITY_RELATION {
string identityType "exactMatch, closeMatch, related, unspecified"
float certainty
string basis
}
CITATION {
string locator "p. 412, f. 12v"
iri attributionStatus
iri citationFunction "a CiTO property"
}
AUTHORITY {
iri id "JSON @id"
string authority_title "JSON title"
iri authority_uri "JSON uri"
string authority_version
string bibliographic_string "JSON citation"
iri license "dcterms license, JSON licence"
}
DATASET {
string publisher
}
PERIOD {
string period_label
iri period_periodo_uri
string spatial_coverage
}
RELATION_TYPE {
string relation_label
string inverse_label
string relation_domain
string relation_range
}
CERTAINTY_LEVEL {
string authority_title "certain, less certain, uncertain"
}
GAZETTEER {
iri id "JSON @id"
string title
string description
string version
string status "draft or published"
iri licence
array creator
}
GAZETTEER_GROUP {
iri id
}
CONTRIBUTOR {
iri id
string name
string orcid
string role
}
Fig. 1.11 Entity–relationship diagram for the WHG v4 data model.¶
The diagram is logical: it shows the entities of the model and the PLATO properties that link them,
not how WHG stores them. Relationship labels are PLATO’s RDF properties; attribute names are PLATO
JSON keys where PLATO JSON has one, and id is the node’s IRI (@id in JSON). WHG holds the model in PostgreSQL/PostGIS, with Elasticsearch for search.
1.1.3.2.2. At a glance¶
Entity |
PLATO class |
Role |
|---|---|---|
SpatialEntity |
|
A stable identity on which attestations converge |
Attestation |
|
A bundle of claims about one SpatialEntity, with its source, date and certainty |
Name |
|
A name form |
Geometry |
|
A location or extent |
Timespan |
|
When a claim applies, with uncertain bounds |
Type |
|
A classification, as one dataset uses it |
PropertyValue |
|
Any other attribute: a population, a valuation, a market day |
IdentityRelation |
|
A claim that two SpatialEntities are the same, or related |
Candidate |
|
A match suggested by software, awaiting review |
Authority |
|
What attestations rest on and are qualified by |
Citation |
|
One attestation’s use of one source, with a locator |
Gazetteer |
|
The workspace that holds contributed entities and attestations |
GazetteerGroup |
|
A group of Gazetteers |
Contributor |
|
The person, team or process that makes attestations |
1.1.3.2.3. SpatialEntity¶
A SpatialEntity is an entity whose identity is bound up with space: the point on which attestations from different sources, periods and contributors converge. It holds almost nothing of its own. Its names, locations, dates, types and relations are all attested.
JSON key |
RDF property |
Meaning |
|---|---|---|
|
(the node’s IRI) |
Its stable identifier |
|
|
A display label (required in JSON). A convenience: names come from attestations |
|
|
ISO 3166-1 alpha-2 codes of the modern countries it lies in or overlaps. A finding aid, not evidence |
|
|
An identifier other than its IRI: a project’s own record id, or an authority’s |
|
|
Whose identifier that is ( |
|
(nested; each maps to |
Its attestations, in a place-centric document |
|
|
Identity relations with it as subject |
WHG identifiers. Each WHG place record has a persistent identifier that resolves through
w3id.org, of the form https://w3id.org/whg/id/place:<source>:<id> (see
Identifiers and Citation).
1.1.3.2.3.1. What kind of thing a SpatialEntity is¶
The class does not say. What kind of entity a SpatialEntity is (a settlement, a region, an
administrative unit, a river, a route) is established by Type attestations (attests_type),
usually naming a concept in a vocabulary such as the Getty AAT. A classification is therefore a claim,
with a source, not an axiom.
Four kinds matter to a platform’s behaviour, and PLATO declares them as concepts in the scheme
plato:EntityKindScheme: plato:TypeRoute, plato:TypeItinerary, plato:TypeNetwork and
plato:TypeSegment. A Type attestation names one in its identifier, for example
"identifier": "https://w3id.org/plato#TypeRoute". WHG then draws a route from its ordered members,
works out an itinerary’s span, and may leave segments out of lists of places. See
Routes, Itineraries, Networks, Groups and Periods.
1.1.3.2.3.2. What is not a SpatialEntity¶
A period is an Authority (
plato:Period). Places are dated by Timespans, which may refer to a Period.A Gazetteer is a dataset (
dcat:Dataset) holding contributed SpatialEntities and their attestations, and a gazetteer group is a group of Gazetteers (plato:GazetteerGroup).A WHG place collection is a curatorial act, modelled as a Gazetteer whose attestations are about other gazetteers’ places: attributed to its curator, and shown on those places’ pages only if the curator declares them public. A place is in the collection when the collection holds an attestation about it, whether that carries an annotation or is the selection alone.
1.1.3.2.4. Attestation¶
An Attestation bundles claims about one SpatialEntity with the evidence for them. Its content is what it links to; the attestation itself carries metadata about the claim.
What it bundles
JSON key |
RDF property |
Target |
|---|---|---|
|
|
The SpatialEntity (exactly one). Implicit when nested in a place-centric document; not needed on a meta-attestation ( |
|
|
Names |
|
|
Geometries |
|
|
Timespans: when the claim applies |
|
|
Types |
|
|
PropertyValues |
|
|
At most one relation to another entity (below) |
|
|
IdentityRelations asserted together |
|
|
Another attestation, if this one comments on it |
About the claim
JSON key |
RDF property |
Meaning |
|---|---|---|
|
(the node’s IRI) |
Its stable identifier |
|
|
The Authorities it rests on |
|
|
Citations of sources, each with a |
|
|
Confidence, 0.0 to 1.0 |
|
|
The basis for that confidence |
|
|
Confidence as a word: a CertaintyLevel such as |
|
|
True when the source says what is bundled is not so |
|
|
How firmly the source asserts it: |
|
|
True when software worked it out from other data. Not evidence, and never imported as an attestation |
|
|
Position among the members of a route, itinerary or network, on a |
|
|
Status of the name form contributed: |
|
|
How often, and in what capacity, the form occurs in the source |
|
|
Free-text notes |
|
|
Who made it |
|
|
When it was made and last changed |
Relations. An item of relations has relatesTo (the target: another SpatialEntity, or the
IRI of a person, object or event described elsewhere), relationType (the IRI of a RelationType),
and optionally relatedLabel (a display name for a target outside the dataset) and relationLabel
(the source’s own wording, plato:source_label). PLATO’s relation types are listed in the
Introduction.
1.1.3.2.5. Name¶
A Name is a name form. Names are nodes of their own and may be shared by several attestations.
JSON key |
RDF property |
Meaning |
|---|---|---|
|
(the node’s IRI) |
Optional |
|
|
The name in its original script (required) |
|
|
A BCP 47 language tag: |
|
|
An ISO 15924 script code: |
|
|
What the name denotes: starter values |
|
|
A romanised form, for a name in another script |
|
|
The system used: |
|
|
Pronunciation in the International Phonetic Alphabet |
|
|
A vector for phonetic similarity search; format implementation-specific |
|
|
The name exactly as the source prints it, where |
|
(see Qualifying a facet) |
Certainty, fuzziness, transcription accuracy |
The status of a form (a headword, a preferred form, a reconstructed one) is not a property of the
Name: it is the attestation’s formStatus. nameType classifies what the name refers to, not the
status of the form.
WHG practice. WHG computes a phonetic embedding for each name with its Symphonym model, as a 128-dimensional vector, for Sounds-alike Search. It is derived by software from the name, not attested.
From PLATO’s example schemas/examples/place-centric-constantinople.json:
{
"toponym": "Βυζάντιον",
"language": "grc",
"script": "Grek",
"romanized": "Byzantion",
"transliterationSystem": "ISO 843",
"nameType": ["toponym"],
"sourceLabel": "Βυζαντίῳ"
}
1.1.3.2.6. Geometry¶
A Geometry is a location or extent. Like Names, Geometries are nodes of their own.
JSON key |
RDF property |
Meaning |
|---|---|---|
|
(the node’s IRI) |
Optional |
|
|
A GeoJSON geometry: |
|
|
The same as Well-Known Text (the form used in RDF, as a GeoSPARQL |
|
|
A representative point, |
|
|
|
|
|
A convex hull, as a WKT polygon |
|
|
What the geometry depicts: |
|
|
One or more of |
|
|
Uncertainty radius or radii, in kilometres |
|
|
The source’s coordinate reference system, e.g. |
|
|
The coordinates as the source prints them, before parsing |
|
(see Qualifying a facet) |
Certainty, fuzziness, relative location |
role says what a geometry locates; spatialPrecision says how well it is known. They are
independent.
Several geometries. PLATO JSON does not accept a GeoJSON GeometryCollection. Where sources
differ, or one source gives different geometries for different dates, record each as its own
geometry attestation, so that each keeps its source, dates and certainty. Where one source gives a
point and a polygon for the same thing, give both as geometries of that attestation, with their
roles.
From PLATO’s example schemas/examples/place-centric-constantinople.json:
{
"geojson": { "type": "Point", "coordinates": [28.94966, 41.01384] },
"reprPoint": [28.94966, 41.01384],
"sourceCrs": "EPSG:4326"
}
1.1.3.2.7. Timespan¶
A Timespan is the interval during which a claim applies. It uses a four-date model, so that uncertain beginnings and endings can be stated without inventing precision.
JSON key |
RDF property |
Meaning |
|---|---|---|
|
(the node’s IRI) |
Optional |
|
|
The window in which it began |
|
|
The window in which it ended |
|
|
Granularity of each bound: |
|
|
Numeric precision, in years |
|
|
True when a bound is deliberately unspecified, not merely unknown |
|
|
A length the source states, as an |
|
|
A human-readable name: “Byzantine period” |
|
|
A matching PeriodO period |
|
|
The same in Extended Date/Time Format |
|
|
The date exactly as the source writes it: “about 1841” |
|
(see Qualifying a facet) |
Certainty, fuzziness, or a date relative to a Period |
Dates are ISO 8601, or signed years of at least four digits: -0500 for 500 BCE, -12000 for
12,000 BCE. A bound that is not known is simply omitted.
From PLATO’s example schemas/examples/place-centric-constantinople.json:
{
"startEarliest": "-0440",
"endLatest": "-0420",
"startPrecision": "decade",
"endPrecision": "decade"
}
1.1.3.2.8. Type¶
A Type is a classification, as one dataset uses it.
JSON key |
RDF property |
Meaning |
|---|---|---|
|
|
The concept’s full IRI in a vocabulary: an AAT, Wikidata or GeoNames concept, an OpenStreetMap tag with its key ( |
|
|
A human-readable label (required) |
|
|
The source’s own category, before mapping |
|
|
The vocabulary, where the identifier does not name it (a project’s own list) |
|
|
The version of the vocabulary, where its terms change meaning between versions |
|
(the node’s IRI) |
This dataset’s own address for the Type, if it wants one. Never the concept’s IRI, which goes in |
|
(see Qualifying a facet) |
Certainty, fuzziness |
A Type node stands for one dataset’s use of a concept, so different datasets’ labels and scheme
versions never merge onto the shared concept. A source’s category that no vocabulary holds is
recorded with a label (and sourceLabel) alone, not a made-up code.
From PLATO’s example schemas/examples/place-centric-constantinople.json:
{ "identifier": "http://vocab.getty.edu/aat/300008347", "label": "inhabited place" }
1.1.3.2.9. PropertyValue¶
A PropertyValue is an attribute that is not a name, geometry, timespan or type: a population, a
valuation, an elevation, a market day. Its property is the IRI of a property in an external
vocabulary (a Wikidata property, say), with a value and optionally a datatype, unit,
valueType for a structured value, and sourceLabel. A figure from a statistical table is also a
W3C Data Cube observation (dataSet, dimensions, attributes, universe). The attestation’s
timespans date it. See figures on links for its use
on routes and networks.
1.1.3.2.10. Qualifying a facet¶
A Name, Geometry, Timespan, Type or PropertyValue can be qualified on its own, in JSON inside a
qualification object:
JSON key |
RDF property |
Meaning |
|---|---|---|
|
|
How sure we are of this value (epistemic) |
|
|
How vague the thing itself is: 0.0 crisp, 1.0 maximally vague |
|
|
A value given relative to something else: “near Lincoln”, “during the reign of Justinian” |
|
|
How faithfully, and how completely, a transcribed value renders the source |
|
|
The value was worked out by software, not given by a source |
Certainty and fuzziness are different: better evidence can raise certainty, but no evidence makes a vague frontier crisp.
1.1.3.2.12. Gazetteer and GazetteerGroup¶
A Gazetteer is a versioned workspace of SpatialEntities and attestations, owned by a contributor
or team. It defines its own SpatialEntities and may hold attestations about other gazetteers’
entities. In JSON it is the document’s gazetteer object:
JSON key |
RDF property |
Meaning |
|---|---|---|
|
(the node’s IRI) |
Its identifier |
|
|
|
|
|
Its owner |
|
|
The people or organisations to cite as its authors |
|
|
Its licence (required once published) |
|
|
Its version; a place is cited as its IRI plus this version |
|
|
|
|
|
For a frozen snapshot |
|
|
Discovery metadata |
In RDF a Gazetteer links to what it holds with plato:contains_entity (the SpatialEntities it
defines), plato:contains_attestation, plato:contains_identity_relation and
plato:declares_relation_type.
A GazetteerGroup groups Gazetteers; a Gazetteer belongs to one with plato:member_of_group.
PLATO JSON has no key for this; it is stated in RDF, or managed in WHG. See
Gazetteer groups.
1.1.3.2.13. Identity¶
An IdentityRelation says that two SpatialEntities are the same, or related. It is bundled in an
attestation (identities), which gives it a source, a contributor and a date, and it is one
attributed claim among many: WHG does not merge records or mint identifiers from it.
JSON key |
RDF property |
Meaning |
|---|---|---|
|
|
The two SpatialEntities |
|
|
|
|
|
Confidence in the claim |
|
|
The evidence or reasoning |
|
|
For an identity relation stated on its own, outside an attestation |
|
|
The Candidate it was confirmed from |
A consumer may chain exactMatch relations within one attestation only, never across attestations,
and never chains the other identity types. That two entities are not the same is an attestation
with negated: true bundling one exactMatch. From PLATO’s example
schemas/examples/place-centric-judgements.json (the notes are elided here):
{
"@id": "https://whgazetteer.org/example/attestation/newtons-distinct",
"negated": true,
"identities": [
{
"subject": "https://whgazetteer.org/example/entity/newton-on-the-hill",
"object": "https://whgazetteer.org/example/entity/newton-by-the-river",
"identityType": "exactMatch"
}
],
"citations": [
{
"source": {
"@id": "https://whgazetteer.org/example/source/editor-review",
"title": "Editor's review of the Newtons",
"authorityType": "source"
}
}
]
}
A Candidate (plato:Candidate) is a match suggested by software for a person to review, as in
reconciliation in Map your Data: plato:candidate_source, plato:candidate_candidate,
plato:similarity_score, plato:algorithm_version, plato:candidate_status (suggested,
confirmed, rejected), plato:generated_at and optionally plato:match_parameters. It is not a
claim until confirmed. WHG’s clusters of matching records are the results of queries, not part of the
model; accepting one is a single attestation bundling the exactMatch relations made.
1.1.3.2.14. Meta-attestations¶
A meta-attestation is an attestation about another attestation: meta in JSON, with
targetAttestation (plato:meta_attestation_about) and metaType (plato:has_meta_type), a
concept in plato:MetaTypeScheme:
Meta type |
The meta-attestation… |
|---|---|
|
asserts the target is incorrect |
|
gives further evidence for the target |
|
replaces the target with newer information |
|
gives more precise information than the target |
|
questions the target’s validity |
|
groups the target with related attestations |
|
holds a value derived from the target’s (a normalised form from an attested spelling) |
|
adds a remark about the target, in its |
|
is an alternative reading of the same evidence; at most one is right |
|
withdraws the target, which is kept only so earlier states can be reproduced |
A published gazetteer’s attestations are never deleted or changed; they are superseded or retracted.
From PLATO’s example schemas/examples/place-centric-judgements.json:
{
"meta": {
"targetAttestation": "https://whgazetteer.org/example/attestation/littleworth-bad-import",
"metaType": "https://w3id.org/plato#Retracts"
},
"sources": [
{
"title": "Batch import, 2026-09-01"
}
],
"created": "2026-09-02T10:00:00Z",
"notes": "Withdrawn by whoever made it. The state as of 1 September still shows the point; the state from 2 September on does not."
}
1.1.3.2.15. Contributors¶
A Contributor (plato:Contributor, a foaf:Agent and prov:Agent) is a person, team or
automated process that makes attestations: name, orcid, email, affiliation (an
plato:Organization, preferably identified by ROR), role, url and further identifiers. PLATO
recommends ORCID for persons. In v4, WHG requires an ORCID for every new contribution. Data
contributed before v4 keeps the attribution it already has, with or without an ORCID.
1.1.3.2.16. Lifecycle¶
Creation. A SpatialEntity is created with an identifier and a label; attestations build it out. Several contributors, in several gazetteers, can attest about the same entity.
Growth. New attestations add information; conflicting attestations coexist, each with its source and certainty.
Correction. While a gazetteer is a draft, its owner may edit it. Once it is published its attestations are append-only: a correction is a new attestation that supersedes the old one, and a withdrawal is a
plato:Retractsmeta-attestation. The state at any date can be reproduced.Citation. A place is cited as its identifier plus its gazetteer’s version.
1.1.3.2.17. Design rationale¶
Historical knowledge is contested, changes over time, varies in certainty, and matters only with its provenance. A model with one value per field loses the debate, the dates, the sources and the uncertainty. The attestation model keeps them: every claim is dated, sourced and qualified, and claims that disagree sit side by side.
The cost is complexity. There are more structures than in a flat record, and questions such as “what was this place called in 800 CE?” mean looking across attestations. WHG meets this in its interfaces and search index, which present simple views over the full model, and by keeping most properties optional.
PLATO builds on W3C PROV-O (attestations and SpatialEntities are prov:Entity), OWL-Time
(time:ProperInterval), GeoSPARQL (geo:Geometry), SKOS, DCAT, PeriodO and CiTO, and on the
experience of Linked Places Format, Pelagios and Pleiades.
1.1.3.2.18. Next steps¶
Introduction: the ideas behind the model.
Attestations & Relations: attestations in detail.
Vocabularies: the controlled vocabularies.
RDF Representation: the model as Linked Data.