### Martialis Ontology
###
### Investigative ontology for Martialis
###
### Frederico Munoz <fsmunoz@gmail.com>, Martialis Project
###
### Licence: CC0-1.0 (public domain dedication)
### Attribution requested but not required: cite "Martialis — https://martial.is"
###
### Design notes:
### - SHACL (martialis.shacl.ttl) is the constraint layer; this file
###   describes the vocabulary. rdfs:domain/rdfs:range are inference
###   axioms, not constraints, so the policy is: declared when a
###   property applies to exactly one class, omitted when it applies
###   to more than one (the per-class SHACL shapes carry the
###   constraints in both cases).
### - Assertions share a uniform subject/object structure so that
###   "every assertion involving X" is a single query; what the
###   object IS depends on the assertion class and is documented on
###   each class below.
### - Every term in this file is either produced by the YAML-LD
###   conversion pipeline (see schemas/context.jsonld and
###   bin/martialis) or explicitly marked as materialized at export
###   time.
### - owl:imports covers every external vocabulary this file uses in a
###   FORMAL axiom (class/property declarations, subPropertyOf,
###   ranges, domains): prov: and org: (prov:Entity/prov:Agent typing,
###   org:ChangeEvent - also the two the exported data materializes),
###   skos: (skos:Concept ranges, variantOf/hasVariant subproperty
###   alignments), dcterms: (partOf/editionOfSource subproperties) and
###   bibo: (volume/issue/page/callNumber/doi subproperties). This is
###   what OWL 2's structural specification asks for: every entity
###   appearing in an axiom must be declared, and importing the
###   defining ontology is the only way to declare someone else's term
###   without re-minting it. The remaining external terms (schema.org,
###   FaBiO, CiTO, VANN) appear in annotations only, where no
###   declaration is required. For offline validation the import
###   closure is vendored under ontology/imports/ (see the reasoner
###   tier in bin/martialis). The no-inference-at-validation policy
###   still stands: imports exist so the ontology is conformant and
###   consumable by reasoners, not because validation runs inference.
### - rdfs:label on every term (added 2026-08-25; en/pt/ja since the
###   2.1.0 quality pass) is a plain, mechanically-derived reading of
###   the term name, not a rewrite of its rdfs:comment - it exists so
###   documentation generators (pyLODE etc.) and SPARQL UIs have
###   something to render besides a raw local name. The comments remain
###   the authoritative documentation.

@prefix martialis: <https://w3id.org/martialis/ontology#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix schema: <https://schema.org/> .
@prefix org: <http://www.w3.org/ns/org#> .
@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 dcterms: <http://purl.org/dc/terms/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix bibo: <http://purl.org/ontology/bibo/> .
@prefix fabio: <http://purl.org/spar/fabio/> .
@prefix cito: <http://purl.org/spar/cito/> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .

# Ontology
#################################################################

martialis:MartialisOntology a owl:Ontology ;
    dcterms:title "Martialis Investigative Ontology"@en ;
    dcterms:description "Ontology for historically sourced martial arts lineages, ranks, and claims. Every term is either produced by the YAML-LD conversion pipeline (see schemas/context.jsonld and bin/martialis) or explicitly marked as materialized at export time. SHACL (martialis.shacl.ttl, martialis-quality.shacl.ttl) is the constraint layer; this file describes the vocabulary."@en ;
    dcterms:rights <https://creativecommons.org/publicdomain/zero/1.0/> ;
    dcterms:publisher [ a schema:Organization ;
        schema:name "Martialis Project" ;
        schema:url <https://martial.is> ] ;
    dcterms:creator [ a schema:Person ;
        schema:name "Frederico Munoz" ;
        schema:email <mailto:fsmunoz@gmail.com> ] ;
    # xsd:string rather than xsd:date on purpose: xsd:date is outside
    # the OWL 2 datatype map (like xsd:gYear - see martialis:startYear's
    # comment), and dcterms:created/modified are data properties once
    # dcterms: is imported, so xsd:date-typed values would push the
    # ontology outside OWL 2 DL. DCMI's own range is rdfs:Literal, so a
    # plain string is compliant.
    dcterms:created "2026-02-28"^^xsd:string ;
    dcterms:modified "2026-09-06"^^xsd:string ;
    owl:versionInfo "3.0.0" ;
    owl:versionIRI <https://w3id.org/martialis/ontology/3.0.0> ;
    owl:priorVersion <https://w3id.org/martialis/ontology/2.4.0> ;
    owl:imports prov: , org: , skos: , dcterms: , bibo: ;
    dcterms:license <https://creativecommons.org/publicdomain/zero/1.0/> ;
    dcterms:bibliographicCitation "Martialis — https://martial.is" ;
    vann:preferredNamespacePrefix "martialis" ;
    vann:preferredNamespaceUri <https://w3id.org/martialis/ontology#> ;
    schema:codeRepository <https://github.com/Martial-IS/martialis-db> ;
    foaf:logo <https://martial.is/static/images/circle_inv.png> ;
    bibo:status <http://purl.org/ontology/bibo/status/published> ;
    rdfs:seeAlso <https://w3id.org/martialis/vocab/peer-review> ,
                 <https://w3id.org/martialis/ontology/shapes/structural> ,
                 <https://w3id.org/martialis/ontology/shapes/quality> ,
                 <https://w3id.org/martialis/vocab> ,
                 <https://martial.is/model> ;
    skos:historyNote "1.1.0: affiliation model (typed AffiliationAssertion replacing parent_org_id), OfficerRole, Date EDTF dates with materialized earliestYear/latestYear, org:ChangeEvent materialization; rdfs:label added to all terms for documentation generators. 2.0.0 (breaking): SKOS vocabulary migration - 25 ConceptSchemes under ontology/vocabularies/ document the project's controlled vocabularies; 19 previously-xsd:string enum properties (role, styleRelationType, affiliationRelation, sourceRefType, evidenceWeight, orgType, styleType, styleForm, placeType, eventType, rankSystemType, dissolutionManner, sourceGenre, instructorCapacity, editionRelationType, dateCalendar, plus the newly-minted rankType/honorType/linkType) became owl:ObjectProperty with rdfs:range skos:Concept; rankType/honorType/linkType replace the prior shared use of schema:additionalType (950 triples from three unrelated vocabularies on one predicate, now separable); peer-review.ttl moved from the ontology namespace to its own https://w3id.org/martialis/vocab/peer-review namespace. sourceType/sourceLocatorLabel/contributorRole (CSL) and peerReview (DRIVER/OpenAIRE) stay plain strings by design - external-standard alignments, not Martialis vocabularies. 2.1.0 (breaking): ontology quality pass, prompted by finding that three schemes and part of the rank/honor model described this project's own data rather than the domain. martialis:MartialArtRank (reserved, never instantiated) is dropped and replaced by martialis:RankingSystem, a real evidenced entity type (database/ranking-systems/) - a rank is a (rankSystem, rankType/rankOrdinal or rankGrade) tuple with no entity of its own; martialis:rankValue/martialis:rankSystemType and the RankSystem class they belonged to are removed accordingly, replaced by martialis:rankSystem/martialis:confersRank/martialis:rankType/martialis:rankOrdinal/martialis:rankGrade and, on HonorAssertion, martialis:honorGrade. rankType narrows to {dan, kyu} (a numbering-direction marker); menkyo and the Unified Sports Classification System become RankingSystem entities of kind 'enumerated' rather than rankType values; Chinese Duanwei, previously modelled as a rankType sibling of dan, is confirmed (Wikipedia; the China Wushu Association itself uses 'Dan' for international standardization) to be the same grade concept administered by a distinct sourced institution, so it becomes its own RankingSystem entity, not a vocabulary value. source-classification.ttl/contributor-role.ttl/source-locator-label.ttl (CSL alignments) are deleted: they were invalid SKOS, not merely unidiomatic - skos:exactMatch's domain/range is skos:Concept and skos:ConceptScheme is owl:disjointWith skos:Concept, so a ConceptScheme exactMatch-ing an external anchor entailed a disjointness violation (confirmed via RDFS entailment); replaced by dcterms:conformsTo directly on sourceType/contributorRole/sourceLocatorLabel. country.ttl's 40 database-observed codes are replaced by direct reuse of the EU Publications Office's own dereferenceable country authority IRIs (confirmed real SKOS, ~30 languages, correct ISO lifecycle status) rather than a local mirror; only genuinely uncovered codes (Ryukyu) remain local. The 25-file one-scheme-per-file layout (a pyLODE workaround) merges into one ontology/vocabularies.ttl, pyLODE having been dropped in favour of Widoco/SHACL Play/SKOS Play. 2.2.0 (breaking): SHACL shapes move off the ontology's own namespace into their own, https://w3id.org/martialis/ontology/shapes# (prefix shapes:) - martialis.shacl.ttl and martialis-quality.shacl.ttl's 59 named sh:NodeShapes (e.g. martialis:PersonShape becomes shapes:PersonShape) and their few sh:node cross-references between shapes are the entire change; every sh:targetClass/sh:path/sh:class reference to an actual ontology term is untouched, still martialis:. Prompted by a real documentation-generator correctness bug: a fragment IRI's non-fragment part is what a bare HTTP dereference actually reaches, and with shapes sharing the ontology's own #fragment namespace, no single page could ever be the correct target for both classes/properties and shapes at once. Matches the convention every profile-splitting documentation tool already assumes (pyLODE's ontopub/valpub/vocpub, Widoco+SHACL Play) - a separate namespace per profile; the prior shared-namespace choice was the actual defect, not those tools. 2.3.0 (breaking): the Event entity is operationalized. martialis:Event moves from prov:Entity to schema:Event + prov:Activity (an event is something that occurs, not an entity that exists; PROV-O declares Entity and Activity disjoint, so the old subclass was a modeling error, not merely a weak alignment), and martialis:Participation moves from prov:Entity to prov:Association (an agent's qualified involvement in an activity, with the object widening from Person to Person or Organization). New martialis:atEvent links TeacherInteraction/RankAssertion/HonorAssertion/DocumentTransmissionAssertion/AffiliationAssertion/LifeEvent nodes to the canonical Event they occurred at (recorded as the multivalued event_ids array - one claim may reference several events); the event-classification scheme gains challenge/seminar/course/grading/ceremony/exchange concepts and the event-role scheme gains instructor/student (the teaching and learning roles of course/seminar events); the honor-type scheme gains decoration (state/military orders and medals, previously shoehorned into certificate/noble_rank); Event gains aka/links/media/notes/website, plural org_ids/style_ids, schema:superEvent series containment (part_of_id), and per-participation evidence. Two consistency follow-ups required by the new typing: martialis:hasConfidence drops its strict Assertion domain for schema:domainIncludes Assertion+Participation (a strict domain plus the Assertion/Participation disjointness would make every participation carrying a confidence block inconsistent under a reasoner - caught by the reasoner gate on the first real event data), and the export's prov:wasDerivedFrom materialization skips Event/Participation subjects (PROV's wasDerivedFrom has domain prov:Entity, disjoint from both new superclasses). Sources also became schema-REQUIRED (minItems 1) on every assertion-shaped node - rank/honor/learned_from/possibly_same_as/related_styles/affiliations/instructors/officers/participations and every teacher interaction with a real teacher_id (the unknown-teacher placeholder, teacher_id: null, stays exempt as it is dropped at export) - the quality-tier 'no sources' warnings become belt-and-braces checks for non-schema RDF. 2.4.0 (breaking): contextual training - martialis:ContextualTrainingAssertion records that the subject trained in a style at a place/event during a period under an unidentified teacher, produced from teacher entries with teacher_id: null (previously dropped at export entirely). It carries no object and is never materialized into wasTaughtBy/teaches; its interactions require an anchor (a place or event), a real period start, and sources - the unanchored, unsourced teacher_id: null placeholder is retired as a modelling pattern (a named-but-unentered teacher is now a stub Person plus a note, not a null placeholder). martialis:hasContextualTrainingAssertion links Person to it, and martialis:trainedAt (Person -> Place) is the student-side mirror of the existing martialis:taughtAt, materialized from both TeacherAssertion and ContextualTrainingAssertion interactions. martialis:hasInteraction drops its strict TeacherAssertion domain for schema:domainIncludes TeacherAssertion+ContextualTrainingAssertion, and martialis:assertedStyle/martialis:role gain ContextualTrainingAssertion - the same disjointness-vs-strict-domain fix 2.3.0 applied to hasConfidence and atEvent. Research notes (YAML: notes) are unified across every entity and assertion-shaped node under a new martialis:researchNote (aligned with skos:editorialNote), replacing the prior reuse of rdfs:comment - notes is addressed to a maintainer investigating a record, not a reader, and rdfs:comment already means something else (ontology self-documentation). Participation also gains the optional martialis:participationStyle (YAML: participants[].style_ids), attributing the specific art a participant taught or practised at the event - the per-instructor mapping a multi-style course's roster names but the event-level style_ids (an unattributed set) cannot carry; candidate-instructor matching against a student's contextual-training style_id joins on it, falling back to the event's style_ids only for single-style events. 3.0.0 (breaking): the vocabulary namespace moves off martial.is. martialis:, shapes:, and every vocab: concept/scheme IRI now resolve under https://w3id.org/martialis/ontology#, https://w3id.org/martialis/ontology/shapes#, and https://w3id.org/martialis/vocab/... respectively (a permanent, domain-independent redirect via the W3C Permanent Identifier Community Group's w3id.org service), so an import of this ontology no longer depends on a domain the project could lose or move - the same reasoning 2.2.0 applied to giving shapes their own fragment namespace, now applied to domain ownership itself. Data IRIs (https://martial.is/entity/, https://martial.is/agent/, https://martial.is/change/) are unaffected: they identify this project's own records, not vocabulary terms other projects import, so there is no retrofit cost to protect against." .

# Core Domain Classes
#################################################################

martialis:Person a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "person"@en , "pessoa"@pt , "人物"@ja ;
    rdfs:comment "A historical practitioner of martial arts - the subject of lineage, rank, and honor claims. Distinct from martialis:Agent, which identifies curators/assessors; agent IRIs live under https://martial.is/agent/ while Person entity IRIs are ULID-based."@en ;
    rdfs:subClassOf prov:Agent , schema:Person .

martialis:Organization a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "organization"@en , "organização"@pt , "組織"@ja ;
    rdfs:comment "A martial arts organization: federation, governing body, school/ryuha, association. An institution like the Kodokan is both an Organization (the worldwide body) and a Place (the physical dojo), as two cross-linked entities."@en ;
    rdfs:subClassOf prov:Agent , schema:Organization , org:Organization .

martialis:Style a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "style"@en , "estilo"@pt , "流派・武術"@ja ;
    rdfs:comment "A martial art or style: a named system of practice (Karate, Shotokan, Daito-ryu). Styles relate to each other via StyleRelationAssertions (variant_of, derived_from, ...); the variantOf edge is materialized for lineage rollups."@en ;
    rdfs:subClassOf schema:CreativeWork .

martialis:RankingSystem a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "ranking system"@en , "sistema de graduação"@pt , "段級制度"@ja ;
    rdfs:subClassOf schema:Intangible ;
    rdfs:comment "A named, sourced grading system a Style's practitioners are ranked in - dan-kyu, menkyo, a state sports classification, and similar. A first-class, evidenced entity (database/ranking-systems/), the same shape as Style/Organization/Place: it carries its own founding facts (instituted date, founder, sources), which a SKOS concept cannot. Superseded a reserved-but-never-instantiated martialis:MartialArtRank in the 2.1.0 ontology revision - a specific rank ('6th dan') has nothing left to say as an entity once (system, type/ordinal or grade) is recorded on the assertion, so it was dropped rather than kept reserved; RankingSystem is the entity that actually needed to exist."@en .

martialis:Place a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "place"@en , "local"@pt , "場所"@ja ;
    rdfs:subClassOf schema:Place ;
    rdfs:comment "A training venue or institution (dojo, club, academy, team, university program, etc.). Distinct from the Organization that may govern it; an institution like the Kodokan is both an Organization (the worldwide governing body) and a Place (the physical dojo), as two cross-linked entities."@en .

martialis:Source a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "source"@en , "fonte"@pt , "資料"@ja ;
    rdfs:subClassOf prov:Entity , schema:CreativeWork , fabio:Expression , bibo:Document ;
    rdfs:comment "A bibliographic entity: book, article, website, video, thesis, interview, archival document, etc. Bibliographic form (martialis:sourceType) follows the CSL-JSON `type` vocabulary. Aligned with FaBiO's Expression (a realisation of a Work) and BIBO's Document; the SPAR/BIBO alignment is documentation-grade, matching this ontology's no-inference-at-validation policy - see the design notes above."@en ;
    vann:example "An article in a journal: <article> a martialis:Source ; martialis:sourceType \"article\" ; martialis:partOf <journal> ; martialis:volume \"12\" ; martialis:page \"42-60\" . An edition: <edition2001> martialis:editionOf [ martialis:editionOfSource <work1908> ; martialis:editionRelationType \"translation\" ] ."@en .

martialis:Event a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "event"@en , "evento"@pt , "行事"@ja ;
    rdfs:subClassOf schema:Event , prov:Activity ;
    rdfs:comment "A notable event in martial arts history: a tournament, a challenge match or fight series, a seminar or course, a demonstration, a grading, a ceremony, a recognition act, a founding, an exchange. The canonical hub other entities' assertions optionally point at through martialis:atEvent (a rank received at a tournament, an interaction at a seminar, a founding cross-linked here). Aligned with schema:Event (the vocabulary the exported data already speaks: startDate, location, organizer, about, superEvent) and with PROV's Activity (an event is something that occurs, not an entity that exists - PROV-O declares Entity and Activity disjoint, so the pre-2.3.0 prov:Entity superclass was a modeling error)."@en .

martialis:Agent a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "agent"@en , "agente"@pt , "エージェント"@ja ;
    rdfs:subClassOf prov:Agent ;
    rdfs:comment "A curator or assessing agent, identified by a slug (e.g. https://martial.is/agent/JDP). Deliberately separate from martialis:Person: curators are not necessarily martial artists in the database, and the namespace split keeps https://martial.is/entity/ reserved for ULID-identified entities."@en .

# Class disjointness
#################################################################
# Documentation-grade axioms: consumers MAY run a reasoner over
# these; validation never relies on inference (see the design
# notes). martialis:Agent is deliberately excluded - a curator can
# in principle also be a documented practitioner.

martialis:Person owl:disjointWith martialis:Organization , martialis:Style , martialis:RankingSystem , martialis:Place , martialis:Source , martialis:Event , martialis:LifeEvent , martialis:TimeInterval , martialis:Assertion , martialis:Confidence , martialis:SourceAssertionRelation , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:Organization owl:disjointWith martialis:Style , martialis:RankingSystem , martialis:Place , martialis:Source , martialis:Event , martialis:LifeEvent , martialis:TimeInterval , martialis:Assertion , martialis:Confidence , martialis:SourceAssertionRelation , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:Style owl:disjointWith martialis:RankingSystem , martialis:Place , martialis:Source , martialis:Event , martialis:LifeEvent , martialis:TimeInterval , martialis:Assertion , martialis:Confidence , martialis:SourceAssertionRelation , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:RankingSystem owl:disjointWith martialis:Place , martialis:Source , martialis:Event , martialis:LifeEvent , martialis:TimeInterval , martialis:Assertion , martialis:Confidence , martialis:SourceAssertionRelation , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:Place owl:disjointWith martialis:Source , martialis:Event , martialis:LifeEvent , martialis:TimeInterval , martialis:Assertion , martialis:Confidence , martialis:SourceAssertionRelation , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:Source owl:disjointWith martialis:Event , martialis:LifeEvent , martialis:TimeInterval , martialis:Assertion , martialis:Confidence , martialis:SourceAssertionRelation , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:Event owl:disjointWith martialis:LifeEvent , martialis:TimeInterval , martialis:Assertion , martialis:Confidence , martialis:SourceAssertionRelation , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:LifeEvent owl:disjointWith martialis:TimeInterval , martialis:Assertion , martialis:Confidence , martialis:SourceAssertionRelation , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:TimeInterval owl:disjointWith martialis:Assertion , martialis:Confidence , martialis:SourceAssertionRelation , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:Assertion owl:disjointWith martialis:Confidence , martialis:SourceAssertionRelation , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:Confidence owl:disjointWith martialis:SourceAssertionRelation , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:SourceAssertionRelation owl:disjointWith martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:TeacherInteraction owl:disjointWith martialis:Participation , martialis:InstructorRole , martialis:OfficerRole .
martialis:Participation owl:disjointWith martialis:InstructorRole , martialis:OfficerRole .
martialis:InstructorRole owl:disjointWith martialis:OfficerRole .

martialis:TeacherAssertion owl:disjointWith martialis:NegativeAssertion , martialis:RankAssertion , martialis:HonorAssertion , martialis:StyleRelationAssertion , martialis:DocumentTransmissionAssertion , martialis:IdentityAssertion , martialis:AffiliationAssertion , martialis:ContextualTrainingAssertion .
martialis:NegativeAssertion owl:disjointWith martialis:RankAssertion , martialis:HonorAssertion , martialis:StyleRelationAssertion , martialis:DocumentTransmissionAssertion , martialis:IdentityAssertion , martialis:AffiliationAssertion , martialis:ContextualTrainingAssertion .
martialis:RankAssertion owl:disjointWith martialis:HonorAssertion , martialis:StyleRelationAssertion , martialis:DocumentTransmissionAssertion , martialis:IdentityAssertion , martialis:AffiliationAssertion , martialis:ContextualTrainingAssertion .
martialis:HonorAssertion owl:disjointWith martialis:StyleRelationAssertion , martialis:DocumentTransmissionAssertion , martialis:IdentityAssertion , martialis:AffiliationAssertion , martialis:ContextualTrainingAssertion .
martialis:StyleRelationAssertion owl:disjointWith martialis:DocumentTransmissionAssertion , martialis:IdentityAssertion , martialis:AffiliationAssertion , martialis:ContextualTrainingAssertion .
martialis:DocumentTransmissionAssertion owl:disjointWith martialis:IdentityAssertion , martialis:AffiliationAssertion , martialis:ContextualTrainingAssertion .
martialis:IdentityAssertion owl:disjointWith martialis:AffiliationAssertion , martialis:ContextualTrainingAssertion .
martialis:AffiliationAssertion owl:disjointWith martialis:ContextualTrainingAssertion .

# Assertion Framework
#################################################################

martialis:Assertion a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "assertion"@en , "asserção"@pt , "アサーション"@ja ;
    rdfs:subClassOf prov:Entity ;
    rdfs:comment "A claim about a historical relationship or fact."@en .

martialis:TeacherAssertion a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "teacher assertion"@en , "asserção de professor"@pt , "師弟関係アサーション"@ja ;
    rdfs:subClassOf martialis:Assertion ;
    rdfs:comment "A claim that the subject (Person) studied under the object (the teacher, a Person). Evidence attaches to its TeacherInteraction records."@en ;
    vann:example "martialis:assertion01 a martialis:TeacherAssertion ; martialis:subject ex:Student ; martialis:object ex:Teacher ; martialis:assertedStyle ex:Shotokan ; martialis:hasInteraction [ a martialis:TeacherInteraction ; martialis:interactionPlace ex:HombuDojo ; martialis:interactionPeriod [ martialis:startYear 1962 ] ; martialis:hasEvidence [ martialis:basedOnSource ex:Interview1989 ; martialis:supports true ] ] ."@en .

martialis:RankAssertion a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "rank assertion"@en , "asserção de graduação"@pt , "段位アサーション"@ja ;
    rdfs:subClassOf martialis:Assertion ;
    rdfs:comment "A claim that the subject (Person) holds a rank in the object (a Style). The rank itself is a (rankSystem, rankType/rankOrdinal or rankGrade) tuple, not a free string - see those properties below."@en ;
    vann:example "martialis:assertion42 a martialis:RankAssertion ; martialis:subject ex:Practitioner ; martialis:object ex:Judo ; martialis:rankSystem ex:DanKyuSystem ; martialis:rankType rt:dan ; martialis:rankOrdinal 6 ; martialis:assertedOrg ex:Kodokan ; martialis:grantedBy ex:TeacherX ."@en .

martialis:HonorAssertion a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "honor assertion"@en , "asserção de honra"@pt , "称号アサーション"@ja ;
    rdfs:subClassOf martialis:Assertion ;
    rdfs:comment "A non-style-specific title, certificate, or honor (e.g., Hanshi, Kyoshi). Subject is the honored Person; object, when present, is the granting Organization; grantedBy, when present, is the granting Person."@en .

martialis:NegativeAssertion a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "negative assertion"@en , "asserção negativa"@pt , "否定アサーション"@ja ;
    rdfs:subClassOf martialis:Assertion ;
    rdfs:comment "An explicit, sourced claim that a teacher-student relationship did NOT exist: subject (Person) was not a student of the object (Person). Produced from teacher entries flagged negated: true."@en .

martialis:ContextualTrainingAssertion a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "contextual training assertion"@en , "asserção de treino contextual"@pt , "文脈的修行アサーション"@ja ;
    rdfs:subClassOf martialis:Assertion ;
    rdfs:comment "A claim that the subject (Person) trained in a style at a Place and/or Event during a period, under instruction whose specific teacher is not identified. Deliberately weaker than a TeacherAssertion and carries no object: it is never materialized into wasTaughtBy/teaches. Produced from teacher entries with teacher_id: null (and not negated). Candidate instructors are recovered by joining its interaction place and period against that Place's InstructorRole records, or its Event's instructor participations - a query, not an assertion."@en ;
    vann:example "martialis:assertion77 a martialis:ContextualTrainingAssertion ; martialis:subject ex:Student ; martialis:assertedStyle ex:Judo ; martialis:hasInteraction [ a martialis:TeacherInteraction ; martialis:interactionPlace ex:Kodokan ; martialis:interactionPeriod [ martialis:startYear 1958 ; martialis:endYear 1959 ] ; martialis:hasEvidence [ martialis:basedOnSource ex:CourseRecord ; martialis:supports true ] ] ."@en .

martialis:StyleRelationAssertion a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "style relation assertion"@en , "asserção de relação entre estilos"@pt , "流派関係アサーション"@ja ;
    rdfs:subClassOf martialis:Assertion ;
    rdfs:comment "A typed, sourced relationship from the subject (Style) to the object (Style): derived_from, split_from, influenced_by, sibling_style_of, variant_of. sibling_style_of is reserved for peer relationships not already accounted for by a shared variant_of/derived_from parent; do not assert it between two styles that already share a declared parent."@en .

martialis:DocumentTransmissionAssertion a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "document transmission assertion"@en , "asserção de transmissão documental"@pt , "文書伝承アサーション"@ja ;
    rdfs:subClassOf martialis:Assertion ;
    rdfs:comment "A claim that the subject (Person) learned from a document rather than a person: a densho, manual, book, or video, referenced via transmissionDocument (a Source). Produced from learned_from entries."@en .

martialis:IdentityAssertion a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "identity assertion"@en , "asserção de identidade"@pt , "同一性アサーション"@ja ;
    rdfs:subClassOf martialis:Assertion ;
    rdfs:comment "A sourced hypothesis that the subject (Person) may be the same individual as the object (Person), e.g. under a different name or romanization. Deliberately weaker than owl:sameAs: it links candidates without asserting identity. Produced from possibly_same_as entries."@en .

martialis:TeacherInteraction a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "teacher interaction"@en , "interação professor-aluno"@pt , "師弟交流記録"@ja ;
    rdfs:subClassOf prov:Entity ;
    rdfs:comment "A place/period/evidence record within a teacher-student relationship."@en .

# Assertion Structure Properties
#################################################################

martialis:hasTeacherAssertion a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has teacher assertion"@en , "tem asserção de professor"@pt , "師弟関係アサーションを有する"@ja ;
    rdfs:comment "Links a Person to their TeacherAssertions: claims of having studied under a teacher. The teacher is the assertion's object; evidence attaches to the assertion's interactions."@en ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:TeacherAssertion .

martialis:hasNegativeAssertion a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has negative assertion"@en , "tem asserção negativa"@pt , "否定アサーションを有する"@ja ;
    rdfs:comment "Links a Person to their NegativeAssertions: explicit, sourced denials that a teacher-student relationship existed."@en ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:NegativeAssertion .

martialis:hasContextualTrainingAssertion a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has contextual training assertion"@en , "tem asserção de treino contextual"@pt , "文脈的修行アサーションを有する"@ja ;
    rdfs:comment "Links a Person to their ContextualTrainingAssertions: claims of training in a style at a place/event during a period, with no identified teacher. Produced from teacher entries with teacher_id: null."@en ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:ContextualTrainingAssertion .

martialis:hasRankAssertion a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has rank assertion"@en , "tem asserção de graduação"@pt , "段位アサーションを有する"@ja ;
    rdfs:comment "Links a Person to their RankAssertions: claims of holding a rank in a style."@en ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:RankAssertion .

martialis:hasHonorAssertion a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has honor assertion"@en , "tem asserção de honra"@pt , "称号アサーションを有する"@ja ;
    rdfs:comment "Links a Person to their HonorAssertions: non-style-specific titles or certificates (Hanshi, Kyoshi). Distinct from OfficerRole, which is a tenured office with a real end."@en ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:HonorAssertion .

martialis:hasStyleRelationAssertion a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has style relation assertion"@en , "tem asserção de relação entre estilos"@pt , "流派関係アサーションを有する"@ja ;
    rdfs:comment "Links a Style to its StyleRelationAssertions: typed, sourced relationships to other styles."@en ;
    rdfs:domain martialis:Style ;
    rdfs:range martialis:StyleRelationAssertion .

martialis:hasDocumentTransmissionAssertion a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has document transmission assertion"@en , "tem asserção de transmissão documental"@pt , "文書伝承アサーションを有する"@ja ;
    rdfs:comment "Links a Person to their DocumentTransmissionAssertions: claims of learning from a document rather than a person."@en ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:DocumentTransmissionAssertion .

martialis:hasIdentityAssertion a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has identity assertion"@en , "tem asserção de identidade"@pt , "同一性アサーションを有する"@ja ;
    rdfs:comment "Links a Person to their IdentityAssertions: sourced hypotheses that two Person records may be the same individual."@en ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:IdentityAssertion .

martialis:subject a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "subject"@en , "sujeito"@pt , "主語"@ja ;
    schema:domainIncludes martialis:Assertion ;
    schema:rangeIncludes martialis:Person , martialis:Style , martialis:Organization , martialis:Place ;
    rdfs:comment "The subject of an assertion (the entity the claim is about). Uniform across all assertion classes so that 'every assertion about X' is a single query."@en .

martialis:object a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "object"@en , "objeto"@pt , "目的語"@ja ;
    rdfs:comment "The object of an assertion or participation record. What the object is depends on the assertion class (see the rdfs:comment of each class); the uniform property makes 'every assertion involving X' a single query."@en ;
    schema:domainIncludes martialis:Assertion , martialis:Participation ;
    schema:rangeIncludes martialis:Person , martialis:Style , martialis:Organization .

martialis:transmissionDocument a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "transmission document"@en , "documento de transmissão"@pt , "伝承文書"@ja ;
    rdfs:domain martialis:DocumentTransmissionAssertion ;
    rdfs:range martialis:Source ;
    rdfs:comment "The document (densho, manual, book, video) through which the transmission occurred."@en .

martialis:validDuring a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "valid during"@en , "válido durante"@pt , "有効期間"@ja ;
    rdfs:domain martialis:Assertion ;
    rdfs:range martialis:TimeInterval ;
    rdfs:comment "The period during which an assertion held (used by DocumentTransmissionAssertion and AffiliationAssertion; teacher relationships carry periods on their interactions instead)."@en .

martialis:hasInteraction a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has interaction"@en , "tem interação"@pt , "交流記録を有する"@ja ;
    rdfs:comment "Links a TeacherAssertion or ContextualTrainingAssertion to its TeacherInteraction records, which carry where and when the teaching happened plus the evidence. No single rdfs:domain is declared: TeacherAssertion and ContextualTrainingAssertion are disjoint, so a strict domain on either alone would make the other's use of this property inconsistent under a reasoner - same convention as martialis:hasConfidence and martialis:atEvent."@en ;
    schema:domainIncludes martialis:TeacherAssertion , martialis:ContextualTrainingAssertion ;
    rdfs:range martialis:TeacherInteraction .

martialis:interactionPlace a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "interaction place"@en , "local da interação"@pt , "交流場所"@ja ;
    rdfs:comment "The Place where a teacher-student interaction occurred. Materialized into the martialis:taughtAt convenience edge at export time."@en ;
    rdfs:domain martialis:TeacherInteraction ;
    rdfs:range martialis:Place .

martialis:interactionPeriod a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "interaction period"@en , "período da interação"@pt , "交流期間"@ja ;
    rdfs:comment "The period during which this teacher-student interaction took place."@en ;
    rdfs:domain martialis:TeacherInteraction ;
    rdfs:range martialis:TimeInterval .

martialis:assertedStyle a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "asserted style"@en , "estilo afirmado"@pt , "主張された流派"@ja ;
    rdfs:comment "The style associated with a teacher-student assertion, denial, contextual training claim, or document-transmission claim (learned_from.style_id)."@en ;
    rdfs:range martialis:Style ;
    schema:domainIncludes martialis:TeacherAssertion , martialis:NegativeAssertion , martialis:ContextualTrainingAssertion , martialis:DocumentTransmissionAssertion .

martialis:assertedOrg a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "asserted organization"@en , "organização afirmada"@pt , "主張された組織"@ja ;
    rdfs:comment "The organization associated with a rank or honor assertion."@en ;
    rdfs:range martialis:Organization ;
    schema:domainIncludes martialis:RankAssertion , martialis:HonorAssertion .

martialis:role a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "role"@en , "papel"@pt , "役割"@ja ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/teacher-role> ;
    rdfs:comment "Type of student-teacher relationship: student, uchi-deshi, seminar, private, examination, coach. Event participation roles use martialis:participationRole instead (a different domain with its own scheme - see ontology/vocabularies.ttl's event-role scheme)."@en ;
    schema:domainIncludes martialis:TeacherAssertion , martialis:ContextualTrainingAssertion .

martialis:rankSystem a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "rank system"@en , "sistema de graduação"@pt , "段級制度"@ja ;
    rdfs:range martialis:RankingSystem ;
    schema:domainIncludes martialis:Style , martialis:RankAssertion ;
    rdfs:comment "The RankingSystem this Style's practitioners are ranked in, or this specific RankAssertion's rank is a grade in. The same reference on both classes, so a Style and its practitioners' ranks point at the identical sourced record instead of two parallel classifications. On Style, absent means rank has not been researched for this style - see martialis:confersRank for a positive 'no system of its own' assertion."@en .

martialis:confersRank a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "confers rank"@en , "confere graduação"@pt , "段位を授与する"@ja ;
    rdfs:domain martialis:Style ;
    rdfs:range xsd:boolean ;
    rdfs:comment "false is a positive assertion that this style confers no ranking system of its own (e.g. MMA, where practitioners' rank belongs to separately-taught component arts) - distinct from omitting martialis:rankSystem, which means the question has not been researched, not that the answer is known to be 'no rank'."@en .

martialis:rankType a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "rank type"@en , "tipo de graduação"@pt , "段位種別"@ja ;
    rdfs:domain martialis:RankAssertion ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/rank-type> ;
    rdfs:comment "Which half of a numbered ladder this grade is on: dan (ascending) or kyu (descending); or dan_unspecified, when the source documents dan-level status with no specific degree - a distinct, per-locale-verified concept (yudansha/faixa preta/Danträger/'black belt'), not something a rendering formula can derive from bare 'dan'. See ontology/vocabularies.ttl's rank-type scheme. Only meaningful when martialis:rankSystem references a RankingSystem of kind 'numbered'; absent for an 'enumerated' one, where martialis:rankGrade names the specific grade instead. A prior ontology revision (2.0.0) also carried menkyo/title/duan/other as rankType values, treating tradition-specific rank shapes and Chinese Duanwei's own naming as if they were the same axis as dan/kyu direction; menkyo is now a RankingSystem of its own kind ('enumerated') rather than a rankType value, title-shaped ranks (hanshi/kyoshi/renshi) moved to HonorAssertion entirely, and Duanwei was confirmed (Wikipedia; the China Wushu Association itself uses 'Dan' for international standardization) to be the same grade concept as dan in a distinct sourced institution, not a distinct rankType - see martialis:RankingSystem."@en .

martialis:rankOrdinal a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "rank ordinal"@en , "número de graduação"@pt , "段位数"@ja ;
    rdfs:domain martialis:RankAssertion ;
    rdfs:range xsd:integer ;
    rdfs:comment "The grade number within a numbered RankingSystem (e.g. 6 for 6th dan). Mutually exclusive with martialis:rankGrade. Composing a locale-specific label ('6th dan' / '六段' / '육단') from (rankType, rankOrdinal, locale) is a display-layer concern - nothing is stored beyond the number itself, so no rendering ever hardcodes one tradition's word onto another's grade."@en .

martialis:rankGrade a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "rank grade"@en , "grau de graduação"@pt , "段級位"@ja ;
    rdfs:domain martialis:RankAssertion ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/rank-grade> ;
    rdfs:comment "The specific grade within an enumerated RankingSystem's own grade scheme (e.g. Menkyo Kaiden, or a Unified Sports Classification System tier) - see ontology/vocabularies.ttl. Mutually exclusive with martialis:rankOrdinal/martialis:rankType."@en .

martialis:gradeOrdinal a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "grade ordinal"@en , "ordem do grau"@pt , "級位順序"@ja ;
    rdfs:range xsd:integer ;
    rdfs:comment "A sort key (ascending = more senior) on a skos:Concept within an enumerated grade scheme (ontology/vocabularies.ttl's menkyo/shogo/unified-sports-classification schemes and similar) - SKOS has no native ordinal-successor relation, so this carries the ladder order a skos:broader chain cannot express cleanly for a simple linear sequence. No rdfs:domain is declared: it attaches to skos:Concept individuals across several unrelated schemes, not to a Martialis-defined class - same convention as martialis:linkType."@en .
martialis:honorValue a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "honor value"@en , "valor da honra"@pt , "称号名"@ja ;
    rdfs:domain martialis:HonorAssertion ;
    rdfs:range xsd:string ;
    rdfs:comment "The title or honor designation (e.g., 'Hanshi', 'Kyoshi')."@en .

martialis:honorType a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "honor type"@en , "tipo de honra"@pt , "称号種別"@ja ;
    rdfs:domain martialis:HonorAssertion ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/honor-type> ;
    rdfs:comment "Category of honor: title, certificate, noble_rank, license, decoration (a state or military order or medal), or other. See ontology/vocabularies.ttl's honor-type scheme. See martialis:rankType's comment for why this is a dedicated predicate rather than schema:additionalType."@en .

martialis:honorGrade a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "honor grade"@en , "grau da honra"@pt , "称号位"@ja ;
    rdfs:domain martialis:HonorAssertion ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/rank-grade> ;
    rdfs:comment "The specific grade within an ordered honorific scheme, when honorValue is a rung on a real ladder rather than a one-off distinction. Currently: shogo (renshi/kyoshi/hanshi) - see ontology/vocabularies.ttl. Same shape as martialis:rankGrade, on HonorAssertion rather than RankAssertion because shogo, though structurally a graded ladder, is awarded as a title/honorific, not a style-relative rank."@en .

martialis:linkType a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "link type"@en , "tipo de ligação"@pt , "リンク種別"@ja ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/link-type> ;
    rdfs:comment "Which SAME-AS linked-data catalog a Link.uri identifies the entity in: wikidata, dbpedia, viaf, isni, or other. See ontology/vocabularies/link-type.ttl. No rdfs:domain is declared: unlike every other migrated property, this one attaches to the EXTERNAL resource a links[] entry names (schema:sameAs's object, e.g. the DBpedia page itself), not to the Martialis entity that links to it - see martialis-db's schemas/context.jsonld links term ('uri': '@id'). Before the SKOS vocabulary migration (2.0.0) this shared schema:additionalType with rank_type/honor_type - see martialis:rankType's comment."@en .

martialis:grantedBy a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "granted by"@en , "concedido por"@pt , "授与者"@ja ;
    rdfs:range martialis:Person ;
    rdfs:comment "Person that granted the rank or honor. Granting organizations use assertedOrg."@en ;
    schema:domainIncludes martialis:RankAssertion , martialis:HonorAssertion .

martialis:styleRelationType a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "style relation type"@en , "tipo de relação entre estilos"@pt , "流派関係種別"@ja ;
    rdfs:domain martialis:StyleRelationAssertion ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/style-relation> ;
    rdfs:comment "Relation kind: derived_from, split_from, influenced_by, sibling_style_of, variant_of. The variant_of value is additionally materialized as a direct martialis:variantOf/martialis:hasVariant edge at export time - see Materialized Convenience Edges below. sibling_style_of is reserved for peer relationships not already carried by a shared parent - see StyleRelationAssertion."@en .

martialis:birthEvent a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "birth event"@en , "evento de nascimento"@pt , "出生イベント"@ja ;
    rdfs:comment "Links a Person to their birth LifeEvent, which carries the date, location, and sources."@en ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:LifeEvent .

martialis:deathEvent a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "death event"@en , "evento de morte"@pt , "死去イベント"@ja ;
    rdfs:comment "Links a Person to their death LifeEvent, which carries the date, location, and sources."@en ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:LifeEvent .

# Temporal Modeling
#################################################################

martialis:TimeInterval a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "time interval"@en , "intervalo temporal"@pt , "期間"@ja ;
    rdfs:subClassOf schema:Intangible ;
    rdfs:comment "A time interval with optional start and end years."@en .

martialis:startYear a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "start year"@en , "ano inicial"@pt , "開始年"@ja ;
    rdfs:comment "The start of a TimeInterval, as a bare year. xsd:integer rather than xsd:gYear: gYear is outside the OWL 2 datatype map, which would push the whole ontology out of OWL 2 DL (HermiT refuses to load it) - a year is just an integer here."@en ;
    rdfs:domain martialis:TimeInterval ;
    rdfs:range xsd:integer .

martialis:endYear a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "end year"@en , "ano final"@pt , "終了年"@ja ;
    rdfs:comment "The end of a TimeInterval; absent when the period is ongoing or unknown."@en ;
    rdfs:domain martialis:TimeInterval ;
    rdfs:range xsd:integer .

martialis:LifeEvent a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "life event"@en , "evento biográfico"@pt , "生涯イベント"@ja ;
    rdfs:subClassOf prov:Entity ;
    rdfs:comment "A life event (birth, death) with date, location, and sources."@en .

# Date precision & calendar provenance
#################################################################
# Date fields (schema:birthDate, schema:deathDate, schema:startDate,
# schema:endDate, schema:datePublished) store an EDTF (ISO 8601-2) string:
# a curator's Gregorian-equivalent value, which may itself be approximate,
# uncertain, an interval, or a discrete disputed set - never a parallel
# calendar system. martialis:dateOriginal/dateCalendar are optional sibling
# annotations recording that the source's own date was expressed in a
# different calendar; martialis:earliestYear/latestYear are Python-computed
# convenience bounds parsed from the EDTF value, mirroring the existing
# org:ChangeEvent materialization (martialis:changeYear) - added because
# EDTF's variety (suffixed qualifiers, unspecified digits, intervals, sets)
# cannot be safely compared inline via SPARQL string-slicing.

martialis:dateOriginal a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "date original"@en , "data original"@pt , "原典の日付"@ja ;
    rdfs:range xsd:string ;
    rdfs:comment "Free-text rendering of a date as given by the source, when it differs from the Gregorian-equivalent EDTF value stored in the paired date property (e.g. an era-native or lunisolar date). Paired with martialis:dateCalendar. Used across several unrelated subject types (LifeEvent, RankAssertion, HonorAssertion, foundedEvent/dissolvedEvent, Event, Source), so no single rdfs:domain is declared - same convention as martialis:sourceRefType."@en ;
    schema:domainIncludes martialis:LifeEvent , martialis:RankAssertion , martialis:HonorAssertion , martialis:Event , martialis:Source ;
    vann:example "A birth recorded in a lunisolar source: schema:birthDate \"1868-10-15\" ; martialis:dateOriginal \"Meiji 1, 9th month\" ; martialis:dateCalendar \"japanese-lunisolar\" ; martialis:earliestYear \"1868\" ; martialis:latestYear \"1868\" ."@en .

martialis:dateCalendar a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "date calendar"@en , "calendário da data"@pt , "暦法"@ja ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/date-calendar> ;
    rdfs:comment "Calendar system a source's own date (martialis:dateOriginal) was originally expressed in: julian, japanese-nengo (post-1873 era-year numbering, a labeling difference on an already-Gregorian calendar), japanese-lunisolar (pre-1873, a genuinely different calendar), other-lunisolar, or other. See Date in database/schemas/martialis.schema.json for the full definition. No single rdfs:domain is declared - same convention as martialis:dateOriginal."@en ;
    schema:domainIncludes martialis:LifeEvent , martialis:RankAssertion , martialis:HonorAssertion , martialis:Event , martialis:Source .

martialis:earliestYear a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "earliest year"@en , "ano mais antigo"@pt , "最早年"@ja ;
    rdfs:range xsd:integer ;
    rdfs:comment "Earliest year consistent with a Date value, materialized by bin/martialis at RDF conversion time (an exact/approximate/uncertain date's own year; the lower bound of an interval, unspecified-digit year, or discrete set). Paired with martialis:latestYear; together they let SHACL date-comparison shapes (birth-before-death, teacher age, interaction period) compare bounds as plain integers instead of parsing the EDTF string inline. No single rdfs:domain is declared, matching martialis:dateOriginal."@en ;
    schema:domainIncludes martialis:LifeEvent , martialis:Source , martialis:RankAssertion , martialis:HonorAssertion , martialis:Event .

martialis:latestYear a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "latest year"@en , "ano mais recente"@pt , "最晚年"@ja ;
    rdfs:range xsd:integer ;
    rdfs:comment "Latest year consistent with a Date value, materialized alongside martialis:earliestYear - see its comment for the full explanation."@en ;
    schema:domainIncludes martialis:LifeEvent , martialis:Source , martialis:RankAssertion , martialis:HonorAssertion , martialis:Event .

# Evidence & Provenance
#################################################################

martialis:SourceAssertionRelation a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "source assertion relation"@en , "relação fonte-asserção"@pt , "資料参照関係"@ja ;
    rdfs:subClassOf prov:Entity ;
    rdfs:comment "Represents how a source relates to an assertion."@en .

martialis:hasEvidence a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has evidence"@en , "tem evidência"@pt , "根拠を有する"@ja ;
    rdfs:range martialis:SourceAssertionRelation ;
    rdfs:comment "Links an entity (assertion, interaction, life event, or top-level entity) to its evidence records."@en ;
    schema:domainIncludes martialis:Assertion , martialis:TeacherInteraction , martialis:LifeEvent , martialis:Person , martialis:Style , martialis:Place , martialis:Organization , martialis:Event , martialis:Source , martialis:RankingSystem .

martialis:imageAttribution a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "image attribution"@en , "atribuição de imagem"@pt , "画像クレジット"@ja ;
    rdfs:comment "Credits/attribution for an image or video, indicating its source. Distinct from hasEvidence: attribution carries no supports/contradicts semantics."@en ;
    schema:domainIncludes martialis:Person , martialis:Style , martialis:Place , martialis:Organization , martialis:Event .

martialis:basedOnSource a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "based on source"@en , "baseado em fonte"@pt , "典拠資料"@ja ;
    rdfs:comment "The Source backing this evidence record."@en ;
    rdfs:domain martialis:SourceAssertionRelation ;
    rdfs:range martialis:Source .

martialis:supports a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "supports"@en , "apoia"@pt , "支持する"@ja ;
    rdfs:domain martialis:SourceAssertionRelation ;
    rdfs:range xsd:boolean ;
    rdfs:comment "Whether the source supports or contradicts the assertion. Conceptually alignable with CiTO (true ~ cito:citesAsEvidence, false ~ cito:disagreesWith); not a formal owl:equivalentProperty since CiTO's predicates are object properties choosing between two IRIs, not a boolean value on one property."@en .

martialis:evidenceWeight a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "evidence weight"@en , "peso da evidência"@pt , "根拠の重み"@ja ;
    rdfs:domain martialis:SourceAssertionRelation ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/evidence-weight> ;
    rdfs:comment "Qualitative weight of evidence: low, medium, high, unknown."@en .

martialis:quotation a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "quotation"@en , "citação"@pt , "引用"@ja ;
    rdfs:domain martialis:SourceAssertionRelation ;
    rdfs:range xsd:string ;
    rdfs:comment "Direct quote from the source. Conceptually alignable with prov:wasQuotedFrom; not a formal rdfs:subPropertyOf since PROV-O's term relates two prov:Entity resources, not a resource to a literal string."@en .

martialis:sourceLocation a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "source location"@en , "localização na fonte"@pt , "資料内位置"@ja ;
    rdfs:domain martialis:SourceAssertionRelation ;
    rdfs:range xsd:string ;
    rdfs:comment "The value of the SourceRef locator - a page number, timestamp, section, etc. - where the cited claim sits within the work (YAML: locator). Paired with martialis:sourceLocatorLabel for what kind of locator it is. Distinct from a Source's own volume/issue/page (martialis:volume etc.), which say where the whole work sits within its container."@en .

martialis:sourceLocatorLabel a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "source locator label"@en , "tipo de localização"@pt , "ロケーター種別"@ja ;
    rdfs:domain martialis:SourceAssertionRelation ;
    rdfs:range xsd:string ;
    dcterms:conformsTo <https://docs.citationstyles.org/en/stable/specification.html#locators> ;
    rdfs:comment "What kind of locator martialis:sourceLocation is - CSL's citation-locator vocabulary (page, volume, chapter, folio, section, timestamp, sub-verbo, ...). Optional; omitted when the locator is a compound or free-text pointer that doesn't fit one CSL type. Stays a plain string per dcterms:conformsTo above, not a local SKOS scheme: CSL has no dereferenceable RDF representation to point at (confirmed - citationstyles.org/ontology/ is an HTML redirect page, not SKOS/RDF), so re-minting local concepts for someone else's token vocabulary would be transcription with a maintenance tail, not modelling gain. A prior version of this ontology did mint local scheme files with skos:exactMatch to these CSL anchors; that was invalid SKOS (skos:exactMatch's domain/range is skos:Concept, and skos:ConceptScheme is owl:disjointWith skos:Concept - confirmed via RDFS entailment) and has been removed."@en .

martialis:coversProperty a owl:AnnotationProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "covers property"@en , "cobre propriedade"@pt , "対象プロパティ"@ja ;
    rdfs:domain martialis:SourceAssertionRelation ;
    rdfs:range rdf:Property ;
    rdfs:comment "The entity property this evidence backs, as the predicate IRI itself (e.g. schema:name, martialis:birthEvent), so evidence can be joined to the claim it supports. An OWL annotation property rather than an object property because its range is a property, not an individual - OWL 2 DL does not allow punning a property as an instance of a datatype/object property's range. Only legal on entity-level evidence (SourceRef.covers on EntityEvidenceRef in martialis.schema.json); nested evidence and Photo/Video attribution never carry it."@en .

martialis:sourceRefType a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "source ref type"@en , "tipo de referência"@pt , "資料参照種別"@ja ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/source-ref-type> ;
    rdfs:comment "Proximity to evidence: primary, secondary, tertiary, unknown. See ontology/vocabularies.ttl's source-ref-type scheme."@en ;
    schema:domainIncludes martialis:SourceAssertionRelation .

martialis:researchNote a owl:AnnotationProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "research note"@en , "nota de investigação"@pt , "調査メモ"@ja ;
    rdfs:subPropertyOf skos:editorialNote ;
    rdfs:range xsd:string ;
    rdfs:comment "A curatorial note recording what is known, suspected, or still to be investigated about a record - e.g. a lead to follow, a teacher named in a source but not yet an entity, a reason a claim needs a second look. Addressed to a maintainer rather than a reader: reader-facing content belongs on schema:description instead. Not evidence, and never a substitute for it. Aligned with skos:editorialNote ('a note for an editor, translator or maintainer'), which SKOS is imported for; minted locally rather than used directly so the term reads in the project's own vocabulary. YAML: notes, on every entity and on Teacher/Interaction/Rank/Honor/InstructorRole/OfficerRole/Participation/AffiliationAssertion/DocumentTransmission/IdentityCandidate/StyleRelationship."@en ;
    schema:domainIncludes martialis:Assertion , martialis:TeacherInteraction , martialis:Participation , martialis:InstructorRole , martialis:OfficerRole , martialis:Person , martialis:Style , martialis:Place , martialis:Organization , martialis:Event , martialis:Source , martialis:RankingSystem .

# Confidence Assessment
#################################################################

martialis:Confidence a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "confidence"@en , "confiança"@pt , "信頼度評価"@ja ;
    rdfs:subClassOf prov:Entity ;
    rdfs:comment "A confidence assessment applied to an assertion."@en ;
    vann:example "martialis:conf01 a martialis:Confidence ; martialis:confidenceLevel 2 ; martialis:confidenceRationale \"Two independent secondary sources agree; no primary document located.\" ; martialis:assessedBy <https://martial.is/agent/JDP> ."@en .

martialis:hasConfidence a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has confidence"@en , "tem confiança"@pt , "信頼度評価を有する"@ja ;
    rdfs:comment "Links an Assertion or a Participation to its Confidence assessment (level plus rationale). No single rdfs:domain is declared: Participation is disjoint from Assertion, so a strict Assertion domain would make any Participation carrying a confidence block inconsistent under the reasoner - same convention as martialis:dateOriginal."@en ;
    schema:domainIncludes martialis:Assertion , martialis:Participation ;
    rdfs:range martialis:Confidence .

martialis:assessedBy a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "assessed by"@en , "avaliado por"@pt , "評価者"@ja ;
    rdfs:domain martialis:Confidence ;
    rdfs:range martialis:Agent ;
    rdfs:comment "The agent who performed the confidence assessment, identified under https://martial.is/agent/ (see martialis:Agent). Values are expanded from a bare slug to a full agent IRI at export time, mirroring the Wikidata Q-ID expansion."@en .

martialis:confidenceLevel a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "confidence level"@en , "nível de confiança"@pt , "信頼度"@ja ;
    rdfs:domain martialis:Confidence ;
    rdfs:range xsd:integer ;
    rdfs:comment "Confidence level: 0=Disputed, 1=Uncertain, 2=Probable, 3=Confirmed."@en .

martialis:confidenceRationale a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "confidence rationale"@en , "fundamentação da confiança"@pt , "信頼度の根拠"@ja ;
    rdfs:comment "Free-text justification for the confidence level: what the evidence does and does not establish."@en ;
    rdfs:domain martialis:Confidence ;
    rdfs:range xsd:string .

# RankingSystem Properties
#################################################################

martialis:rankingSystemKind a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "ranking system kind"@en , "tipo de sistema de graduação"@pt , "段級制度種別"@ja ;
    rdfs:domain martialis:RankingSystem ;
    rdfs:range xsd:string ;
    rdfs:comment "'numbered' (an open-ended integer ladder - grades are recorded as rankType/rankOrdinal on the Rank, never minted as concepts) or 'enumerated' (a fixed, named, ordered list of grades - a skos:ConceptScheme, see martialis:gradeScheme). A plain string rather than a skos:Concept: this is a structural discriminator of how a RankingSystem's grades are shaped, not a domain vocabulary a curator picks from an evolving list."@en .

martialis:minOrdinal a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "min ordinal"@en , "número mínimo"@pt , "最小段位数"@ja ;
    rdfs:domain martialis:RankingSystem ;
    rdfs:range xsd:integer ;
    rdfs:comment "Lowest valid grade number (kyu side), if this system bounds it. Absent for the unbounded default."@en .

martialis:maxOrdinal a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "max ordinal"@en , "número máximo"@pt , "最大段位数"@ja ;
    rdfs:domain martialis:RankingSystem ;
    rdfs:range xsd:integer ;
    rdfs:comment "Highest valid grade number (dan side), if this system bounds it. Absent for the unbounded default - do not hardcode a ceiling that belongs to one style's specific federation rather than the system itself."@en .

martialis:gradeScheme a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "grade scheme"@en , "esquema de graus"@pt , "級位スキーム"@ja ;
    rdfs:domain martialis:RankingSystem ;
    rdfs:range skos:ConceptScheme ;
    rdfs:comment "The skos:ConceptScheme enumerating this system's grades (see ontology/vocabularies.ttl), required when martialis:rankingSystemKind is 'enumerated'."@en .

martialis:derivedFromSystem a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "derived from system"@en , "derivado de sistema"@pt , "派生元制度"@ja ;
    rdfs:domain martialis:RankingSystem ;
    rdfs:range martialis:RankingSystem ;
    rdfs:comment "This RankingSystem's grading concept derives from a more generic ancestor system, when it is a variant or adaptation rather than an independent invention. Unused by any entity as of this property's introduction (2.1.0) - added so future systems (national federation variants, wrestling-style grades, etc.) can link to a common ancestor rather than each restating the same facts. Distinct from martialis:variantOf (Style-to-Style) and the affiliation-relation vocabulary's derived_from concept (Organization/Place genealogy): this one is RankingSystem-to-RankingSystem."@en .

# Style Properties
#################################################################

martialis:styleType a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "style type"@en , "tipo de estilo"@pt , "流派種別"@ja ;
    rdfs:domain martialis:Style ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/style-classification> ;
    rdfs:comment "Origin period, deliberately culture-neutral: traditional, modern, other. Culture-specific period terms (koryu/gendai for Japanese arts, neijia/waijia for Chinese arts) belong in tags, not here - see martialis:styleForm for the separate composition/practice axis (hybrid, sport)."@en .

martialis:styleForm a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "style form"@en , "forma do estilo"@pt , "流派形態"@ja ;
    rdfs:domain martialis:Style ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/style-form> ;
    rdfs:comment "How the style is composed or practised, independent of styleType's origin-period axis: hybrid and/or sport. Multi-valued - a style may be both, one, or neither. 'sport' means practised principally as a rule-governed competition with no substantial non-competitive identity (Boxing, MMA, Sambo); it does not mean merely 'has a competitive form' (Judo and Shuai Jiao do not qualify)."@en .

# martialis:RankingSystem is declared near the top of this file (Core
# Domain Classes), alongside Style/Organization/Place/Source/Event -
# it is a first-class entity type, not a Style-scoped classifier.
# martialis:rankSystem and martialis:confersRank are declared in the
# Assertion Structure Properties block above, alongside rankType/
# rankOrdinal/rankGrade/honorGrade.

martialis:foundedEvent a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "founded event"@en , "evento de fundação"@pt , "創設イベント"@ja ;
    rdfs:range martialis:LifeEvent ;
    rdfs:comment "Founding event with date, location, and sources. Used by Style, Organization, and Place; also by RankingSystem (YAML key 'instituted', mapped to this same predicate - a grading system being 'instituted' is the same kind of establishment fact as a Style/Organization/Place being 'founded', so it reuses the predicate rather than mint a duplicate one)."@en ;
    schema:domainIncludes martialis:Style , martialis:Organization , martialis:Place , martialis:RankingSystem .

martialis:dissolvedEvent a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "dissolved event"@en , "evento de dissolução"@pt , "解散イベント"@ja ;
    rdfs:range martialis:LifeEvent ;
    rdfs:comment "Dissolution event, if applicable. Used by Style, Organization, and Place."@en ;
    schema:domainIncludes martialis:Style , martialis:Organization , martialis:Place .

martialis:dissolutionManner a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "dissolution manner"@en , "modo de dissolução"@pt , "解散態様"@ja ;
    rdfs:domain martialis:LifeEvent ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/dissolution-manner> ;
    rdfs:comment "Organization-only. How the organization ended: merged, split, superseded, suppressed, renamed, defunct, unknown. Pairs with the successor's genealogy affiliationRelation where one exists (merged<->merged_from, superseded<->replaces, renamed<->renamed_from) but is independently sourced on this record, since the successor may not yet be in the database."@en .

martialis:dissolutionReason a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "dissolution reason"@en , "motivo da dissolução"@pt , "解散理由"@ja ;
    rdfs:domain martialis:LifeEvent ;
    rdfs:range xsd:string ;
    rdfs:comment "Organization-only. Free-text detail no closed vocabulary carries: a decree number, an occupation order, the terms of a unification."@en .

martialis:founder a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "founder"@en , "fundador"@pt , "創始者"@ja ;
    rdfs:range martialis:Person ;
    rdfs:comment "Person(s) who founded the style, organization, or place. Multi-valued to support co-founders."@en ;
    schema:domainIncludes martialis:Style , martialis:Organization , martialis:Place .

# Source Properties
#################################################################

martialis:sourceType a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "source type"@en , "tipo de fonte"@pt , "資料種別"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:string ;
    dcterms:conformsTo <https://docs.citationstyles.org/en/stable/specification.html#appendix-iii-types> ;
    rdfs:comment "Bibliographic form: the CSL-JSON `type` vocabulary verbatim, plus one documented extension - 'website', for a web outlet acting as a container (see docs/DATA-MODEL.md). 'website' exports as CSL `periodical`. Stays a plain string per dcterms:conformsTo above rather than a local SKOS scheme - see martialis:sourceLocatorLabel's comment for why."@en .

martialis:sourceGenre a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "source genre"@en , "género da fonte"@pt , "資料ジャンル"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/source-genre> ;
    rdfs:comment "What the content is (biography, obituary, interview, promotional, ...), independent of sourceType's bibliographic form - a `webpage` can be any of these."@en .

martialis:partOf a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "part of"@en , "parte de"@pt , "所属する"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range martialis:Source ;
    rdfs:subPropertyOf dcterms:isPartOf ;
    rdfs:comment "The container this Source is part of: an article's journal or website edition, a chapter's book. Aligned with dcterms:isPartOf (inverse dcterms:hasPart); also mappable to schema:isPartOf. A SourceRef always cites the most specific Source and never points at a container to mean an item inside it."@en .

martialis:editionOf a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "edition of"@en , "edição de"@pt , "版元作品"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:comment "Links a Source to the small anonymous node (martialis:editionOfSource, martialis:editionRelationType) recording which work it is an edition, translation, reprint, or facsimile of - the FRBR Work/Expression axis, distinct from martialis:partOf containment."@en .

martialis:editionOfSource a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "edition of source"@en , "edição de fonte"@pt , "元作品"@ja ;
    rdfs:range martialis:Source ;
    rdfs:subPropertyOf dcterms:isVersionOf ;
    rdfs:comment "The work this edition/translation/reprint/facsimile is of. Aligned with dcterms:isVersionOf (\"a resource of which the described resource is a version, edition, or adaptation\")."@en .

martialis:editionRelationType a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "edition relation type"@en , "tipo de relação de edição"@pt , "版種別"@ja ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/edition-relation> ;
    rdfs:comment "edition | translation | reprint | facsimile. When 'translation', also mappable to bibo:translationOf - not a formal axiom here since the BIBO predicate applies only to that one value, not the property as a whole."@en .

martialis:hasContributor a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has contributor"@en , "tem contribuidor"@pt , "寄与者を有する"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:comment "Links a Source to a contributor node (a CSL contributor role plus a CSL name-variable shape), replacing the former plain authors/editors string arrays."@en .

martialis:contributorRole a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "contributor role"@en , "papel do contribuidor"@pt , "寄与者役割"@ja ;
    rdfs:range xsd:string ;
    dcterms:conformsTo <https://docs.citationstyles.org/en/stable/specification.html#contributor-roles> ;
    rdfs:comment "CSL's 26-value contributor role vocabulary: author, editor, translator, interviewer, guest, host, director, narrator, recipient, container-author, original-author, compiler, illustrator, and others. Stays a plain string per dcterms:conformsTo above rather than a local SKOS scheme - see martialis:sourceLocatorLabel's comment for why."@en .

martialis:contributorPerson a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "contributor person"@en , "contribuidor pessoa"@pt , "寄与者（人物）"@ja ;
    rdfs:range martialis:Person ;
    rdfs:comment "Links a contributor to their own Person entry, when they are in the database - martial arts sourcing is unusually self-referential, so a contributor also being a documented practitioner is common, not an edge case."@en .

martialis:contributorOrg a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "contributor org"@en , "contribuidor organização"@pt , "寄与者（組織）"@ja ;
    rdfs:range martialis:Organization ;
    rdfs:comment "Links a corporate contributor (e.g. an editorial board credited as a body) to its own Organization entry, when it is in the database."@en .

martialis:droppingParticle a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "dropping particle"@en , "partícula omitida"@pt , "前置詞要素"@ja ;
    rdfs:range xsd:string ;
    rdfs:comment "CSL name-variable dropping-particle: a name part dropped when the name is alphabetized (e.g. 'van' in 'van Beethoven, Ludwig')."@en .

martialis:nonDroppingParticle a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "non dropping particle"@en , "partícula mantida"@pt , "非前置詞要素"@ja ;
    rdfs:range xsd:string ;
    rdfs:comment "CSL name-variable non-dropping-particle: a name part retained when the name is alphabetized (e.g. 'de' in 'de Gaulle, Charles')."@en .

martialis:publisherOrg a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "publisher org"@en , "organização editora"@pt , "出版組織"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range martialis:Organization ;
    rdfs:comment "Links a Source's publisher to its own Organization entry, when it is in the database - what makes automatic interestedness detection possible (is the publisher of a source also the subject of the claim it backs)."@en .

martialis:accessed a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "accessed"@en , "acedido em"@pt , "アクセス日"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:string ;
    rdfs:comment "When the curator consulted this source (CSL 'accessed'). No standardised external RDF predicate exists for access dates; this is a native term."@en .

martialis:archiveDate a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "archive date"@en , "data de arquivo"@pt , "アーカイブ日"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:string ;
    rdfs:comment "Snapshot date of archive_url. Distinct from schema:archivedAt, which carries the archive_url IRI itself, not a date."@en .

martialis:peerReview a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "peer review"@en , "revisão por pares"@pt , "査読"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:string ;
    rdfs:comment "Whether the venue is peer-reviewed: peer-reviewed | not-peer-reviewed | unknown. A fact about the venue - set once on a container Source and inherited by its items via partOf, never decided per item. Value alignment: see the Peer Review Status Vocabulary in ontology/vocabularies/peer-review.ttl (DRIVER/OpenAIRE values)."@en ;
    rdfs:seeAlso <https://w3id.org/martialis/vocab/peer-review> ;
    vann:example "Set once on the container: <journalX> a martialis:Source ; martialis:sourceType \"website\" ; martialis:peerReview \"peer-reviewed\" . Items inherit it via partOf; never restate per item."@en .

martialis:selfPublished a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "self published"@en , "auto-publicado"@pt , "自費出版"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:boolean ;
    rdfs:comment "Whether the publisher and the contributor(s) are the same party. Preferably derived - publisher.org_id or a contributor's person_id/org_id coinciding with the publisher - rather than asserted; a quality check flags a stored value that disagrees with the derivable one."@en .

martialis:volume a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "volume"@en , "volume"@pt , "巻"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:subPropertyOf bibo:volume ;
    rdfs:comment "Where this work sits in its container: volume."@en .

martialis:issue a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "issue"@en , "número"@pt , "号"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:subPropertyOf bibo:issue ;
    rdfs:comment "Where this work sits in its container: issue."@en .

martialis:page a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "page"@en , "página"@pt , "頁"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:subPropertyOf bibo:pages ;
    rdfs:comment "Where this work sits in its container: page or page range (e.g. '42-60'). Distinct from a SourceRef's own locator (martialis:sourceLocation), which points at where the cited claim sits within the work."@en ;
    skos:scopeNote "Distinct from a SourceRef's own locator (martialis:sourceLocation), which points at where the cited claim sits within the work; page says where the whole work sits within its container."@en .

martialis:edition a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "edition"@en , "edição"@pt , "版"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:string ;
    rdfs:comment "CSL 'edition' (e.g. '2nd')."@en .

martialis:chapterNumber a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "chapter number"@en , "número do capítulo"@pt , "章番号"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:string ;
    rdfs:comment "CSL 'chapter-number'."@en .

martialis:partNumber a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "part number"@en , "número da parte"@pt , "部番号"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:string ;
    rdfs:comment "CSL 'part'. Not to be confused with martialis:partOf (containment)."@en ;
    skos:scopeNote "Not to be confused with martialis:partOf (containment)."@en .

martialis:section a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "section"@en , "secção"@pt , "節"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:string ;
    rdfs:comment "CSL 'section'."@en .

martialis:archive a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "archive"@en , "arquivo"@pt , "所蔵機関"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:string ;
    rdfs:comment "Archival repository holding this item (e.g. 'National Diet Library'). CSL 'archive'."@en .

martialis:archiveCollection a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "archive collection"@en , "coleção do arquivo"@pt , "所蔵コレクション"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:string ;
    rdfs:comment "CSL 'archive_collection'."@en .

martialis:archiveLocation a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "archive location"@en , "localização no arquivo"@pt , "所蔵場所"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:range xsd:string ;
    rdfs:comment "CSL 'archive_location'."@en .

martialis:callNumber a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "call number"@en , "cota"@pt , "請求記号"@ja ;
    rdfs:domain martialis:Source ;
    rdfs:subPropertyOf bibo:locator ;
    rdfs:comment "Shelfmark or call number within the archive. CSL 'call-number'."@en .

martialis:doi a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "doi"@en , "doi"@pt , "DOI"@ja ;
    rdfs:subPropertyOf bibo:doi ;
    rdfs:comment "Digital Object Identifier. Moved off the generic schema:identifier once a second identifier type existed (pmid, oclc, ...), which would otherwise have made identifier type ambiguous under one shared predicate."@en ;
    schema:domainIncludes martialis:Source .

martialis:pmid a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "pmid"@en , "pmid"@pt , "PMID"@ja ;
    rdfs:range xsd:string ;
    rdfs:comment "PubMed identifier (CSL 'PMID')."@en ;
    schema:domainIncludes martialis:Source .

martialis:pmcid a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "pmcid"@en , "pmcid"@pt , "PMCID"@ja ;
    rdfs:range xsd:string ;
    rdfs:comment "PubMed Central identifier (CSL 'PMCID')."@en ;
    schema:domainIncludes martialis:Source .

martialis:oclc a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "oclc"@en , "oclc"@pt , "OCLC"@ja ;
    rdfs:range xsd:string ;
    rdfs:comment "WorldCat/OCLC control number."@en ;
    schema:domainIncludes martialis:Source .

martialis:archiveOrgId a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "archive org id"@en , "id do archive.org"@pt , "archive.org ID"@ja ;
    rdfs:range xsd:string ;
    rdfs:comment "archive.org item identifier."@en ;
    schema:domainIncludes martialis:Source .

martialis:ndl a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "ndl"@en , "ndl"@pt , "NDL"@ja ;
    rdfs:range xsd:string ;
    rdfs:comment "National Diet Library (Japan) identifier - relevant for Japanese-language martial arts sources."@en ;
    schema:domainIncludes martialis:Source .

martialis:cinii a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "cinii"@en , "cinii"@pt , "CiNii"@ja ;
    rdfs:range xsd:string ;
    rdfs:comment "CiNii (Japanese academic literature database) identifier."@en ;
    schema:domainIncludes martialis:Source .

martialis:handle a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "handle"@en , "handle"@pt , "Handle"@ja ;
    rdfs:range xsd:string ;
    rdfs:comment "Handle System persistent identifier."@en ;
    schema:domainIncludes martialis:Source .

# Peer Review Vocabulary
#################################################################
# Value alignment only, via skos:notation - martialis:peerReview
# (above) remains a plain xsd:string DatatypeProperty; there is no
# standardised RDF *predicate* for peer-review status, only a
# standard *value* vocabulary (DRIVER/OpenAIRE Guidelines
# info:eu-repo/semantics/*), which is what the scheme documents.
# Consistent with this ontology's documentation-grade, no-inference
# policy: nothing is joined against the data at validation time.
#
# The scheme itself (the Peer Review Status Vocabulary and its
# concepts) is one ConceptScheme among several in ontology/vocabularies.ttl,
# not here - a separate value vocabulary (DRIVER/OpenAIRE), separable
# from the core ontology and droppable with zero effect on it or on
# validation. Cross-linked via rdfs:seeAlso both ways. This is the
# correct pattern for an external standard whose identifiers ARE real
# skos:Concepts to align against (via skos:exactMatch, concept-to-
# concept) - contrast with CSL above (martialis:sourceType etc.),
# whose tokens have no RDF representation at all and so stay plain
# strings with dcterms:conformsTo, and with country below, whose
# authority publishes real dereferenceable IRIs that are reused
# directly rather than aligned against a local copy.

# Country Values
#################################################################
# YAML keeps bare ISO 3166-1 alpha-3 codes ("JPN", "USA") - the
# database/{persons,places,orgs}/<CODE>/ directory layout depends on
# them. At RDF conversion time bin/martialis's resolve_country_terms
# maps each code to the EU Publications Office's own country authority
# IRI - e.g. "JPN" -> <http://publications.europa.eu/resource/
# authority/country/JPN> - by concatenation (EU_COUNTRY_IRI_BASE +
# code), checked against the accepted-code list in
# ontology/country-codes.txt (the authority's own scheme membership,
# not a copy of its RDF - see docs/VALIDATION.md), so export/data.ttl
# carries the authority's IRIs directly, never a local mirror. Reusing
# the authority's own IRIs is the correct pattern once one exists and
# dereferences - re-minting a local scheme (as a prior ontology
# revision did in ontology/vocabularies/country.ttl, since deleted)
# duplicates a maintained vocabulary instead of linking to it, and
# would have gone stale on the next ISO revision. The structural SHACL
# shape AddressCountryShape backstops the mapping: any bare string, or
# an IRI outside the two known country namespaces, that reaches the
# export fails validation.
#
# One genuinely local code remains, because the authority does not
# cover it: Ryukyu Kingdom (country:XRY, ISO 3166-1's user-assigned
# range, skos:broadMatch to the authority's JPN concept) - see
# ontology/vocabularies.ttl's country scheme. A second local code,
# XIN ("International / non-geographic"), was removed: the EU
# authority itself defines XIN to mean "international waters", and the
# collision only became visible once the fixture-vs-authority code
# space was unified - see the scheme's skos:changeNote.

# Organization Properties
#################################################################

martialis:orgType a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "org type"@en , "tipo de organização"@pt , "組織種別"@ja ;
    rdfs:domain martialis:Organization ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/org-classification> ;
    rdfs:comment "Type: federation, governing_body, school, association, other. 'school' is a martial arts school/ryuha (a teaching lineage), not an education institution - that is a Place with placeType 'school'."@en .

martialis:parentOrg a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "parent org"@en , "organização mãe"@pt , "上位組織"@ja ;
    rdfs:subPropertyOf org:subOrganizationOf ;
    rdfs:domain martialis:Organization ;
    rdfs:range martialis:Organization ;
    rdfs:comment "Materialized convenience edge, not authored directly: derived at export time from AffiliationAssertions where affiliationRelation is 'branch_of' and no end year is recorded, so a lapsed hierarchy never surfaces as a present-tense parent. Aligned with the W3C Organization Ontology as a subproperty of org:subOrganizationOf. See Materialized Convenience Edges below."@en .

# Affiliation Properties
#################################################################
# Unlike InstructorRole, an affiliation IS a claim about a relationship
# (which body a Place or Organization belongs to, branches from, or is
# recognised by) and so is assertion-shaped like TeacherAssertion/
# HonorAssertion/StyleRelationAssertion, not a bare venue-staff fact.
#
# affiliationRelation splits into two families - TIES between two
# currently-persisting bodies (member_of, branch_of, recognised_by) and
# GENEALOGY claims about how the subject organization itself came to
# exist (derived_from, split_from, merged_from, replaces, renamed_from).
# Genealogy relations are materialized into org:ChangeEvent nodes at
# export time - see Materialized Convenience Edges below.

martialis:AffiliationAssertion a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "affiliation assertion"@en , "asserção de afiliação"@pt , "所属関係アサーション"@ja ;
    rdfs:subClassOf martialis:Assertion ;
    rdfs:comment "A typed, sourced claim that the subject (a Place or an Organization) is affiliated with the object (an Organization). Two families of relation kind (see affiliationRelation): ties between two currently-persisting bodies (member_of, branch_of, recognised_by), and genealogy claims about how the subject organization came to exist (derived_from, split_from, merged_from, replaces, renamed_from) - Organization-only, the object may no longer exist. A schism where the subject changes which body it is affiliated with is expressed as two AffiliationAssertions with adjacent validDuring periods, not a dedicated relation value; composing two hops (e.g. Place member_of Org, Org recognised_by IntlOrg) into an inferred umbrella is a query-time interval intersection, not an entailment, and is documented separately rather than materialized."@en ;
    vann:example "TIES: <dojo> martialis:hasAffiliationAssertion [ martialis:object <aikikai> ; martialis:affiliationRelation \"recognised_by\" ; martialis:validDuring [ martialis:startYear 1970 ; martialis:endYear 1979 ] ] . GENEALOGY: <newBody> martialis:hasAffiliationAssertion [ martialis:object <oldBody> ; martialis:affiliationRelation \"split_from\" ] ."@en .

martialis:hasAffiliationAssertion a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has affiliation assertion"@en , "tem asserção de afiliação"@pt , "所属関係アサーションを有する"@ja ;
    rdfs:range martialis:AffiliationAssertion ;
    rdfs:comment "Domain intentionally omitted: applies to both Place and Organization."@en ;
    schema:domainIncludes martialis:Place , martialis:Organization .

martialis:affiliationRelation a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "affiliation relation"@en , "relação de afiliação"@pt , "所属関係"@ja ;
    rdfs:domain martialis:AffiliationAssertion ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/affiliation-relation> ;
    rdfs:comment "Relation kind. TIES (to a currently-persisting, distinct body): member_of (voluntary membership, the default for a Place affiliating with its governing body), branch_of (structurally a national/regional subdivision - materialized as parentOrg when current), recognised_by (technical/grading authority, distinct from membership - the style-umbrella schism case, e.g. a dojo recognised by Aikikai then by Iwama Shin Shin Aiki Shuren Kai). GENEALOGY (Organization-only; object may no longer exist; none assert which side, if any, is the sole 'official' continuation; materialized into an org:ChangeEvent when there is a startYear - see Materialized Convenience Edges below): derived_from (underspecified lineage claim - mechanism unclear or genuinely contested, e.g. several organizations independently claiming to continue one predecessor after its dissolution), split_from (formed by breaking away from the object, which continued to exist), merged_from (formed by union with the object, which ceased to exist separately; one triple per constituent for a multi-way merger), replaces (took over the object's role/mandate by an external authority's act - statute, decree, occupation order - rather than a voluntary choice), renamed_from (same institution under a new name; an ordinary rename should prefer schema:alternateName on one entity instead)."@en .

# Instructor Role Properties
#################################################################
# A venue-staff record, NOT a lineage edge. Nothing in this block is
# materialized into wasTaughtBy/teaches (see Materialized Convenience
# Edges below) and no reasoning derives a person-to-person teaching
# claim from it.

martialis:InstructorRole a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "instructor role"@en , "papel de instrutor"@pt , "指導員役職"@ja ;
    rdfs:subClassOf prov:Entity ;
    rdfs:comment "A time-bounded, sourced record that a Person served on the instructional staff of a Place. Deliberately NOT a subclass of martialis:Assertion: it is a fact about the venue, not a claim about a teacher-student relationship. Person-to-person transmission is TeacherAssertion. Reserved for the case martialis:taughtAt cannot derive: a sourced staff fact with no specific named student. When a TeacherAssertion interaction already places the person there, that is already covered by the materialized taughtAt edge - see Materialized Convenience Edges below."@en ;
    skos:scopeNote "Person-to-person transmission is TeacherAssertion; when a TeacherAssertion interaction already places the person at the venue, the materialized taughtAt edge already covers it - reserve this class for sourced staff facts with no specific named student."@en .

martialis:hasInstructorRole a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has instructor role"@en , "tem papel de instrutor"@pt , "指導員役職を有する"@ja ;
    rdfs:domain martialis:Place ;
    rdfs:range martialis:InstructorRole ;
    rdfs:comment "Links a venue to a record of someone who taught there."@en .

martialis:instructor a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "instructor"@en , "instrutor"@pt , "指導員"@ja ;
    rdfs:domain martialis:InstructorRole ;
    rdfs:range martialis:Person ;
    rdfs:comment "The person who taught at the venue. A venue-staff fact only: it asserts nothing about who that person's students were, and is never materialized into martialis:teaches / martialis:wasTaughtBy."@en .

martialis:instructorCapacity a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "instructor capacity"@en , "capacidade do instrutor"@pt , "指導員職位"@ja ;
    rdfs:domain martialis:InstructorRole ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/instructor-capacity> ;
    rdfs:comment "Capacity: head_instructor, instructor, technical_director, guest."@en .

martialis:instructorPeriod a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "instructor period"@en , "período do instrutor"@pt , "指導期間"@ja ;
    rdfs:comment "The period during which this person served on the venue's instructional staff."@en ;
    rdfs:domain martialis:InstructorRole ;
    rdfs:range martialis:TimeInterval .

martialis:instructorStyle a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "instructor style"@en , "estilo do instrutor"@pt , "指導流派"@ja ;
    rdfs:domain martialis:InstructorRole ;
    rdfs:range martialis:Style ;
    rdfs:comment "Which programme at the venue this instructor role covers, e.g. distinguishing an MMA class from a separately-graded BJJ class taught at the same gym. A dedicated predicate rather than martialis:assertedStyle/martialis:object, both of which are assertion-shaped and would misread a venue-staff fact as a rank/relation claim; this stays a fact about the venue, not a teaching claim."@en .

# Officer Role Properties
#################################################################
# An organization's own leadership record, the Organization-level
# analogue of InstructorRole above. NOT a subclass of martialis:Assertion
# (a sourced fact about the institution, not a subject/object claim) and
# NOT a Honor: Honor is a bestowed credential with no natural end (held
# once granted); OfficerRole is a tenure with a real start and end
# (served for a period, has a successor).

martialis:OfficerRole a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "officer role"@en , "cargo diretivo"@pt , "役員職"@ja ;
    rdfs:subClassOf prov:Entity ;
    rdfs:comment "A time-bounded, sourced record that a Person held an officer/leadership position (President, Vice-President, Teaching Coordinator, Secretary, etc.) in an Organization. Deliberately NOT a subclass of martialis:Assertion, and distinct from HonorAssertion: a Honor is held once granted with no natural end (Hanshi, an 8th dan title, 'President Emeritus' as a ceremonial continuation); an OfficerRole is served for a period with a real end (term expiry, resignation, succession)."@en ;
    skos:scopeNote "Distinct from HonorAssertion: a Honor is bestowed and held with no natural end (Hanshi, President Emeritus); an OfficerRole is served for a period with a real end (term expiry, resignation, succession)."@en .

martialis:hasOfficerRole a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has officer role"@en , "tem cargo diretivo"@pt , "役員職を有する"@ja ;
    rdfs:domain martialis:Organization ;
    rdfs:range martialis:OfficerRole ;
    rdfs:comment "Links an organization to a record of someone who held office there."@en .

martialis:officer a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "officer"@en , "dirigente"@pt , "役員"@ja ;
    rdfs:domain martialis:OfficerRole ;
    rdfs:range martialis:Person ;
    rdfs:comment "The person who held the office."@en .

martialis:officerTitle a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "officer title"@en , "título do cargo"@pt , "役職名"@ja ;
    rdfs:domain martialis:OfficerRole ;
    rdfs:range xsd:string ;
    rdfs:comment "Office held, e.g. President, Vice-President, Teaching Coordinator, Secretary-General. Free text rather than a closed enum (unlike instructorCapacity): governance titles vary too widely across organizations and countries to usefully close."@en .

martialis:officerPeriod a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "officer period"@en , "período do cargo"@pt , "在任期間"@ja ;
    rdfs:comment "The tenure period of this officer record; a real end (expiry, resignation, succession) is what distinguishes it from a Honor."@en ;
    rdfs:domain martialis:OfficerRole ;
    rdfs:range martialis:TimeInterval .

# Place Properties
#################################################################

martialis:placeType a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "place type"@en , "tipo de local"@pt , "場所種別"@ja ;
    rdfs:domain martialis:Place ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/place-classification> ;
    rdfs:comment "Type: dojo, club, university, school, temple, gym, military, academy, team, other. 'school' is an education institution (secondary/high school); a martial arts school/ryuha is an Organization with orgType 'school'."@en .

martialis:parentPlace a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "parent place"@en , "local mãe"@pt , "上位場所"@ja ;
    rdfs:comment "A containing or parent venue (e.g. a dojo within a university campus)."@en ;
    rdfs:domain martialis:Place ;
    rdfs:range martialis:Place .

# Event Properties
#################################################################

martialis:eventType a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "event type"@en , "tipo de evento"@pt , "行事種別"@ja ;
    rdfs:domain martialis:Event ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/event-classification> ;
    rdfs:comment "Type of event: founding, tournament, challenge, seminar, course, demonstration, grading, ceremony, recognition, exchange, or other - see ontology/vocabularies.ttl's event-classification scheme for the full definitions."@en .

martialis:Participation a owl:Class ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "participation"@en , "participação"@pt , "参加記録"@ja ;
    rdfs:subClassOf prov:Association ;
    rdfs:comment "A participation record in an Event: the participating agent (a Person or an Organization, via martialis:object), their role (martialis:participationRole), and the evidence for the claim. Aligned with PROV's Association - an agent's qualified involvement in an activity with a role - rather than prov:Entity (the pre-2.3.0 superclass): a participation is a relationship between an agent and an event, not a thing that exists."@en .

martialis:hasParticipation a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has participation"@en , "tem participação"@pt , "参加記録を有する"@ja ;
    rdfs:domain martialis:Event ;
    rdfs:range martialis:Participation ;
    rdfs:comment "Links an event to a participation record (object: the participating Person or Organization, participationRole: their role)."@en .

martialis:participationRole a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "participation role"@en , "papel na participação"@pt , "参加役割"@ja ;
    rdfs:domain martialis:Participation ;
    rdfs:range skos:Concept ;
    martialis:conceptScheme <https://w3id.org/martialis/vocab/event-role> ;
    rdfs:comment "The role an agent played in an Event: competitor, official, organizer, demonstrator, guest, instructor (teaching at a course/seminar), student (being taught at a course/seminar), or other - see ontology/vocabularies.ttl's event-role scheme. Organizations take the same roles (a team as competitor, a delegation as demonstrator). Split off from martialis:role in the 2.1.0 quality pass: event participation roles are a different domain from student-teacher relationship modes, and sharing one predicate silently forced event roles into the teacher-role scheme."@en .

martialis:participationStyle a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "participation style"@en , "estilo da participação"@pt , "参加流派"@ja ;
    rdfs:domain martialis:Participation ;
    rdfs:range martialis:Style ;
    rdfs:comment "The style a participant specifically taught or practised at this event - the attribution the event's own style_ids cannot carry: a multi-style course's roster names each instructor's art, while the event-level list is an unattributed set. Optional by design: omitted on single-style events (where the event's style_ids attribute everything) and whenever the source doesn't say. Candidate-instructor matching against a student's contextual-training style_id joins on this property, falling back to the event's style_ids only when the event has exactly one style."@en .

martialis:atEvent a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "at event"@en , "em evento"@pt , "行事にて"@ja ;
    rdfs:range martialis:Event ;
    rdfs:comment "Optional link from an assertion, interaction, or inline life event to the canonical Event record(s) it took place at or in the context of (martialis:Event, the hub): a rank received at a grading event, a teacher interaction at a seminar, an affiliation decided at a congress, a founding cross-linked to its founding event. The forward pointer(s) from the claim to the hub(s); query the inverse for 'everything that happened at this event'. Multivalued: one claim may reference several events (a rank received across a multi-venue tour). No single rdfs:domain is declared - the subject types are unrelated (TeacherInteraction, RankAssertion, HonorAssertion, DocumentTransmissionAssertion, AffiliationAssertion, LifeEvent), same convention as martialis:dateOriginal."@en ;
    schema:domainIncludes martialis:TeacherInteraction , martialis:RankAssertion , martialis:HonorAssertion , martialis:DocumentTransmissionAssertion , martialis:AffiliationAssertion , martialis:LifeEvent .

# Materialized Convenience Edges
#################################################################
# These are NOT inferred by OWL reasoning: the export pipeline
# (bin/martialis rdf) materializes them from the relevant Assertions
# (mostly TeacherAssertions, and, for trainedAt only, also
# ContextualTrainingAssertions; parentOrg above from AffiliationAssertions
# with affiliationRelation 'branch_of' and no end year; org:ChangeEvent
# below from AffiliationAssertions with a genealogy relation) so that
# consumers of data.ttl get direct edges without a reasoner.
# NegativeAssertions are excluded from materialization; ContextualTrainingAssertions
# never materialize wasTaughtBy/teaches (they carry no object).

martialis:wasTaughtBy a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "was taught by"@en , "foi aluno de"@pt , "師事した"@ja ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:Person ;
    rdfs:comment "Direct student-to-teacher edge, materialized at export time from TeacherAssertions."@en .

martialis:teaches a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "teaches"@en , "ensina"@pt , "教えた"@ja ;
    owl:inverseOf martialis:wasTaughtBy ;
    rdfs:comment "Direct teacher-to-student edge, materialized at export time from TeacherAssertions."@en .

martialis:taughtAt a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "taught at"@en , "ensinou em"@pt , "指導場所"@ja ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:Place ;
    rdfs:comment "Materialized at export time from TeacherAssertion interactions (TeacherInteraction.interactionPlace): this person is recorded as having taught at this place, at least once, sourced. Deliberately descriptive only - it is NOT a staffing/employment claim and does not imply the person was resident instructional staff (a single seminar visit satisfies it just as a decades-long tenure does). Distinct from InstructorRole, which is reserved for the case this cannot derive: a sourced staff fact with no specific named student. NegativeAssertions are excluded (they carry no interactions)."@en .

martialis:trainedAt a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "trained at"@en , "treinou em"@pt , "稽古場所"@ja ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:Place ;
    rdfs:comment "The student-side mirror of martialis:taughtAt: materialized at export time from the interactions of both TeacherAssertions and ContextualTrainingAssertions (TeacherInteraction.interactionPlace), this person is recorded as having trained at this place, at least once, sourced. Deliberately descriptive only, on the same terms as taughtAt - not a membership or enrolment claim. NegativeAssertions are excluded (they carry no interactions)."@en .

martialis:possiblySameAs a owl:ObjectProperty , owl:SymmetricProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "possibly same as"@en , "possivelmente o mesmo que"@pt , "同一人物の可能性"@ja ;
    rdfs:domain martialis:Person ;
    rdfs:range martialis:Person ;
    rdfs:comment "Direct candidate-identity edge, materialized symmetrically at export time from IdentityAssertions. Deliberately weaker than owl:sameAs."@en .

martialis:variantOf a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "variant of"@en , "variante de"@pt , "亜流である"@ja ;
    rdfs:subPropertyOf skos:broader ;
    rdfs:domain martialis:Style ;
    rdfs:range martialis:Style ;
    rdfs:comment "This style is a named variant/school within a broader style - practitioners of this style count as practitioners of the broader one (e.g. Shotokan variantOf Karate). Distinct from derived_from, which crosses into a different art. Materialized at export time from StyleRelationAssertions where styleRelationType is 'variant_of'; transitively walkable via property path (?narrower martialis:variantOf+ ?broader) for lineage-wide practitioner rollups."@en ;
    vann:example "ex:Shotokan martialis:variantOf ex:Karate . Distinct from derived_from (StyleRelationAssertion), which crosses into a different art rather than naming a school within one."@en .

martialis:hasVariant a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "has variant"@en , "tem variante"@pt , "亜流を有する"@ja ;
    owl:inverseOf martialis:variantOf ;
    rdfs:subPropertyOf skos:narrower ;
    rdfs:domain martialis:Style ;
    rdfs:range martialis:Style ;
    rdfs:comment "Direct broader-to-narrower style edge, materialized at export time alongside variantOf."@en .

# Organizational Change Events (org:ChangeEvent)
#################################################################
# Materialized at export time from AffiliationAssertions whose
# affiliationRelation is a genealogy value (derived_from, split_from,
# merged_from, replaces, renamed_from), grouped by (successor org,
# relation, startYear). The grouping is what earns this its own node
# rather than just walking the AffiliationAssertions directly: several
# merged_from entries on one successor - one per constituent that
# merged jointly - become a single org:ChangeEvent with multiple
# org:originalOrganization values, which is the only way to represent
# "these three bodies merged together" rather than three unrelated
# pairwise claims. Reuses the W3C Organization Ontology (org:) rather
# than inventing a Martialis-specific event class, for interop with
# any consumer that already understands org:ChangeEvent.

martialis:changeKind a owl:ObjectProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "change kind"@en , "tipo de mudança"@pt , "変更種別"@ja ;
    rdfs:domain org:ChangeEvent ;
    rdfs:range skos:Concept ;
    rdfs:comment "Which affiliationRelation genealogy concept produced this event: derived_from, split_from, merged_from, replaces, or renamed_from - see ontology/vocabularies.ttl's affiliation-relation scheme. org:ChangeEvent itself is relation-agnostic (it covers any 'major change', per its own definition); this records which of Martialis's five genealogy relations the underlying AffiliationAssertion(s) used. Declared owl:DatatypeProperty/xsd:string until this revision, a stale leftover from the 2.0.0 IRI migration: bin/martialis has emitted concept IRIs here since that migration, so this fixes the declaration to match already-exported data, not the export itself."@en .

martialis:changeYear a owl:DatatypeProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "change year"@en , "ano da mudança"@pt , "変更年"@ja ;
    rdfs:domain org:ChangeEvent ;
    rdfs:range xsd:integer ;
    rdfs:comment "The startYear of the underlying AffiliationAssertion's validDuring period, copied onto the event node for convenience. Absent when no genealogy affiliation contributing to this event carried a period - such affiliations still materialize an event (grouped under an 'unknown' year bucket), just without this property."@en .
# Vocabulary bindings
#################################################################
# Which SKOS concept scheme a concept-ranged property draws its values
# from. rdfs:range skos:Concept already says "the value is a concept";
# this says WHICH scheme's concept, which rdfs:range cannot express
# without a full owl:Restriction per property.
#
# Load-bearing, not documentation: the conversion rule that turns an
# authored enum token into its concept IRI (rules/06-iri-vocab.ru) is
# driven entirely by these statements, as is the schema<->SKOS
# notation check. A concept-ranged property with no binding here keeps
# its authored token unresolved, which the structural SHACL
# concept-scheme check then reports.

martialis:conceptScheme a owl:AnnotationProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "concept scheme"@en , "esquema de conceitos"@pt , "概念スキーム"@ja ;
    rdfs:domain rdf:Property ;
    rdfs:range skos:ConceptScheme ;
    rdfs:comment "The SKOS concept scheme this property's values are drawn from. Complements rdfs:range skos:Concept, which states only that a value is a concept, not which scheme it must belong to."@en .

martialis:schemaEnum a owl:AnnotationProperty ;
    rdfs:isDefinedBy martialis:MartialisOntology ;
    rdfs:label "schema enum"@en , "enumeração do esquema"@pt , "スキーマ列挙"@ja ;
    rdfs:domain skos:ConceptScheme ;
    rdfs:range xsd:string ;
    rdfs:comment "Where this scheme's legal values are enumerated in the JSON Schemas, as 'file.schema.json#/json/pointer/to/enum'. JSON Schema stays the enforced source of truth for which values may be authored; this states which enum a scheme must agree with, so the two cannot drift apart unnoticed. A scheme with no binding is documentation-only, or has no single static enum by design (rank-grade/*, whose applicable scheme depends on the referenced RankingSystem)."@en .
