@prefix honoria: <https://id.honoria.co.uk/def/core/> .
@prefix skos:    <http://www.w3.org/2004/02/skos/core#> .
@prefix schema:  <https://schema.org/> .
@prefix dct:     <http://purl.org/dc/terms/> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd:     <http://www.w3.org/2001/XMLSchema#> .
@prefix prov:    <http://www.w3.org/ns/prov#> .
@prefix gaz:     <https://www.thegazette.co.uk/def/honours#> .

#################################################################
# Honoria core ontology
#
# Formalises the knowledge-graph model in docs/KNOWLEDGE-GRAPH.md
# as OWL. The concept schemes under /id (honours, ribbons,
# military-raf, service-number, topic) stay separate SKOS
# vocabularies; this file defines the CLASSES and PROPERTIES that
# connect instance data to those schemes.
#
# The hub class is honoria:Honour - one conferral of one award to
# one person, reified as a node so the citation, role, location,
# Gazette notice and provenance hang off the conferral, not the
# person. People, organisations and places reuse schema.org classes
# (the types the site's JSON-LD already emits); award types, topics
# and ribbons are skos:Concepts in the published schemes.
#
# Derived predicates (marked below) are not asserted by the
# exporter - they are materialised by RDFox rules in
# graph/honoria.dlog (currentLocation, succeededBy, multiHonour,
# withinOrder, inCounty).
#################################################################

<https://id.honoria.co.uk/def/core>
    a owl:Ontology ;
    owl:imports     <https://id.honoria.co.uk/def/honours-ontology> ;
    dct:title       "Honoria core ontology"@en ;
    dct:description "Classes and properties for the Honoria knowledge graph of UK honours: the reified Honour conferral and its links to people, award types, honours rounds, citations, topics, locations, organisations and Gazette notices."@en ;
    rdfs:seeAlso    <https://id.honoria.co.uk/def/honours> ,
                    <https://id.honoria.co.uk/def/honours-ontology> ,
                    <https://id.honoria.co.uk/def/ribbons> ,
                    <https://id.honoria.co.uk/def/topic> ,
                    <https://id.honoria.co.uk/def/core-shapes> ;
    dct:source      <https://github.com/tanyagray/honoria/blob/main/docs/KNOWLEDGE-GRAPH.md> ;
    owl:versionIRI  <https://id.honoria.co.uk/def/core/1.0> ;
    owl:versionInfo "1.0.0-draft" ;
    dct:modified    "2026-07-04"^^xsd:date ;
    dct:license     <https://creativecommons.org/licenses/by/4.0/> .

#################################################################
# Classes
#################################################################

honoria:Awardee
    a owl:Class ;
    rdfs:subClassOf schema:Person ;
    rdfs:label   "Awardee"@en ;
    rdfs:comment "A person who has received at least one UK honour. Every person in the Honoria graph is an Awardee; the class exists so person-level properties are stated of the honoured person rather than of people in general. Carries schema:name (the canonical name, gov.uk list verified against the Gazette), dct:identifier (the stable Honoria person id, e.g. pcpd3w7wz), schema:url (the person's Honoria page), schema:description and schema:image (Wikidata enrichment), owl:sameAs (the Wikidata entity - merged under equality reasoning) and schema:sameAs (the Wikipedia article), plus honoria:serviceNumber for military awardees and the derived honoria:occupation, honoria:currentLocation and honoria:multiHonour."@en .

honoria:Honour
    a owl:Class ;
    rdfs:label   "Honour"@en ;
    rdfs:comment "A single conferral of one award to one person in one honours round - the hub node of the graph. Reified (a node, not an edge) so the citation, role, location, Gazette notice and per-conferral provenance are first-class."@en ;
    rdfs:seeAlso schema:Role .

honoria:AwardEvent
    a owl:Class ;
    rdfs:subClassOf schema:Event ;
    rdfs:label   "Award event"@en ;
    rdfs:comment "A specific honours round, e.g. Birthday Honours List 2026. Identified by year + list type."@en .

honoria:Citation
    a owl:Class ;
    rdfs:label   "Citation"@en ;
    rdfs:comment "The verbatim official award-reason text, 1:1 with its Honour. The text is the official record; topics and occupations are Honoria-derived extractions from it and carry their own provenance."@en .

honoria:GazetteNotice
    a owl:Class ;
    rdfs:subClassOf schema:Article ;
    rdfs:label   "Gazette notice"@en ;
    rdfs:comment "The official London Gazette notice (or, pre-2016, the issue PDF supplement page) that gazetted the honour - the authoritative original publication source. Its node URI is the canonical Gazette URI; its short id is honoria:gazetteNoticeId, and its own publication date is schema:datePublished."@en .

honoria:GazetteIssue
    a owl:Class ;
    rdfs:subClassOf schema:PublicationIssue ;
    rdfs:label   "Gazette issue"@en ;
    rdfs:comment "A specific issue (and supplement) of the London Gazette. Its node URI is the canonical Gazette URL; its short id is honoria:gazetteIssueId (the issue number) and its own publication date is schema:datePublished. One award event spans several issues and supplements, notably BEMs in the section-B supplement. For pre-2016 conferrals sourced from issue PDF supplements, the issue is the honour's direct source."@en .

honoria:HonoursListFile
    a owl:Class ;
    rdfs:subClassOf schema:Dataset ;
    rdfs:label   "Honours list file"@en ;
    rdfs:comment "A published Cabinet Office honours list file (a gov.uk transparency CSV), identified by its download URL, with a text descriptor (schema:name), its gov.uk landing page (schema:url), licence and retrieval date. The sole source of recipient home locations."@en .

honoria:WebReference
    a owl:Class ;
    rdfs:subClassOf schema:WebPage ;
    rdfs:label   "Web reference"@en ;
    rdfs:comment "A generic web link about the person and/or their honour - external media, any website, or an internal Honoria story. Distinct from the official Gazette notice."@en .

honoria:Story
    a owl:Class ;
    rdfs:subClassOf honoria:WebReference, schema:Article ;
    rdfs:label   "Story"@en ;
    rdfs:comment "An editorial story published by Honoria about one or more recipients and their honours - the internal kind of web reference, identified by its honoria.co.uk URL. Carries schema:name (title), schema:abstract (summary), schema:articleSection (category), schema:keywords (tags), schema:author, schema:datePublished and schema:about (the honours round(s) it covers); references awardees via honoria:mentions (from metadata and body links), specific conferrals via honoria:covers, and other web resources via honoria:linksTo."@en .

honoria:Organisation
    a owl:Class ;
    rdfs:subClassOf schema:Organization ;
    rdfs:label   "Organisation"@en ;
    rdfs:comment "The employer or body in a recipient's role at the time of an award, as named in the Gazette notice or derived from the citation text."@en .

honoria:Occupation
    a owl:Class ;
    rdfs:label   "Occupation"@en ;
    rdfs:comment "A normalised occupation derived from the citation text or the Gazette job title, mapped to ESCO (skos:exactMatch) where a confident match exists."@en .

#################################################################
# Disjointness
#
# Declared here as OWL semantics; ENFORCED by the disjointClassRule
# in graph/honoria.dlog, because open-world OWL alone never flags a
# violation. The chief real-world catch is a wrong owl:sameAs merge
# pulling, say, a person and a place into one node via a bad
# Wikidata reconciliation.
#
# Cardinality constraints are deliberately NOT expressed as OWL
# functional properties: under the datastore's equality reasoning
# (noUNA, required for the Wikidata merges) they would silently
# MERGE conflicting values instead of reporting them. Cardinalities
# live in core-shapes.ttl (SHACL) and as flag rules in honoria.dlog.
#################################################################

honoria:Honour  owl:disjointWith schema:Person, schema:Place, schema:Organization, honoria:Citation, honoria:AwardEvent, honoria:Forfeiture .
honoria:Awardee owl:disjointWith schema:Place, schema:Organization, honoria:Citation .
honoria:GazetteNotice owl:disjointWith honoria:HonoursListFile .

honoria:Department
    a owl:Class ;
    rdfs:subClassOf schema:Organization ;
    rdfs:label   "Department"@en ;
    rdfs:comment "The government department, armed service or regiment recorded in the Gazette notice for a conferral (e.g. Ministry of Defence, Royal Navy, Scots Guards) - the body the honour was announced under, distinct from the recipient's employing organisation."@en .

honoria:Forfeiture
    a owl:Class ;
    rdfs:label   "Forfeiture"@en ;
    rdfs:comment "The revocation of a previously conferred honour, as published on the gov.uk forfeited-honours list. Carries the forfeiture date (honoria:forfeitedOn), the reason (honoria:forfeitureReason) and the honour annulled (honoria:forfeitedHonour); provenance via prov:wasDerivedFrom the published list."@en .

honoria:IngestionRun
    a owl:Class ;
    rdfs:subClassOf prov:Activity ;
    rdfs:label   "Ingestion run"@en ;
    rdfs:comment "A Honoria pipeline ingestion batch - the activity that fetched a set of Gazette issues into the database (prov:used the issues; prov:startedAtTime / prov:endedAtTime; honoria:rowCount records ingested). Completes the provenance chain from published source to graph."@en .

honoria:WikidataCandidate
    a owl:Class ;
    rdfs:label   "Wikidata candidate"@en ;
    rdfs:comment "A PROPOSED, not-yet-confirmed reconciliation between a Honoria awardee and a Wikidata entity that holds the same award (Wikidata P166), pending review. It links the person (honoria:candidatePerson) to the Wikidata entity (honoria:candidateEntity) and carries honoria:matchConfidence and honoria:matchEvidence; provenance via prov:wasDerivedFrom the reconciliation activity. Distinct from a CONFIRMED match, which is asserted directly as owl:sameAs from the awardee to the Wikidata entity. On review acceptance a candidate is promoted to that owl:sameAs; a rejected candidate is discarded."@en .

#################################################################
# Object properties: the conferral and its links
#################################################################

honoria:received
    a owl:ObjectProperty ;
    rdfs:label   "received"@en ;
    rdfs:domain  honoria:Awardee ;
    rdfs:range   honoria:Honour ;
    rdfs:comment "A person was awarded this honour. One person may hold many honours across years."@en .

honoria:recipient
    a owl:ObjectProperty ;
    owl:inverseOf honoria:received ;
    rdfs:label   "recipient"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   honoria:Awardee ;
    rdfs:comment "The person the honour was conferred on (inverse of received; materialised by rule)."@en .

honoria:awardType
    a owl:ObjectProperty ;
    rdfs:label   "award type"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   skos:Concept ;
    rdfs:comment "The class of honour (e.g. MBE) - a concept in the Honoria honours vocabulary at /id/honours."@en .

honoria:conferredIn
    a owl:ObjectProperty ;
    rdfs:label   "conferred in"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   honoria:AwardEvent ;
    rdfs:comment "The honours round the conferral was announced in."@en .

honoria:hasCitation
    a owl:ObjectProperty ;
    rdfs:label   "has citation"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   honoria:Citation ;
    rdfs:comment "The verbatim award-reason text for this conferral."@en .

honoria:topic
    a owl:ObjectProperty ;
    rdfs:label   "topic"@en ;
    rdfs:domain  honoria:Citation ;
    rdfs:range   skos:Concept ;
    rdfs:comment "A topic or sector derived by extraction from the citation text. Honoria analysis, not the official record - the derivation is recorded as provenance."@en .

honoria:occupation
    a owl:ObjectProperty ;
    rdfs:label   "occupation"@en ;
    rdfs:range   honoria:Occupation ;
    rdfs:comment "An occupation. Stated of a Citation, it is the occupation derived from that conferral's citation text (primary) or the Gazette job title (backup); stated of an Awardee, it is the person's occupation, projected from their conferrals by rule. Honoria analysis, not the official record - the derivation is recorded as provenance. The domain is deliberately open across Awardee and Citation."@en .

honoria:organisation
    a owl:ObjectProperty ;
    rdfs:label   "organisation"@en ;
    rdfs:domain  honoria:Citation ;
    rdfs:range   honoria:Organisation ;
    rdfs:comment "An organisation derived from the citation text, as distinct from the structured Gazette role captured by heldRoleAt. Honoria analysis - the derivation is recorded as provenance."@en .

honoria:sourcedFrom
    a owl:ObjectProperty ;
    rdfs:subPropertyOf prov:wasDerivedFrom ;
    rdfs:label   "sourced from"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:comment "The citable origin of the conferral record: a Gazette notice (digital, 2016+), a Gazette issue (pre-2016 PDF supplements), and/or the Cabinet Office honours list file it appeared in. An honour may have several sources - e.g. a Gazette notice for the conferral plus the CSV file that contributed the recipient's location and citation."@en .

honoria:gazettedAs
    a owl:ObjectProperty ;
    rdfs:subPropertyOf honoria:sourcedFrom ;
    rdfs:label   "gazetted as"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   honoria:GazetteNotice ;
    rdfs:comment "The original official publication of the honour in the London Gazette."@en .

honoria:publishedIn
    a owl:ObjectProperty ;
    rdfs:label   "published in"@en ;
    rdfs:domain  honoria:GazetteNotice ;
    rdfs:range   honoria:GazetteIssue ;
    rdfs:comment "The Gazette issue or supplement the notice appears in."@en .

honoria:announces
    a owl:ObjectProperty ;
    rdfs:label   "announces"@en ;
    rdfs:domain  honoria:GazetteIssue ;
    rdfs:range   honoria:AwardEvent ;
    rdfs:comment "The honours round this issue or supplement gazetted."@en .

honoria:heldRoleAt
    a owl:ObjectProperty ;
    rdfs:label   "held role at"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   honoria:Organisation ;
    rdfs:comment "The employer or body in the recipient's role at the time of the award, from the Gazette notice."@en .

honoria:department
    a owl:ObjectProperty ;
    rdfs:label   "department"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   honoria:Department ;
    rdfs:comment "The department, armed service or regiment the conferral was announced under in the Gazette notice."@en .

honoria:hasForfeiture
    a owl:ObjectProperty ;
    rdfs:label   "has forfeiture"@en ;
    rdfs:domain  honoria:Awardee ;
    rdfs:range   honoria:Forfeiture ;
    rdfs:comment "A forfeiture (revocation) of one of this person's honours."@en .

honoria:locatedIn
    a owl:ObjectProperty ;
    rdfs:label   "located in"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   schema:Place ;
    rdfs:comment "The recipient's recorded town or city as at this conferral - the canonical location assertion, sourced from the gov.uk list only (the Gazette carries no home address). Places form a schema:containedInPlace hierarchy: town/city (schema:City) within county (schema:AdministrativeArea) within country (schema:Country - England, Scotland, Wales, Northern Ireland); overseas towns sit directly within their canonical overseas country and are marked honoria:isOverseas. Towns carry geocoded schema:latitude / schema:longitude, and owl:sameAs to their Wikidata entities where reconciled (recovered from the Postgres semantic layer into the location registry); countries carry fixed Wikidata owl:sameAs. County-level Wikidata reconciliation remains open."@en .

honoria:coveredBy
    a owl:ObjectProperty ;
    rdfs:label   "covered by"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   honoria:WebReference ;
    rdfs:comment "A web reference about this specific award."@en .

honoria:mentionedIn
    a owl:ObjectProperty ;
    rdfs:label   "mentioned in"@en ;
    rdfs:domain  schema:Person ;
    rdfs:range   honoria:WebReference ;
    rdfs:comment "A web reference about the person."@en .

honoria:mentions
    a owl:ObjectProperty ;
    owl:inverseOf honoria:mentionedIn ;
    rdfs:label   "mentions"@en ;
    rdfs:domain  honoria:WebReference ;
    rdfs:range   honoria:Awardee ;
    rdfs:comment "An awardee this web reference or story references, whether named in its metadata or linked from its body content (inverse of mentionedIn; materialised by rule)."@en .

honoria:linksTo
    a owl:ObjectProperty ;
    rdfs:label   "links to"@en ;
    rdfs:domain  honoria:Story ;
    rdfs:range   honoria:WebReference ;
    rdfs:comment "A web resource the story links to in its body content - external announcements, sources and related pages, identified by their URLs."@en .

honoria:covers
    a owl:ObjectProperty ;
    owl:inverseOf honoria:coveredBy ;
    rdfs:label   "covers"@en ;
    rdfs:domain  honoria:WebReference ;
    rdfs:range   honoria:Honour ;
    rdfs:comment "A specific conferral this web reference or story is about (inverse of coveredBy; materialised by rule)."@en .

honoria:ribbon
    a owl:ObjectProperty ;
    rdfs:label   "ribbon"@en ;
    rdfs:domain  skos:Concept ;
    rdfs:range   skos:Concept ;
    rdfs:comment "Relates an honours award concept (/id/honours) to the ribbon worn with it (/id/ribbons); grades within an order share one ribbon."@en .

#################################################################
# Object properties: derived (materialised by graph/honoria.dlog)
#################################################################

honoria:currentLocation
    a owl:ObjectProperty ;
    rdfs:label   "current location"@en ;
    rdfs:domain  honoria:Awardee ;
    rdfs:range   schema:Place ;
    rdfs:comment "DERIVED - the person's newest per-conferral location, a convenience projection of the canonical Honour-level locatedIn statements."@en .

honoria:succeededBy
    a owl:ObjectProperty ;
    rdfs:label   "succeeded by"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   honoria:Honour ;
    rdfs:comment "DERIVED - the same person's next honour by conferral date (the promotion chain, e.g. MBE then OBE)."@en .

honoria:withinOrder
    a owl:ObjectProperty ;
    rdfs:label   "within order"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   skos:Concept ;
    rdfs:comment "DERIVED - the top-level order the conferral's award type belongs to, via the skos:broader chain in the honours vocabulary."@en .

honoria:inCounty
    a owl:ObjectProperty ;
    rdfs:label   "in county"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   schema:Place ;
    rdfs:comment "DERIVED - county rollup of the conferral's town via schema:containedInPlace."@en .

#################################################################
# Data properties
#################################################################

honoria:citationText
    a owl:DatatypeProperty ;
    rdfs:label   "citation text"@en ;
    rdfs:domain  honoria:Citation ;
    rdfs:range   xsd:string ;
    rdfs:comment "The verbatim citation wording - the official record, fixed at conferral."@en .

honoria:roleLabel
    a owl:DatatypeProperty ;
    rdfs:label   "role label"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   xsd:string ;
    rdfs:comment "The recipient's role as stated on the Gazette notice, verbatim, at the conferral level (e.g. \"lately Chair\"). A raw convenience string; the same fact is modelled richly - and attached to the PERSON with its own provenance - as a honoria:Role reached via honoria:heldRole. Prefer the Role node for person-level queries; roleLabel is the unparsed original."@en .

honoria:sourceText
    a owl:DatatypeProperty ;
    rdfs:label   "source text"@en ;
    rdfs:range   xsd:string ;
    rdfs:comment "The verbatim source text a record was parsed from, kept for provenance and re-derivation. Used for pre-2016 PDF-supplement recipients, whose single entry line carries the name, role and citation together (unlike a digital notice, where the Gazette supplies the role and citation as separate fields); the occupation/organisation extraction reads it when the parsed roleLabel is unreliable. Domain is left open across Honour and GazetteNotice."@en .

honoria:conferredOn
    a owl:DatatypeProperty ;
    rdfs:label   "conferred on"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   xsd:dateTime ;
    rdfs:comment "The canonical conferral date - the single temporal anchor for as-at-award statements. DERIVED, not a primary date: it is taken from the honour's primary source document (the Gazette notice's schema:datePublished, or the issue's for pre-2016 PDF conferrals). The authoritative publication date of EACH reporting document is carried by that document itself via schema:datePublished (the Gazette notice, the Gazette issue, and the gov.uk list file may each report the same conferral on a different date), so provenance of every date is explicit; conferredOn exists only so the hub node has one date to reason over."@en .

honoria:awardYear
    a owl:DatatypeProperty ;
    rdfs:subPropertyOf dct:date ;
    rdfs:label   "award year"@en ;
    rdfs:range   xsd:gYear ;
    rdfs:comment "The honours-list year - the year the list APPLIES to, which is not always the calendar year of the award-event date: New Year honours are published in late December of the preceding year, so a conferral gazetted 30 December 2007 has awardYear 2008. Derivation from conferredOn: for a new-year list, publication in December means year + 1; a birthday list takes the publication year as-is. Typed xsd:gYear (e.g. \"2008\"^^xsd:gYear) - it is a year, not a plain count - and declared a sub-property of dct:date so it is discoverable as a Dublin Core date; the honours-list semantics are why it is a named property rather than a bare dct:date. Stated BOTH of an AwardEvent (the round it identifies, alongside listType) and of each Honour conferred in it (denormalised so an honour's year can be read without joining through conferredIn). The domain is DELIBERATELY left open across the two, exactly as honoria:listType and honoria:isOverseas are: a rdfs:domain honoria:Honour would, under domain entailment, wrongly type every AwardEvent as a Honour - and honoria:Honour is owl:disjointWith honoria:AwardEvent, so that inference would make the graph inconsistent."@en .

honoria:listType
    a owl:DatatypeProperty ;
    rdfs:label   "list type"@en ;
    rdfs:range   xsd:string ;
    rdfs:comment "Which list within the year: new-year or birthday."@en .

honoria:isOverseas
    a owl:DatatypeProperty ;
    rdfs:label   "is overseas"@en ;
    rdfs:range   xsd:boolean ;
    rdfs:comment "Stated of a Honour, the conferral appeared on the overseas list; stated of a Place, the location lies outside the United Kingdom. The domain is deliberately open across Honour and Place."@en .

honoria:publicationKind
    a owl:DatatypeProperty ;
    rdfs:label   "publication kind"@en ;
    rdfs:range   xsd:string ;
    rdfs:comment "How the conferral was sourced: gazette-notice (digital notice), gazette-pdf (issue PDF supplement) or csv (gov.uk list only, no Gazette record found)."@en .

honoria:retrievedAt
    a owl:DatatypeProperty ;
    rdfs:label   "retrieved at"@en ;
    rdfs:range   xsd:dateTime ;
    rdfs:comment "When Honoria fetched the source document (Gazette issue PDF or honours list file) - the retrieval half of the provenance envelope."@en .

honoria:serviceNumber
    a owl:DatatypeProperty ;
    rdfs:label   "service number"@en ;
    rdfs:domain  honoria:Awardee ;
    rdfs:range   xsd:string ;
    rdfs:seeAlso <https://id.honoria.co.uk/def/service-number> ;
    rdfs:comment "The unique identifier issued to a member of the armed forces by their service - present in the content of the Gazette notice for military-division awards. Per-service format rules are described by the service-number vocabulary at /id/service-number."@en .

honoria:rank
    a owl:DatatypeProperty ;
    rdfs:label   "rank"@en ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   xsd:string ;
    rdfs:comment "The military rank the recipient held at the conferral (e.g. Lieutenant Colonel), from the Gazette notice's military:Rank/rankName - stated per conferral, so a later award can record a promotion."@en .

honoria:multiHonour
    a owl:DatatypeProperty ;
    rdfs:label   "multi honour"@en ;
    rdfs:domain  honoria:Awardee ;
    rdfs:range   xsd:boolean ;
    rdfs:comment "DERIVED - true if the person holds more than one honour."@en .

honoria:colourSource
    a owl:DatatypeProperty ;
    rdfs:label   "colour source"@en ;
    rdfs:comment "For a ribbon concept: how the ribbon artwork's colours were sourced (e.g. a Wikimedia Commons service ribbon image reached via Wikidata P2425)."@en .

honoria:recipientCount
    a owl:DatatypeProperty ;
    rdfs:label   "recipient count"@en ;
    rdfs:domain  skos:Concept ;
    rdfs:range   xsd:integer ;
    rdfs:comment "The number of honours recipients associated with a theme or topic concept, as published in the site's SKOS theme scheme."@en .

honoria:forfeitedOn
    a owl:DatatypeProperty ;
    rdfs:label   "forfeited on"@en ;
    rdfs:domain  honoria:Forfeiture ;
    rdfs:range   xsd:gYearMonth ;
    rdfs:comment "The year and month the forfeiture was announced."@en .

honoria:forfeitureReason
    a owl:DatatypeProperty ;
    rdfs:label   "forfeiture reason"@en ;
    rdfs:domain  honoria:Forfeiture ;
    rdfs:range   xsd:string ;
    rdfs:comment "The published reason for the forfeiture (e.g. criminal conviction, bringing the honours system into disrepute)."@en .

honoria:forfeitedHonour
    a owl:DatatypeProperty ;
    rdfs:label   "forfeited honour"@en ;
    rdfs:domain  honoria:Forfeiture ;
    rdfs:range   xsd:string ;
    rdfs:comment "The honour annulled, as published on the forfeiture list (e.g. 'MBE 2016')."@en .

honoria:reconciliationConfidence
    a owl:DatatypeProperty ;
    rdfs:label   "reconciliation confidence"@en ;
    rdfs:domain  honoria:Awardee ;
    rdfs:range   xsd:string ;
    rdfs:comment "How confidently this person's award records were clustered into one identity: verified (anchored to a Wikidata entity), reconciled (multiple records clustered by name and place), or single-record (only one conferral, no clustering needed)."@en .

honoria:rowCount
    a owl:DatatypeProperty ;
    rdfs:label   "row count"@en ;
    rdfs:domain  honoria:IngestionRun ;
    rdfs:range   xsd:integer ;
    rdfs:comment "The number of records ingested by this pipeline run."@en .

# --- Special category data (Article 9 UK GDPR) -----------------------------
# Flags topic concepts (https://id.honoria.co.uk/def/topic) whose attachment to a
# person could reveal or concern a special category of personal data under
# Article 9 of the UK GDPR, so downstream consumers can apply the heightened
# protection it requires. honoria:specialCategoryData is a convenience boolean;
# honoria:specialCategory names which category/categories apply. A governance
# flag, not a legal determination.

honoria:SpecialCategory
    a owl:Class ;
    rdfs:label   "special category of personal data"@en ;
    rdfs:comment "A category of personal data given special protection by Article 9 of the UK GDPR."@en ;
    rdfs:isDefinedBy <https://www.legislation.gov.uk/eur/2016/679/article/9> ;
    rdfs:seeAlso <https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/lawful-basis/a-guide-to-lawful-basis/special-category-data/> .

honoria:specialCategoryData
    a owl:DatatypeProperty ;
    rdfs:label   "special category data"@en ;
    rdfs:domain  skos:Concept ;
    rdfs:range   xsd:boolean ;
    rdfs:comment "True when recognition described by this concept would reveal or concern any special category of personal data under Article 9 of the UK GDPR."@en ;
    rdfs:isDefinedBy <https://www.legislation.gov.uk/eur/2016/679/article/9> ;
    rdfs:seeAlso <https://ico.org.uk/for-organisations/uk-gdpr-guidance-and-resources/lawful-basis/a-guide-to-lawful-basis/special-category-data/> .

honoria:specialCategory
    a owl:ObjectProperty ;
    rdfs:label   "special category"@en ;
    rdfs:domain  skos:Concept ;
    rdfs:range   honoria:SpecialCategory ;
    rdfs:comment "The Article 9 special category of personal data this concept, attached to a person, could reveal or concern."@en ;
    rdfs:isDefinedBy <https://www.legislation.gov.uk/eur/2016/679/article/9> .

honoria:scdRacialEthnic       a honoria:SpecialCategory ; rdfs:label "racial or ethnic origin"@en .
honoria:scdPolitical          a honoria:SpecialCategory ; rdfs:label "political opinions"@en .
honoria:scdReligious          a honoria:SpecialCategory ; rdfs:label "religious or philosophical beliefs"@en .
honoria:scdTradeUnion         a honoria:SpecialCategory ; rdfs:label "trade union membership"@en .
honoria:scdHealth             a honoria:SpecialCategory ; rdfs:label "data concerning health"@en .
honoria:scdSexLife            a honoria:SpecialCategory ; rdfs:label "data concerning a person's sex life"@en .
honoria:scdSexualOrientation  a honoria:SpecialCategory ; rdfs:label "data concerning a person's sexual orientation"@en .

#################################################################
# Identifiers
#
# Every node's canonical URI is its LONG form; each carries a SHORT,
# scheme-typed literal id as well. The short id is the final path segment
# of the long URI (e.g. notice URI …/id/notice/2804207 → "2804207"), so
# the derivation is mechanical and reversible. These properties name the
# ISSUING SCHEME in the predicate, so a bare "2804207" is never ambiguous
# about whose identifier it is. All are sub-properties of dct:identifier,
# so a reasoning consumer still sees a plain dct:identifier; a triplestore
# with RDFS entailment (RDFox) materialises it.
#
# Wikidata is different: the canonical link is owl:sameAs to the wd:
# entity (which MERGES the nodes under the datastore's equality reasoning);
# honoria:wikidataId is the derived QID literal for convenience.
#################################################################

honoria:honoriaId
    a owl:DatatypeProperty ;
    rdfs:subPropertyOf dct:identifier ;
    rdfs:range   xsd:string ;
    rdfs:label   "Honoria id"@en ;
    rdfs:comment "The stable identifier minted and owned by Honoria, e.g. \"pcpd3w7wz\" for a person. Short form of the entity's canonical Honoria URI (its final path segment); frozen across pipeline runs so URLs never churn. Issued by Honoria."@en .

honoria:stableKey
    a owl:DatatypeProperty ;
    rdfs:range   xsd:string ;
    rdfs:label   "Stable key"@en ;
    rdfs:comment "The content-derived key identifying one conferral on one recipient across pipeline runs: the immutable Gazette notice id for a digital notice (\"n2938261\"), else a hash of the recipient's clean name, round, award and citation (\"c5a93721acf4a3b3b\"). Unlike the interim id it is NOT positional — csv-<round>-<row> moves when the CSV re-exports and pdf-<issue>-<seq> renumbers on every re-parse — so it is what a curation decision, notably a person split, should be keyed on if it is to survive a rebuild. Issued by Honoria."@en .

honoria:gazetteNoticeId
    a owl:DatatypeProperty ;
    rdfs:subPropertyOf dct:identifier ;
    rdfs:domain  honoria:GazetteNotice ;
    rdfs:range   xsd:string ;
    rdfs:label   "Gazette notice id"@en ;
    rdfs:comment "The London Gazette notice identifier, e.g. \"2804207\". Short form of the notice's canonical Gazette URI (https://www.thegazette.co.uk/id/notice/<id>), its final path segment. Issued by The Gazette (TSO), not Honoria."@en .

honoria:gazetteIssueId
    a owl:DatatypeProperty ;
    rdfs:subPropertyOf dct:identifier ;
    rdfs:domain  honoria:GazetteIssue ;
    rdfs:range   xsd:string ;
    rdfs:label   "Gazette issue number"@en ;
    rdfs:comment "The London Gazette issue number, e.g. \"61961\". Short form of the issue's canonical Gazette URI (https://www.thegazette.co.uk/London/issue/<id>). Issued by The Gazette (TSO), not Honoria."@en .

honoria:wikidataId
    a owl:DatatypeProperty ;
    rdfs:subPropertyOf dct:identifier ;
    rdfs:range   xsd:string ;
    rdfs:label   "Wikidata id"@en ;
    rdfs:comment "The Wikidata entity id (QID), e.g. \"Q23305549\", where an entity is reconciled to Wikidata. Short form of the Wikidata URI; the canonical semantic link is owl:sameAs to that URI (a node-merging equality), and this literal is the derived QID for convenience. Issued by Wikidata. May apply to a person, place, organisation or award concept."@en .

#################################################################
# Wikidata reconciliation
#
# Reference: a Wikidata entity recorded (by Wikidata P166) as holding a
# Honoria award concept - the candidate pool for reconciliation, kept
# separate from the Gazette conferrals. Candidate: a proposed, unreviewed
# awardee <-> Wikidata match. A CONFIRMED match is an owl:sameAs from the
# awardee to the Wikidata entity (see the Awardee comment); these terms
# support the reference pool and the review queue that precede it.
#################################################################

honoria:wikidataHeldAward
    a owl:ObjectProperty ;
    rdfs:range   skos:Concept ;
    rdfs:label   "Wikidata-held award"@en ;
    rdfs:comment "An award concept a Wikidata entity is recorded as having received, from Wikidata's P166 'award received' statement. Reference data used to reconcile Wikidata people to Honoria awardees - NOT an Honoria conferral (which is honoria:received of a honoria:Honour). Stated of the Wikidata entity; the object is the hon: award concept the P166 value maps to."@en .

honoria:candidatePerson
    a owl:ObjectProperty ;
    rdfs:domain  honoria:WikidataCandidate ;
    rdfs:range   schema:Person ;
    rdfs:label   "candidate person"@en ;
    rdfs:comment "The Honoria person a Wikidata candidate proposes to reconcile - the awardee's canonical stable-id node (a schema:Person identity node; the full honoria:Awardee facts, including honoria:received, are on the notice-anchored person it owl:sameAs, so the range is the broader schema:Person)."@en .

honoria:candidateEntity
    a owl:ObjectProperty ;
    rdfs:domain  honoria:WikidataCandidate ;
    rdfs:label   "candidate entity"@en ;
    rdfs:comment "The Wikidata entity a candidate proposes the awardee is the same as (proposed owl:sameAs target, not yet asserted). Optional for a Wikipedia-search candidate whose article has no wikibase_item."@en .

honoria:candidateArticle
    a owl:ObjectProperty ;
    rdfs:domain  honoria:WikidataCandidate ;
    rdfs:label   "candidate article"@en ;
    rdfs:comment "A Wikipedia article a candidate proposes describes the awardee, from a Wikipedia name search - the evidence for the proposed reconciliation (a proposed schema:sameAs target, not yet asserted). Present on candidates found via Wikipedia; the article may carry its own Wikidata entity (honoria:candidateEntity) and lead image (schema:image)."@en .

honoria:matchConfidence
    a owl:DatatypeProperty, owl:FunctionalProperty ;
    rdfs:domain  honoria:WikidataCandidate ;
    rdfs:range   xsd:decimal ;
    rdfs:label   "match confidence"@en ;
    rdfs:comment "A 0-1 confidence that a Wikidata candidate is a correct match, from the reconciliation heuristics (name, award and year agreement)."@en .

honoria:matchEvidence
    a owl:DatatypeProperty ;
    rdfs:domain  honoria:WikidataCandidate ;
    rdfs:range   xsd:string ;
    rdfs:label   "match evidence"@en ;
    rdfs:comment "A human-readable note of why a Wikidata candidate was proposed, e.g. the matching name, award and year, and whether the award QID had more than one same-named holder."@en .

#################################################################
# Divisions
#
# The division of an order under which an appointment was gazetted -
# Civil or Military. From the Gazette notice's inDivision. This is NOT
# the recipient's armed service or regiment (Royal Navy, Army, RAF): the
# Gazette records those alongside the division and they are the honour's
# honoria:department. Overseas/diplomatic appointments are Civil-division
# honours that also carry honoria:isOverseas.
#################################################################

honoria:Division
    a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label   "Division"@en ;
    rdfs:comment "A division of an order of chivalry - Civil or Military - recorded on the Gazette notice for an appointment."@en .

honoria:inDivision
    a owl:ObjectProperty ;
    rdfs:domain  honoria:Honour ;
    rdfs:range   honoria:Division ;
    rdfs:label   "in division"@en ;
    rdfs:comment "The division of the order under which this appointment was gazetted, from the Gazette notice. Distinct from honoria:department (the armed service or regiment the Gazette also records for military-division awards)."@en .

honoria:divisions
    a skos:ConceptScheme ;
    skos:prefLabel "Honours divisions"@en .

honoria:CivilDivision
    a honoria:Division, skos:Concept ;
    skos:inScheme  honoria:divisions ;
    skos:prefLabel "Civil Division"@en ;
    skos:closeMatch gaz:CivilDivision .

honoria:MilitaryDivision
    a honoria:Division, skos:Concept ;
    skos:inScheme  honoria:divisions ;
    skos:prefLabel "Military Division"@en ;
    skos:closeMatch gaz:MilitaryDivision .

#################################################################
# Roles
#
# The recipient's role or office as recorded in the Gazette notice for a
# conferral, e.g. "lately Chair, Electoral Commission". Reified and
# attached to the PERSON (honoria:heldRole) rather than left as a bare
# string on the conferral, so it carries its own provenance (the notice
# it was recorded in) and temporal anchor (the conferral). A role is
# time-bound - "lately Chair" is a past office - and a person's roles
# change, so each recorded role stands on its own without conflict.
#################################################################

honoria:Role
    a owl:Class ;
    rdfs:subClassOf schema:Role ;
    rdfs:label   "Role"@en ;
    rdfs:comment "A role or office a person held, as recorded in the Gazette notice for one of their conferrals. The verbatim wording is schema:roleName; the employing body, where identified, is honoria:atOrganisation; the conferral it was recorded at (its temporal anchor) is honoria:recordedAt; and its source is stated with prov:wasDerivedFrom the Gazette notice."@en .

honoria:heldRole
    a owl:ObjectProperty ;
    rdfs:domain  honoria:Awardee ;
    rdfs:range   honoria:Role ;
    rdfs:label   "held role"@en ;
    rdfs:comment "A role the person held, recorded in the Gazette notice at one of their conferrals. A person accrues one Role per conferral that states one; each carries its own date and source, so roles recorded at different awards coexist."@en .

honoria:atOrganisation
    a owl:ObjectProperty ;
    rdfs:domain  honoria:Role ;
    rdfs:range   honoria:Organisation ;
    rdfs:label   "at organisation"@en ;
    rdfs:comment "The organisation the role was held at, where the Gazette notice or citation identifies one."@en .

honoria:recordedAt
    a owl:ObjectProperty ;
    rdfs:domain  honoria:Role ;
    rdfs:range   honoria:Honour ;
    rdfs:label   "recorded at"@en ;
    rdfs:comment "The conferral at which this role was recorded - its temporal and provenance anchor. The role's date is that conferral's date; its source document is that conferral's Gazette notice (also stated directly with prov:wasDerivedFrom)."@en .
