# Glossarist Ontology — Core
#
# IRI:    https://www.glossarist.org/ontologies/glossarist
# Prefix: gloss:
#
# An OWL ontology for the Glossarist concept model. Builds on and extends
# multiple ISO standards: ISO 10241-1 (terminology entries), ISO 30042/TBX
# (data exchange), ISO 12620 (data category registry), ISO 25964/SKOS
# (thesaurus interoperability), ISO 639/15924/24229 (language/script/system
# identifiers). Aligns with SKOS (concepts, labels, relationships), SKOS-XL
# (reified lexical labels for designations), ISO 25964 SKOS-Thes (hierarchical
# relationship subtypes, concept groups), PROV-O (source provenance), and
# Dublin Core Terms (language, bibliographic citation).
#
# Every class and property here has a direct correspondence to a field in the
# Glossarist YAML schema (schemas/v3/concept.yaml, localized-concept.yaml).
#
# Prefix bindings: see prefixes.ttl for the canonical SSOT. The declarations
# below must stay in sync with that file.

@prefix gloss:    <https://www.glossarist.org/ontologies/> .
@prefix owl:      <http://www.w3.org/2002/07/owl#> .
@prefix rdf:      <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:     <http://www.w3.org/2000/01/rdf-schema#> .
@prefix skos:     <http://www.w3.org/2004/02/skos/core#> .
@prefix skosxl:    <http://www.w3.org/2008/05/skos-xl#> .
@prefix iso-thes: <http://purl.org/iso25964/skos-thes#> .
@prefix dcterms:  <http://purl.org/dc/terms/> .
@prefix prov:     <http://www.w3.org/ns/prov#> .
@prefix vann:     <http://purl.org/vocab/vann/> .
@prefix xsd:      <http://www.w3.org/2001/XMLSchema#> .

<https://www.glossarist.org/ontologies/glossarist> a owl:Ontology ;
  rdfs:label "Glossarist Ontology"@en ;
  rdfs:comment """
    An OWL ontology for the Glossarist concept model. Builds on and extends
    multiple ISO standards: ISO 10241-1 (terminology entries), ISO 30042/TBX
    (data exchange), ISO 12620 (data category registry), ISO 25964/SKOS
    (thesaurus interoperability), ISO 639/15924/24229 (language/script/system
    identifiers).

    Design principles:
    - gloss:Concept rdfs:subClassOf skos:Concept — instant SKOS interop
    - gloss:Designation rdfs:subClassOf skosxl:Label — SKOS-XL pattern
    - Designations are separate named resources, linked via skosxl:prefLabel / skosxl:altLabel
    - Relationship subtypes reuse iso-thes: properties directly (broaderGeneric, etc.)
    - Source provenance uses prov:qualifiedDerivation
    - SKOS ConceptSchemes for all enumeration values (taxonomies/)
  """@en ;
  vann:preferredNamespacePrefix "gloss" ;
  vann:preferredNamespaceUri "https://www.glossarist.org/ontologies/" ;
  owl:imports <http://www.w3.org/2004/02/skos/core> ;
  owl:imports <http://www.w3.org/2008/05/skos-xl> ;
  owl:imports <http://purl.org/iso25964/skos-thes> ;
  owl:imports <http://www.w3.org/ns/prov#> ;
  dcterms:title "Glossarist Ontology"@en ;
  dcterms:description "OWL ontology for terminology management (ISO 10241-1, 30042, 12620, 25964/SKOS)."@en ;
  dcterms:license <https://creativecommons.org/licenses/by/4.0/> ;
  dcterms:created "2025-05-14"^^xsd:date .

# ══════════════════════════════════════════════════════════════════════════
# CLASSES
# ══════════════════════════════════════════════════════════════════════════

# ── Concept Management Layer ─────────────────────────────────────────────

gloss:Concept a owl:Class ;
  rdfs:subClassOf skos:Concept ;
  rdfs:label "Concept"@en ;
  rdfs:comment """
    A managed terminology concept — the top-level entity in Glossarist.
    Has status, dates, domains, related concepts, and localizations.
    Corresponds to ManagedConcept in glossarist-ruby.
  """@en .

gloss:ConceptCollection a owl:Class ;
  rdfs:subClassOf skos:Collection ;
  rdfs:label "Concept Collection"@en ;
  rdfs:comment """
    A managed collection of concepts (a glossary or register).
    Corresponds to ManagedConceptCollection in glossarist-ruby.
  """@en .

# ── Localization Layer ───────────────────────────────────────────────────

gloss:LocalizedConcept a owl:Class ;
  rdfs:subClassOf skos:Concept ;
  rdfs:label "Localized Concept"@en ;
  rdfs:comment """
    A concept in a specific language. Contains designations, definition,
    notes, examples, sources. Linked to its managed concept via
    gloss:isLocalizationOf.
    Corresponds to LocalizedConcept in glossarist-ruby.
  """@en .

# ── Designation Hierarchy (MECE) ─────────────────────────────────────────

gloss:Designation a owl:Class ;
  rdfs:subClassOf skosxl:Label ;
  rdfs:label "Designation"@en ;
  rdfs:comment """
    Abstract base for all designation types. A designation is both a
    gloss:Designation and a skosxl:Label. The skosxl:literalForm carries the
    designation text.
    Corresponds to Designation::Base in glossarist-ruby.
  """@en .

gloss:Expression a owl:Class ;
  rdfs:subClassOf gloss:Designation ;
  rdfs:label "Expression"@en ;
  rdfs:comment "A word or phrase used as a designation."@en ;
  owl:disjointWith gloss:Symbol .

gloss:Abbreviation a owl:Class ;
  rdfs:subClassOf gloss:Expression ;
  rdfs:label "Abbreviation"@en ;
  rdfs:comment """
    A shortened form of a word or phrase (acronym, initialism, or truncation).
  """@en .

gloss:Symbol a owl:Class ;
  rdfs:subClassOf gloss:Designation ;
  rdfs:label "Symbol"@en ;
  rdfs:comment "A non-letter symbol representing a concept."@en ;
  owl:disjointWith gloss:Expression .

gloss:LetterSymbol a owl:Class ;
  rdfs:subClassOf gloss:Symbol ;
  rdfs:label "Letter Symbol"@en ;
  rdfs:comment "A single letter used as a symbol."@en .

gloss:GraphicalSymbol a owl:Class ;
  rdfs:subClassOf gloss:Symbol ;
  rdfs:label "Graphical Symbol"@en ;
  rdfs:comment "An iconic or graphical symbol."@en ;
  owl:disjointWith gloss:LetterSymbol .

gloss:Prefix a owl:Class ;
  rdfs:subClassOf gloss:Designation ;
  rdfs:label "Prefix Designation"@en ;
  rdfs:comment "A prefix that attaches before a designation (ISO 12620)."@en ;
  owl:disjointWith gloss:Expression ;
  owl:disjointWith gloss:Symbol ;
  owl:disjointWith gloss:Suffix .

gloss:Suffix a owl:Class ;
  rdfs:subClassOf gloss:Designation ;
  rdfs:label "Suffix Designation"@en ;
  rdfs:comment "A suffix that attaches after a designation (ISO 12620)."@en ;
  owl:disjointWith gloss:Expression ;
  owl:disjointWith gloss:Symbol ;
  owl:disjointWith gloss:Prefix .

# ── Supporting Classes ───────────────────────────────────────────────────

gloss:Pronunciation a owl:Class ;
  rdfs:label "Pronunciation"@en ;
  rdfs:comment """
    A pronunciation or transcription entry for a designation.
    Supports IPA, romanization, and other transcription systems.
  """@en .

gloss:GrammarInfo a owl:Class ;
  rdfs:label "Grammar Information"@en ;
  rdfs:comment """
    Grammatical information about a designation: gender, number, part of speech.
  """@en .

gloss:DetailedDefinition a owl:Class ;
  rdfs:label "Detailed Definition"@en ;
  rdfs:comment """
    A definition, note, or example with optional per-item sources.
    Uses rdf:value for the text content.
  """@en .

gloss:ConceptSource a owl:Class ;
  rdfs:label "Concept Source"@en ;
  rdfs:comment """
    Bibliographic source with type (authoritative/lineage), status
    (identical/modified/...), and an origin citation.
  """@en .

gloss:Reference a owl:Class ;
  rdfs:label "Reference"@en ;
  rdfs:comment """
    A typed reference to an item within a collection. Used for domain
    classification (ManagedConceptData#domains) and typed references
    (ConceptData#references). For bibliographic citations, use gloss:Citation.
    For concept links in relationships, use gloss:ConceptRef.
  """@en .

gloss:RelatedConcept a owl:Class ;
  rdfs:label "Related Concept"@en ;
  rdfs:comment """
    A concept with a typed relationship (deprecates, broader, equivalent, etc.).
  """@en .

gloss:DesignationRelationship a owl:Class ;
  rdfs:subClassOf owl:Thing ;
  rdfs:label "Designation Relationship"@en ;
  rdfs:comment """
    A designation-level relationship between two designations of the same concept
    (ISO 10241-1). Unlike RelatedConcept (which links concepts by identifier),
    DesignationRelationship links designations by their text. Types include
    abbreviated_form_for and short_form_for.
  """@en .

gloss:ConceptDate a owl:Class ;
  rdfs:label "Concept Date"@en ;
  rdfs:comment """
    MANAGEMENT: A governance event in the concept or localization lifecycle.
    Types include acceptance, amendment, retirement, review, and review decision.
    Inspired by TBX <transactionGrp> (ISO 30042).
  """@en .

gloss:NonVerbalRepresentation a owl:Class ;
  rdfs:label "Non-Verbal Representation"@en ;
  rdfs:comment """
    Reference to an external image, table, or formula resource
    (ISO 10241-1 §6.5).
  """@en .


gloss:Citation a owl:Class ;
  rdfs:label "Citation"@en ;
  rdfs:comment """
    A bibliographic citation. The ref field is always a structured CitationRef
    hash (source + id + optional version). Never a plain string in V3.
    Used as the origin of ConceptSource.
    Corresponds to Citation in glossarist-ruby.
  """@en .

gloss:CitationRef a owl:Class ;
  rdfs:label "Citation Reference"@en ;
  rdfs:comment """
    Inner reference of a Citation — always a structured hash with source,
    id, and optional version. Never a plain string in V3.
    Corresponds to Citation::Ref in glossarist-ruby.
  """@en .

gloss:ConceptRef a owl:Class ;
  rdfs:label "Concept Reference"@en ;
  rdfs:comment """
    A reference to a concept in another registry or vocabulary.
    Has source, id, and optional text. No version, locality, or link.
    Used as the ref of RelatedConcept.
    Corresponds to ConceptRef in glossarist-ruby.
  """@en .

gloss:Locality a owl:Class ;
  rdfs:label "Locality"@en ;
  rdfs:comment "A locality within a cited document (section, clause, page, etc.)."@en .

# ── Dataset Register Layer ────────────────────────────────────────────────

gloss:DatasetRegister a owl:Class ;
  rdfs:label "Dataset Register"@en ;
  rdfs:comment """
    Self-describing dataset metadata (register.yaml). Each dataset directory
    contains a register.yaml that carries identity, structure, and relationship
    metadata. Corresponds to DatasetRegister in the Lutaml model.
  """@en .

gloss:Section a owl:Class ;
  rdfs:label "Section"@en ;
  rdfs:comment """
    A structural division within a dataset. Sections can be hierarchical:
    a section may contain child sections (e.g. Part > Section > Subsection)
    via gloss:hasChildSection.
  """@en .

# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Concept-level
# ══════════════════════════════════════════════════════════════════════════

gloss:hasLocalization a owl:ObjectProperty ;
  owl:inverseOf gloss:isLocalizationOf ;
  rdfs:domain gloss:Concept ;
  rdfs:range gloss:LocalizedConcept ;
  rdfs:label "has localization"@en ;
  rdfs:comment "Links a managed concept to one of its language-specific localizations."@en .

gloss:isLocalizationOf a owl:ObjectProperty ;
  owl:inverseOf gloss:hasLocalization ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range gloss:Concept ;
  rdfs:label "is localization of"@en ;
  rdfs:comment "Links a localized concept back to its managed concept."@en .

gloss:hasStatus a owl:ObjectProperty ;
  rdfs:domain gloss:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "has status"@en ;
  rdfs:comment "Concept lifecycle status (draft, valid, superseded, etc.)."@en .

gloss:hasDomain a owl:ObjectProperty ;
  rdfs:domain gloss:Concept ;
  rdfs:range gloss:Reference ;
  rdfs:label "has domain"@en ;
  rdfs:comment "Links a concept to a domain (subject area) classification."@en .

gloss:tag a owl:DatatypeProperty ;
  rdfs:domain gloss:Concept ;
  rdfs:range xsd:string ;
  rdfs:label "tag"@en ;
  rdfs:comment "Organizational tag for grouping and filtering concepts (not rendered as a terminological domain)."@en .

gloss:hasRelatedConcept a owl:ObjectProperty ;
  rdfs:domain [
    a owl:Class ;
    owl:unionOf ( gloss:Concept gloss:LocalizedConcept )
  ] ;
  rdfs:range gloss:RelatedConcept ;
  rdfs:label "has related concept"@en ;
  rdfs:comment "DATA: Typed semantic relationship — applicable at concept and localization levels."@en .

gloss:hasDate a owl:ObjectProperty ;
  rdfs:domain [
    a owl:Class ;
    owl:unionOf ( gloss:Concept gloss:LocalizedConcept )
  ] ;
  rdfs:range gloss:ConceptDate ;
  rdfs:label "has date"@en ;
  rdfs:comment "MANAGEMENT: Governance date/event — applicable at concept and localization levels."@en .

gloss:hasSource a owl:ObjectProperty ;
  rdfs:domain [
    a owl:Class ;
    owl:unionOf (
      gloss:Concept
      gloss:LocalizedConcept
      gloss:Designation
      gloss:DetailedDefinition
      gloss:NonVerbalRepresentation
    )
  ] ;
  rdfs:range gloss:ConceptSource ;
  rdfs:label "has source"@en ;
  rdfs:comment "DATA: Bibliographic source — applicable at concept, localization, designation, definition, and non-verbal representation levels."@en .

gloss:identifier a owl:DatatypeProperty ;
  rdfs:domain gloss:Concept ;
  rdfs:range xsd:string ;
  rdfs:label "identifier"@en ;
  rdfs:comment "The management identifier for the concept."@en .

gloss:uri a owl:DatatypeProperty ;
  rdfs:domain gloss:Concept ;
  rdfs:range xsd:anyURI ;
  rdfs:label "URI"@en ;
  rdfs:comment "Optional URI for the managed concept."@en .

# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Localized concept
# ══════════════════════════════════════════════════════════════════════════

gloss:hasEntryStatus a owl:ObjectProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range skos:Concept ;
  rdfs:label "has entry status"@en ;
  rdfs:comment "Localized entry lifecycle status (valid, not_valid, superseded, retired)."@en .

gloss:hasDesignation a owl:ObjectProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range gloss:Designation ;
  rdfs:label "has designation"@en ;
  rdfs:comment "Links a localized concept to one of its designations (terms/symbols)."@en .

gloss:hasDefinition a owl:ObjectProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range gloss:DetailedDefinition ;
  rdfs:label "has definition"@en ;
  rdfs:comment "Links a localized concept to a definition."@en .

gloss:hasNote a owl:ObjectProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range gloss:DetailedDefinition ;
  rdfs:label "has note"@en ;
  rdfs:comment "Links a localized concept to a supplementary note."@en .

gloss:hasExample a owl:ObjectProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range gloss:DetailedDefinition ;
  rdfs:label "has example"@en ;
  rdfs:comment "Links a localized concept to a concept-level illustrative example."@en .

gloss:hasScopedExample a owl:ObjectProperty ;
  rdfs:domain gloss:DetailedDefinition ;
  rdfs:range gloss:DetailedDefinition ;
  rdfs:label "has scoped example"@en ;
  rdfs:comment """
    Links a definition, note, or annotation to a scoped example nested
    inside it (VIM 1993 style). Distinct from gloss:hasExample, which
    links a LocalizedConcept to a concept-level example. MECE: concept-
    level examples use hasExample; definition/note-scoped examples use
    hasScopedExample.
  """@en .

gloss:hasAnnotation a owl:ObjectProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range gloss:DetailedDefinition ;
  rdfs:label "has annotation"@en ;
  rdfs:comment "Editorial annotations about the definition or entry — distinct from notes, which supplement the concept."@en .

gloss:hasNonVerbalRep a owl:ObjectProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range gloss:NonVerbalRepresentation ;
  rdfs:label "has non-verbal representation"@en ;
  rdfs:comment "Links a localized concept to a non-verbal representation resource."@en .

gloss:domain a owl:DatatypeProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range xsd:anyURI ;
  rdfs:label "domain"@en ;
  rdfs:comment "Per-language domain URI reference."@en .

gloss:classification a owl:DatatypeProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range xsd:string ;
  rdfs:label "classification"@en ;
  rdfs:comment "DATA: Classification of the localized entry (admitted, preferred)."@en .

gloss:hasReference a owl:ObjectProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range gloss:Reference ;
  rdfs:label "has reference"@en ;
  rdfs:comment "DATA: Typed concept reference at the localization level."@en .

gloss:language a owl:DatatypeProperty ;
  rdfs:domain [
    a owl:Class ;
    owl:unionOf ( gloss:LocalizedConcept gloss:Designation gloss:Pronunciation )
  ] ;
  rdfs:range xsd:string ;
  rdfs:label "language"@en ;
  rdfs:comment "DATA: ISO 639 three-character language code. Cascades: L10n → Designation → Pronunciation."@en .

gloss:release a owl:DatatypeProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range xsd:string ;
  rdfs:label "release"@en ;
  rdfs:comment "Release version of this localized concept."@en .

gloss:lineageSimilarity a owl:DatatypeProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range xsd:integer ;
  rdfs:label "lineage similarity"@en ;
  rdfs:comment "Similarity percentage to the lineage source."@en .

gloss:reviewType a owl:DatatypeProperty ;
  rdfs:domain gloss:LocalizedConcept ;
  rdfs:range xsd:string ;
  rdfs:label "review type"@en ;
  rdfs:comment "Type of review for the localized entry (editorial or substantive)."@en .

# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Designation
# ══════════════════════════════════════════════════════════════════════════

gloss:normativeStatus a owl:ObjectProperty ;
  rdfs:domain gloss:Designation ;
  rdfs:range skos:Concept ;
  rdfs:label "normative status"@en ;
  rdfs:comment """
    Normative status of a designation (preferred, admitted, deprecated, superseded).
    Preferred designations SHOULD also be typed as iso-thes:PreferredTerm;
    others as iso-thes:SimpleNonPreferredTerm.
  """@en .

gloss:hasPronunciation a owl:ObjectProperty ;
  rdfs:domain gloss:Designation ;
  rdfs:range gloss:Pronunciation ;
  rdfs:label "has pronunciation"@en .

gloss:hasTermType a owl:ObjectProperty ;
  rdfs:domain gloss:Designation ;
  rdfs:range skos:Concept ;
  rdfs:label "has term type"@en ;
  rdfs:comment "ISO 12620 term type classification."@en .


gloss:hasGrammarInfo a owl:ObjectProperty ;
  rdfs:domain gloss:Expression ;
  rdfs:range gloss:GrammarInfo ;
  rdfs:label "has grammar info"@en .

gloss:geographicalArea a owl:DatatypeProperty ;
  rdfs:domain gloss:Designation ;
  rdfs:range xsd:string ;
  rdfs:label "geographical area"@en ;
  rdfs:comment "ISO 3166-1 alpha-2 country code."@en .

gloss:isInternational a owl:DatatypeProperty ;
  rdfs:domain gloss:Designation ;
  rdfs:range xsd:boolean ;
  rdfs:label "is international"@en ;
  rdfs:comment "Whether the designation is valid across all languages/regions."@en .

gloss:isAbsent a owl:DatatypeProperty ;
  rdfs:domain gloss:Designation ;
  rdfs:range xsd:boolean ;
  rdfs:label "is absent"@en ;
  rdfs:comment "The designation is explicitly absent for this concept in this language."@en .

gloss:register a owl:DatatypeProperty ;
  rdfs:domain gloss:Designation ;
  rdfs:range xsd:string ;
  rdfs:label "register"@en ;
  rdfs:comment "Register or usage level of the designation (ISO 12620 / TBX-Linguist: colloquial_register, neutral_register, technical_register, in_house_register, bench_level_register, slang_register, vulgar_register)."@en .

gloss:hasDesignationRelationship a owl:ObjectProperty ;
  rdfs:domain gloss:Designation ;
  rdfs:range gloss:DesignationRelationship ;
  rdfs:label "has designation relationship"@en ;
  rdfs:comment "Links a designation to a designation-level relationship (e.g. abbreviated_form_for, short_form_for)."@en .

gloss:designationRelationshipType a owl:ObjectProperty ;
  rdfs:domain gloss:DesignationRelationship ;
  rdfs:range skos:Concept ;
  rdfs:label "designation relationship type"@en ;
  rdfs:comment "The type of designation relationship."@en .

gloss:designationRelationshipContent a owl:DatatypeProperty ;
  rdfs:domain gloss:DesignationRelationship ;
  rdfs:range xsd:string ;
  rdfs:label "designation relationship content"@en ;
  rdfs:comment "Free-text description of the designation relationship."@en .

gloss:relationshipTarget a owl:DatatypeProperty ;
  rdfs:domain gloss:DesignationRelationship ;
  rdfs:range xsd:string ;
  rdfs:label "relationship target"@en ;
  rdfs:comment "The target designation text that this designation relates to."@en .

# ── Expression-specific ──────────────────────────────────────────────────

gloss:prefix a owl:DatatypeProperty ;
  rdfs:domain gloss:Expression ;
  rdfs:range xsd:string ;
  rdfs:label "prefix"@en .

gloss:usageInfo a owl:DatatypeProperty ;
  rdfs:domain gloss:Expression ;
  rdfs:range xsd:string ;
  rdfs:label "usage info"@en ;
  rdfs:comment "Disambiguation context for homonymous designations."@en .

gloss:fieldOfApplication a owl:DatatypeProperty ;
  rdfs:domain gloss:Expression ;
  rdfs:range xsd:string ;
  rdfs:label "field of application"@en ;
  rdfs:comment "Subject field in which the designation is used."@en .

# ── Abbreviation-specific ────────────────────────────────────────────────

gloss:isAcronym a owl:DatatypeProperty ;
  rdfs:domain gloss:Abbreviation ;
  rdfs:range xsd:boolean ;
  rdfs:label "is acronym"@en .

gloss:isInitialism a owl:DatatypeProperty ;
  rdfs:domain gloss:Abbreviation ;
  rdfs:range xsd:boolean ;
  rdfs:label "is initialism"@en .

gloss:isTruncation a owl:DatatypeProperty ;
  rdfs:domain gloss:Abbreviation ;
  rdfs:range xsd:boolean ;
  rdfs:label "is truncation"@en .

# ── Symbol-specific ──────────────────────────────────────────────────────

gloss:text a owl:DatatypeProperty ;
  rdfs:domain [ a owl:Class ; owl:unionOf ( gloss:LetterSymbol gloss:GraphicalSymbol ) ] ;
  rdfs:range xsd:string ;
  rdfs:label "text"@en ;
  rdfs:comment "Textual representation of a letter or graphical symbol."@en .

gloss:image a owl:DatatypeProperty ;
  rdfs:domain gloss:GraphicalSymbol ;
  rdfs:range xsd:anyURI ;
  rdfs:label "image"@en ;
  rdfs:comment "URI to the graphical symbol image."@en .

# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Pronunciation
# ══════════════════════════════════════════════════════════════════════════

gloss:pronunciationContent a owl:DatatypeProperty ;
  rdfs:domain gloss:Pronunciation ;
  rdfs:range xsd:string ;
  rdfs:label "pronunciation content"@en ;
  rdfs:comment "Phonetic or transcribed text."@en .

gloss:pronunciationLanguage a owl:DatatypeProperty ;
  rdfs:domain gloss:Pronunciation ;
  rdfs:range xsd:string ;
  rdfs:label "pronunciation language"@en ;
  rdfs:comment "ISO 639 three-character language code."@en .

gloss:pronunciationScript a owl:DatatypeProperty ;
  rdfs:domain gloss:Pronunciation ;
  rdfs:range xsd:string ;
  rdfs:label "pronunciation script"@en ;
  rdfs:comment "ISO 15924 four-letter script code."@en .

gloss:pronunciationCountry a owl:DatatypeProperty ;
  rdfs:domain gloss:Pronunciation ;
  rdfs:range xsd:string ;
  rdfs:label "pronunciation country"@en ;
  rdfs:comment "ISO 3166-1 alpha-2 country code."@en .

gloss:pronunciationSystem a owl:DatatypeProperty ;
  rdfs:domain gloss:Pronunciation ;
  rdfs:range xsd:string ;
  rdfs:label "pronunciation system"@en ;
  rdfs:comment "ISO 24229 conversion system code or simple identifier (e.g. IPA)."@en .

# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Relationship / Reference (unified)
# ══════════════════════════════════════════════════════════════════════════

gloss:relationshipType a owl:ObjectProperty ;
  rdfs:domain gloss:RelatedConcept ;
  rdfs:range skos:Concept ;
  rdfs:label "relationship type"@en ;
  rdfs:comment "The type of relationship between concepts."@en .

gloss:relationshipContent a owl:DatatypeProperty ;
  rdfs:domain gloss:RelatedConcept ;
  rdfs:range xsd:string ;
  rdfs:label "relationship content"@en ;
  rdfs:comment "Free-text description of the relationship."@en .

gloss:relationshipRef a owl:ObjectProperty ;
  rdfs:domain gloss:RelatedConcept ;
  rdfs:range gloss:ConceptRef ;
  rdfs:label "relationship reference"@en ;
  rdfs:comment "Reference for the related concept (source + id)."@en .

# ── Reference (typed classification — domains, typed references) ────────

gloss:source a owl:DatatypeProperty ;
  rdfs:domain gloss:Reference ;
  rdfs:range xsd:string ;
  rdfs:label "source"@en ;
  rdfs:comment "Collection identifier (document series, termbase, vocabulary)."@en .

gloss:refId a owl:DatatypeProperty ;
  rdfs:domain gloss:Reference ;
  rdfs:range xsd:string ;
  rdfs:label "reference identifier"@en ;
  rdfs:comment "Item identifier within the collection (document ID, concept ID)."@en .

gloss:refVersion a owl:DatatypeProperty ;
  rdfs:domain gloss:Reference ;
  rdfs:range xsd:string ;
  rdfs:label "reference version"@en ;
  rdfs:comment "Version of the item or collection."@en .

gloss:refLink a owl:DatatypeProperty ;
  rdfs:domain gloss:Reference ;
  rdfs:range xsd:anyURI ;
  rdfs:label "reference link"@en ;
  rdfs:comment "URL link to the source document or concept."@en .

gloss:refType a owl:DatatypeProperty ;
  rdfs:domain gloss:Reference ;
  rdfs:range xsd:string ;
  rdfs:label "reference type"@en ;
  rdfs:comment "Type qualifier: local, designation, urn, domain."@en .

gloss:urn a owl:DatatypeProperty ;
  rdfs:domain gloss:Reference ;
  rdfs:range xsd:anyURI ;
  rdfs:label "URN"@en ;
  rdfs:comment "Direct URN reference to the target concept."@en .

gloss:term a owl:DatatypeProperty ;
  rdfs:domain gloss:Reference ;
  rdfs:range xsd:string ;
  rdfs:label "term"@en ;
  rdfs:comment "Term text when referencing a concept."@en .

# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Source
# ══════════════════════════════════════════════════════════════════════════

gloss:sourceId a owl:DatatypeProperty ;
  rdfs:domain gloss:ConceptSource ;
  rdfs:range xsd:string ;
  rdfs:label "source id"@en ;
  rdfs:comment """
    Optional stable identifier for the source, used by inline
    `{{cite:id}}` references. Local to the concept; must be
    unique within the concept's sources list.
  """@en .

gloss:sourceType a owl:ObjectProperty ;
  rdfs:domain gloss:ConceptSource ;
  rdfs:range skos:Concept ;
  rdfs:label "source type"@en ;
  rdfs:comment "Type of source: authoritative or lineage."@en .

gloss:sourceStatus a owl:ObjectProperty ;
  rdfs:domain gloss:ConceptSource ;
  rdfs:range skos:Concept ;
  rdfs:label "source status"@en ;
  rdfs:comment "Status relative to source: identical, modified, etc."@en .

gloss:sourceOrigin a owl:ObjectProperty ;
  rdfs:domain gloss:ConceptSource ;
  rdfs:range gloss:Citation ;
  rdfs:label "source origin"@en ;
  rdfs:comment "The bibliographic citation from which this concept was sourced."@en .

gloss:modification a owl:DatatypeProperty ;
  rdfs:domain gloss:ConceptSource ;
  rdfs:range xsd:string ;
  rdfs:label "modification"@en ;
  rdfs:comment "How the concept was modified from the source."@en .

# ── Citation resolution ────────────────────────────────────────────────────
#
# An inline `{{cite:id}}` mention in a concept's text
# resolves to a Citation (ConceptSource#origin) in the same
# concept's sources list. The resolution is deployment-
# dependent:
#
#   1. Self-contained: the inline Citation is rendered as a
#      flat citation (the source's origin.ref, locality, link).
#   2. Co-deployed: if the deployment has a bibliographic
#      dataset registered under the same `Citation::Ref.source`
#      (e.g. 'bibliography:ISO'), the citation is resolved to
#      the rich bibliographic record. The inline locality
#      (if any) is shown as the specific point of reference.
#   3. External: a URI form (e.g. `urn:iso:std:iso:7301:2024`)
#      with no co-deployed match renders as the URI as a link.
#
# The Reference data structure (extracted by glossarist-js or
# glossarist-ruby) carries the URI/lookupKey/cite-key;
# resolution against the deployment's bibliography registry
# happens at render time.

# ── Citation properties ────────────────────────────────────────────────────

gloss:hasCitationRef a owl:ObjectProperty ;
  rdfs:domain gloss:Citation ;
  rdfs:range gloss:CitationRef ;
  rdfs:label "has citation ref"@en ;
  rdfs:comment "Structured inner reference (source + id + optional version)."@en .

gloss:hasCitationLocality a owl:ObjectProperty ;
  rdfs:domain gloss:Citation ;
  rdfs:range gloss:Locality ;
  rdfs:label "has citation locality"@en ;
  rdfs:comment "Locality within the cited document."@en .

gloss:citationOriginal a owl:DatatypeProperty ;
  rdfs:domain gloss:Citation ;
  rdfs:range xsd:string ;
  rdfs:label "citation original"@en ;
  rdfs:comment "Pre-parsed original citation text."@en .

gloss:hasCustomLocality a owl:ObjectProperty ;
  rdfs:domain gloss:Citation ;
  rdfs:range gloss:CustomLocality ;
  rdfs:label "has custom locality"@en ;
  rdfs:comment "Custom name-value locality pairs."@en .

# ── CitationRef properties ────────────────────────────────────────────────

gloss:citationRefSource a owl:DatatypeProperty ;
  rdfs:domain gloss:CitationRef ;
  rdfs:range xsd:string ;
  rdfs:label "citation ref source"@en ;
  rdfs:comment "Document series or termbase (e.g. ISO, IEC)."@en .

gloss:citationRefId a owl:DatatypeProperty ;
  rdfs:domain gloss:CitationRef ;
  rdfs:range xsd:string ;
  rdfs:label "citation ref identifier"@en ;
  rdfs:comment "Document identifier within the series."@en .

gloss:citationRefVersion a owl:DatatypeProperty ;
  rdfs:domain gloss:CitationRef ;
  rdfs:range xsd:string ;
  rdfs:label "citation ref version"@en ;
  rdfs:comment "Version of the document."@en .

# ── ConceptRef properties ────────────────────────────────────────────────

gloss:conceptRefSource a owl:DatatypeProperty ;
  rdfs:domain gloss:ConceptRef ;
  rdfs:range xsd:string ;
  rdfs:label "concept ref source"@en ;
  rdfs:comment "Registry or vocabulary identifier (e.g. IEC, ISO)."@en .

gloss:conceptRefId a owl:DatatypeProperty ;
  rdfs:domain gloss:ConceptRef ;
  rdfs:range xsd:string ;
  rdfs:label "concept ref identifier"@en ;
  rdfs:comment "Concept identifier within the registry."@en .

gloss:conceptRefText a owl:DatatypeProperty ;
  rdfs:domain gloss:ConceptRef ;
  rdfs:range xsd:string ;
  rdfs:label "concept ref text"@en ;
  rdfs:comment "Target designation text for lexical relationships (e.g. close_match, abbreviated_form_for)."@en .

# ── CustomLocality ─────────────────────────────────────────────────────────

gloss:CustomLocality a owl:Class ;
  rdfs:label "Custom Locality"@en ;
  rdfs:comment "A custom name-value locality pair within a citation."@en .

gloss:customLocalityName a owl:DatatypeProperty ;
  rdfs:domain gloss:CustomLocality ;
  rdfs:range xsd:string ;
  rdfs:label "custom locality name"@en .

gloss:customLocalityValue a owl:DatatypeProperty ;
  rdfs:domain gloss:CustomLocality ;
  rdfs:range xsd:string ;
  rdfs:label "custom locality value"@en .

gloss:citationLink a owl:DatatypeProperty ;
  rdfs:domain gloss:Citation ;
  rdfs:range xsd:anyURI ;
  rdfs:label "citation link"@en ;
  rdfs:comment "URL link to the source document."@en .

gloss:hasLocality a owl:ObjectProperty ;
  rdfs:domain gloss:Reference ;
  rdfs:range gloss:Locality ;
  rdfs:label "has locality"@en .

# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Date
# ══════════════════════════════════════════════════════════════════════════

gloss:dateValue a owl:DatatypeProperty ;
  rdfs:domain gloss:ConceptDate ;
  rdfs:range xsd:dateTime ;
  rdfs:label "date value"@en .

gloss:dateType a owl:ObjectProperty ;
  rdfs:domain gloss:ConceptDate ;
  rdfs:range skos:Concept ;
  rdfs:label "date type"@en ;
  rdfs:comment "MANAGEMENT: Kind of governance event: accepted, amended, retired, review, review_decision."@en .

gloss:eventDescription a owl:DatatypeProperty ;
  rdfs:domain gloss:ConceptDate ;
  rdfs:range xsd:string ;
  rdfs:label "event description"@en ;
  rdfs:comment "MANAGEMENT: Free-text description of the governance event (e.g., review decision narrative)."@en .

# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Non-verbal representation
# ══════════════════════════════════════════════════════════════════════════

gloss:representationType a owl:DatatypeProperty ;
  rdfs:domain gloss:NonVerbalRepresentation ;
  rdfs:range xsd:string ;
  rdfs:label "representation type"@en ;
  rdfs:comment "Type of representation: image, table, or formula."@en .

gloss:representationRef a owl:DatatypeProperty ;
  rdfs:domain gloss:NonVerbalRepresentation ;
  rdfs:range xsd:anyURI ;
  rdfs:label "representation reference"@en ;
  rdfs:comment "URI to the external resource."@en .

gloss:representationText a owl:DatatypeProperty ;
  rdfs:domain gloss:NonVerbalRepresentation ;
  rdfs:range xsd:string ;
  rdfs:label "representation text"@en ;
  rdfs:comment "Alt text or description of the representation."@en .


# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Locality
# ══════════════════════════════════════════════════════════════════════════

gloss:localityType a owl:DatatypeProperty ;
  rdfs:domain gloss:Locality ;
  rdfs:range xsd:string ;
  rdfs:label "locality type"@en ;
  rdfs:comment "Type of locality: section, clause, page, etc."@en .

gloss:referenceFrom a owl:DatatypeProperty ;
  rdfs:domain gloss:Locality ;
  rdfs:range xsd:string ;
  rdfs:label "reference from"@en ;
  rdfs:comment "Starting point of the locality reference."@en .

gloss:referenceTo a owl:DatatypeProperty ;
  rdfs:domain gloss:Locality ;
  rdfs:range xsd:string ;
  rdfs:label "reference to"@en ;
  rdfs:comment "Ending point of the locality reference (for ranges)."@en .

# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Grammar
# ══════════════════════════════════════════════════════════════════════════

gloss:gender a owl:ObjectProperty ;
  rdfs:domain gloss:GrammarInfo ;
  rdfs:range skos:Concept ;
  rdfs:label "gender"@en ;
  rdfs:comment "Grammatical gender (m, f, n, c)."@en .

gloss:number a owl:ObjectProperty ;
  rdfs:domain gloss:GrammarInfo ;
  rdfs:range skos:Concept ;
  rdfs:label "number"@en ;
  rdfs:comment "Grammatical number (singular, dual, plural)."@en .

gloss:isNoun a owl:DatatypeProperty ;
  rdfs:domain gloss:GrammarInfo ;
  rdfs:range xsd:boolean ;
  rdfs:label "is noun"@en .

gloss:isVerb a owl:DatatypeProperty ;
  rdfs:domain gloss:GrammarInfo ;
  rdfs:range xsd:boolean ;
  rdfs:label "is verb"@en .

gloss:isAdjective a owl:DatatypeProperty ;
  rdfs:domain gloss:GrammarInfo ;
  rdfs:range xsd:boolean ;
  rdfs:label "is adjective"@en .

gloss:isAdverb a owl:DatatypeProperty ;
  rdfs:domain gloss:GrammarInfo ;
  rdfs:range xsd:boolean ;
  rdfs:label "is adverb"@en .

gloss:isPreposition a owl:DatatypeProperty ;
  rdfs:domain gloss:GrammarInfo ;
  rdfs:range xsd:boolean ;
  rdfs:label "is preposition"@en .

gloss:isParticiple a owl:DatatypeProperty ;
  rdfs:domain gloss:GrammarInfo ;
  rdfs:range xsd:boolean ;
  rdfs:label "is participle"@en .

gloss:partOfSpeech a owl:DatatypeProperty ;
  rdfs:domain gloss:GrammarInfo ;
  rdfs:range xsd:string ;
  rdfs:label "part of speech"@en ;
  rdfs:comment "Part of speech classification (ISO 12620 / TBX: noun, verb, adj, adverb, preposition, participle)."@en .

# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Language / Script / System
# ══════════════════════════════════════════════════════════════════════════

gloss:script a owl:DatatypeProperty ;
  rdfs:domain [ a owl:Class ; owl:unionOf ( gloss:LocalizedConcept gloss:Designation gloss:Pronunciation ) ] ;
  rdfs:range xsd:string ;
  rdfs:label "script"@en ;
  rdfs:comment "ISO 15924 four-letter script code."@en .

gloss:conversionSystem a owl:DatatypeProperty ;
  rdfs:domain [ a owl:Class ; owl:unionOf ( gloss:LocalizedConcept gloss:Designation gloss:Pronunciation ) ] ;
  rdfs:range xsd:string ;
  rdfs:label "conversion system"@en ;
  rdfs:comment "ISO 24229 conversion system code."@en .

# ══════════════════════════════════════════════════════════════════════════
# OBJECT PROPERTIES — Glossarist-specific relationships
# (no standard SKOS / iso-thes equivalent)
# ══════════════════════════════════════════════════════════════════════════

gloss:deprecates a owl:ObjectProperty ;
  owl:inverseOf gloss:deprecatedBy ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "deprecates"@en ;
  rdfs:comment "Lifecycle: this concept deprecates another."@en .

gloss:deprecatedBy a owl:ObjectProperty ;
  owl:inverseOf gloss:deprecates ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "deprecated by"@en .

gloss:supersedes a owl:ObjectProperty ;
  owl:inverseOf gloss:supersededBy ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "supersedes"@en ;
  rdfs:comment "Lifecycle: this concept supersedes another."@en .

gloss:supersededBy a owl:ObjectProperty ;
  owl:inverseOf gloss:supersedes ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "superseded by"@en .

gloss:compares a owl:ObjectProperty ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "compares"@en ;
  rdfs:comment "Comparative: this concept is compared to another."@en .

gloss:contrasts a owl:ObjectProperty ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "contrasts"@en ;
  rdfs:comment "Comparative: this concept contrasts with another."@en .

gloss:sequentiallyRelated a owl:ObjectProperty ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "sequentially related"@en ;
  rdfs:comment "Associative spatiotemporal: sequential relationship."@en .

gloss:spatiallyRelated a owl:ObjectProperty ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "spatially related"@en ;
  rdfs:comment "Associative spatiotemporal: spatial relationship."@en .

gloss:temporallyRelated a owl:ObjectProperty ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "temporally related"@en ;
  rdfs:comment "Associative spatiotemporal: temporal relationship."@en .

gloss:hasHomograph a owl:ObjectProperty ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "has homograph"@en ;
  rdfs:comment "Lexical: this concept has a homograph in another entry."@en .

gloss:hasFalseFriend a owl:ObjectProperty ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "has false friend"@en ;
  rdfs:comment "Lexical: this concept has a false friend in another language."@en .

gloss:relatedConceptBroader a owl:ObjectProperty ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "related concept (broader)"@en ;
  rdfs:comment "Associative: related concept with broader scope."@en .

gloss:relatedConceptNarrower a owl:ObjectProperty ;
  rdfs:domain skos:Concept ;
  rdfs:range skos:Concept ;
  rdfs:label "related concept (narrower)"@en ;
  rdfs:comment "Associative: related concept with narrower scope."@en .

# ── Designation-level relationship properties ────────────────────────────

gloss:abbreviatedFormFor a owl:ObjectProperty ;
  owl:inverseOf gloss:shortFormFor ;
  rdfs:domain gloss:Designation ;
  rdfs:range gloss:Designation ;
  rdfs:label "abbreviated form for"@en ;
  rdfs:comment "This designation is an abbreviated form of the target designation."@en .

gloss:shortFormFor a owl:ObjectProperty ;
  owl:inverseOf gloss:abbreviatedFormFor ;
  rdfs:domain gloss:Designation ;
  rdfs:range gloss:Designation ;
  rdfs:label "short form for"@en ;
  rdfs:comment "This designation is a short form of the target designation."@en .

# ══════════════════════════════════════════════════════════════════════════
# DATAPROPERTIES — Dataset Register
# ══════════════════════════════════════════════════════════════════════════

gloss:datasetId a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:string ;
  rdfs:label "dataset id"@en ;
  rdfs:comment "Dataset identifier, unique within the deployment."@en .

gloss:datasetRef a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:string ;
  rdfs:label "dataset ref"@en ;
  rdfs:comment "Publication reference string (e.g. OIML V 1:2022)."@en .

gloss:datasetYear a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:integer ;
  rdfs:label "dataset year"@en ;
  rdfs:comment "Publication year."@en .

gloss:datasetUrn a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:anyURI ;
  rdfs:label "dataset URN"@en ;
  rdfs:comment "Primary URN for the dataset."@en .

gloss:datasetUrnAlias a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:anyURI ;
  rdfs:label "dataset URN alias"@en ;
  rdfs:comment "Additional URN patterns for resolution."@en .

gloss:datasetRefAlias a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:string ;
  rdfs:label "dataset ref alias"@en ;
  rdfs:comment "Alternative publication references."@en .

gloss:datasetStatus a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:string ;
  rdfs:label "dataset status"@en ;
  rdfs:comment "Dataset lifecycle status: current, superseded, or retired."@en .

gloss:supersedesDataset a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:string ;
  rdfs:label "supersedes dataset"@en ;
  rdfs:comment "ID of the dataset edition that this one supersedes."@en .

gloss:owner a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:string ;
  rdfs:label "owner"@en ;
  rdfs:comment "Owning organization (e.g. ISO, IEC, OIML)."@en .

gloss:sourceRepo a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:anyURI ;
  rdfs:label "source repository"@en ;
  rdfs:comment "URL of the source repository."@en .

gloss:datasetLanguage a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:string ;
  rdfs:label "dataset language"@en ;
  rdfs:comment "ISO 639-2 language code available in this dataset."@en .

gloss:languageOrder a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:string ;
  rdfs:label "language order"@en ;
  rdfs:comment "Preferred display order for languages."@en .

gloss:hasSection a owl:ObjectProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range gloss:Section ;
  rdfs:label "has section"@en ;
  rdfs:comment "Top-level section in the dataset's hierarchical section tree."@en .

gloss:hasDefaultOrdering a owl:ObjectProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range skos:Concept ;
  rdfs:label "default ordering"@en ;
  rdfs:comment "Default concept ordering method for the dataset."@en .

gloss:datasetDescription a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:string ;
  rdfs:label "dataset description"@en ;
  rdfs:comment "Localized dataset description."@en .

gloss:aboutPath a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:string ;
  rdfs:label "about path"@en ;
  rdfs:comment "Localized path to about-page document."@en .

gloss:logo a owl:DatatypeProperty ;
  rdfs:domain gloss:DatasetRegister ;
  rdfs:range xsd:anyURI ;
  rdfs:label "logo"@en ;
  rdfs:comment "Relative path to the dataset logo image."@en .

# ══════════════════════════════════════════════════════════════════════════
# DATAPROPERTIES — Section
# ══════════════════════════════════════════════════════════════════════════

gloss:sectionId a owl:DatatypeProperty ;
  rdfs:domain gloss:Section ;
  rdfs:range xsd:string ;
  rdfs:label "section id"@en ;
  rdfs:comment "Section identifier used in concept references and URL routing."@en .

gloss:sectionName a owl:DatatypeProperty ;
  rdfs:domain gloss:Section ;
  rdfs:range xsd:string ;
  rdfs:label "section name"@en ;
  rdfs:comment "Localized section title."@en .

gloss:hasChildSection a owl:TransitiveProperty ;
  owl:inverseOf gloss:hasParentSection ;
  rdfs:domain gloss:Section ;
  rdfs:range gloss:Section ;
  rdfs:label "has child section"@en ;
  rdfs:comment """
    Hierarchical containment — parent section contains child sections.
    Transitive: selecting a parent section includes all descendants.
    This enables cascading membership at any depth (Part > Section > Subsection).
  """@en .

gloss:hasParentSection a owl:TransitiveProperty ;
  owl:inverseOf gloss:hasChildSection ;
  rdfs:domain gloss:Section ;
  rdfs:range gloss:Section ;
  rdfs:label "has parent section"@en ;
  rdfs:comment """
    Inverse of hasChildSection. Transitive: a section inherits membership
    from all its ancestors. Used for upward traversal in SPARQL queries.
  """@en .

gloss:sectionOrdering a owl:ObjectProperty ;
  rdfs:domain gloss:Section ;
  rdfs:range skos:Concept ;
  rdfs:label "section ordering"@en ;
  rdfs:comment "Per-section ordering override; if absent, inherits dataset default."@en .

# ── Non-Verbal Entities (ISO 10241-1 §6.5) ──────────────────────────────

gloss:NonVerbalEntity a owl:Class ;
  rdfs:label "Non-Verbal Entity"@en ;
  rdfs:comment """
    Abstract base for all non-verbal representation entities
    (ISO 10241-1 §6.5). Carries the shared accessibility + provenance
    payload: caption, description, alt, sources.
  """@en .

gloss:SharedNonVerbalEntity a owl:Class ;
  rdfs:subClassOf gloss:NonVerbalEntity ;
  rdfs:label "Shared Non-Verbal Entity"@en ;
  rdfs:comment """
    A non-verbal entity that has stable dataset-wide identity. Figure,
    Table, and Formula inherit from this. Distinct from NonVerbRep,
    which is concept-local and positional.
  """@en .

gloss:Figure a owl:Class ;
  rdfs:subClassOf gloss:SharedNonVerbalEntity ;
  rdfs:label "Figure"@en ;
  rdfs:comment """
    A dataset-level figure entity with localized caption/alt and
    multiple image variants. May contain recursive subfigures.
  """@en .

gloss:Table a owl:Class ;
  rdfs:subClassOf gloss:SharedNonVerbalEntity ;
  rdfs:label "Table"@en ;
  rdfs:comment "A dataset-level table entity with localized content."@en .

gloss:Formula a owl:Class ;
  rdfs:subClassOf gloss:SharedNonVerbalEntity ;
  rdfs:label "Formula"@en ;
  rdfs:comment "A dataset-level formula entity with localized expression."@en .

gloss:FigureImage a owl:Class ;
  rdfs:label "Figure Image"@en ;
  rdfs:comment "One image variant within a Figure (format, role, dimensions)."@en .

gloss:caption a owl:DatatypeProperty ;
  rdfs:domain gloss:NonVerbalEntity ;
  rdfs:range rdf:langString ;
  rdfs:label "caption"@en ;
  rdfs:comment "Localized title/caption."@en .

gloss:altText a owl:DatatypeProperty ;
  rdfs:domain gloss:NonVerbalEntity ;
  rdfs:range rdf:langString ;
  rdfs:label "alt text"@en ;
  rdfs:comment "Localized short alt text for screen readers."@en .

gloss:description a owl:DatatypeProperty ;
  rdfs:domain gloss:NonVerbalEntity ;
  rdfs:range rdf:langString ;
  rdfs:label "description"@en ;
  rdfs:comment "Localized long description (aria-describedby)."@en .

gloss:image a owl:ObjectProperty ;
  rdfs:domain gloss:Figure ;
  rdfs:range gloss:FigureImage ;
  rdfs:label "image"@en ;
  rdfs:comment "An image variant of a Figure."@en .

gloss:hasSubfigure a owl:ObjectProperty ;
  rdfs:domain gloss:Figure ;
  rdfs:range gloss:Figure ;
  rdfs:label "has subfigure"@en ;
  rdfs:comment "Recursive composite subfigure."@en .

gloss:src a owl:DatatypeProperty ;
  rdfs:domain gloss:FigureImage ;
  rdfs:range xsd:string ;
  rdfs:label "src"@en ;
  rdfs:comment "Image filename relative to images/ directory."@en .

gloss:format a owl:DatatypeProperty ;
  rdfs:domain gloss:FigureImage ;
  rdfs:range xsd:string ;
  rdfs:label "format"@en ;
  rdfs:comment "Image format (svg, png, jpg, webp, avif, gif)."@en .

gloss:role a owl:DatatypeProperty ;
  rdfs:domain gloss:FigureImage ;
  rdfs:range xsd:string ;
  rdfs:label "role"@en ;
  rdfs:comment "Variant role (vector, raster, dark, light, print)."@en .

gloss:content a owl:DatatypeProperty ;
  rdfs:domain gloss:Table ;
  rdfs:range xsd:string ;
  rdfs:label "content"@en ;
  rdfs:comment "Serialized table content (HTML, AsciiDoc, or similar markup)."@en .

gloss:expression a owl:DatatypeProperty ;
  rdfs:domain gloss:Formula ;
  rdfs:range xsd:string ;
  rdfs:label "expression"@en ;
  rdfs:comment "The formula expression in its source notation (AsciiDoc stem, MathML, etc.)."@en .

gloss:latexForm a owl:DatatypeProperty ;
  rdfs:domain gloss:Formula ;
  rdfs:range xsd:string ;
  rdfs:label "LaTeX form"@en ;
  rdfs:comment "LaTeX rendering of the formula expression for downstream typesetting."@en .
