@prefix rdf:    <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs:   <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:    <http://www.w3.org/2002/07/owl#> .
@prefix xsd:    <http://www.w3.org/2001/XMLSchema#> .
@prefix dct:    <http://purl.org/dc/terms/> .
@prefix vann:   <http://purl.org/vocab/vann/> .
@prefix skos:   <http://www.w3.org/2004/02/skos/core#> .
@prefix schema: <https://schema.org/> .
@prefix org:    <http://www.w3.org/ns/org#> .
@prefix tm:     <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Ontology metadata
# =============================================================================

<https://daniel.degu.cl/ontologies/theatre-migrants/> a owl:Ontology ;
    rdfs:label "Theatre Migrants Ontology"@en ;
    rdfs:comment "Ontology for the Theatre Migrants Knowledge Graph, documenting professional migrations of theatre practitioners across Europe (1850–1918)."@en ;
    dct:title "Theatre Migrants Ontology"@en ;
    dct:description "A domain ontology extending Schema.org and the W3C Organization Ontology with custom classes and properties for modeling migrations, organizational memberships, interpersonal relationships, religion affiliations, and temporal uncertainty in the context of European theatre history."@en ;
    owl:imports <http://www.w3.org/ns/org#> ;
    dct:created "2025-01-01"^^xsd:date ;
    dct:license <https://creativecommons.org/licenses/by/4.0/> ;
    dct:creator <https://orcid.org/0000-0002-7896-0875> ;
    dct:creator [
        a schema:Person ;
        schema:name "Jorit Hopp" ;
        schema:affiliation "Institut der Theaterwissenschaft, Ludwig Maximilian University of Munich"
    ] ;
    dct:creator [
        a schema:Person ;
        schema:name "Berenika Szymanski" ;
        schema:affiliation "Institut der Theaterwissenschaft, Ludwig Maximilian University of Munich"
    ] ;
    dct:creator [
        a schema:Person ;
        schema:name "Yan Lin" ;
        schema:affiliation "Institut der Theaterwissenschaft, Ludwig Maximilian University of Munich"
    ] ;
    vann:preferredNamespaceUri "https://daniel.degu.cl/ontologies/theatre-migrants/" ;
    vann:preferredNamespacePrefix "tm" ;
    owl:versionInfo "0.1.0" .

<https://orcid.org/0000-0002-7896-0875> a schema:Person ;
    schema:name "Daniel Hernandez" ;
    schema:affiliation "Institute for Artificial Intelligence, University of Stuttgart" .

# =============================================================================
# Classes — domain-specific
# =============================================================================

tm:Migration a owl:Class ;
    rdfs:label "Migration"@en ;
    rdfs:comment "A migration event recording the movement of a person from one place to another."@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:Relationship a owl:Class ;
    rdfs:label "Relationship"@en ;
    rdfs:comment "An interpersonal relationship between two persons."@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:PersonName a owl:Class ;
    rdfs:label "PersonName"@en ;
    rdfs:comment "An alternative or historical name for a person, optionally typed and time-bounded."@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:ReligionAffiliation a owl:Class ;
    rdfs:label "ReligionAffiliation"@en ;
    rdfs:comment "A person's affiliation with a religion during a given period."@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:ImportSource a owl:Class ;
    rdfs:label "ImportSource"@en ;
    rdfs:comment "The provenance source from which a person record was imported."@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Classes — enumeration types (subclasses of skos:Concept)
# =============================================================================

tm:Continent a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "Continent"@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:Country a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "Country"@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:State a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "State"@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:City a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "City"@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:MigrationReason a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "MigrationReason"@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:InstitutionType a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "InstitutionType"@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:NameType a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "NameType"@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:RelationshipType a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "RelationshipType"@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:RelationshipTypePrecise a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "RelationshipTypePrecise"@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:Religion a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "Religion"@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:EmploymentType a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "EmploymentType"@en ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Object properties — Person
# =============================================================================

tm:importSource a owl:ObjectProperty ;
    rdfs:label "importSource"@en ;
    rdfs:comment "The provenance source from which this person record was imported."@en ;
    rdfs:domain schema:Person ;
    rdfs:range tm:ImportSource ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:continent a owl:ObjectProperty ;
    rdfs:label "continent"@en ;
    rdfs:domain schema:Place ;
    rdfs:range tm:Continent ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:country a owl:ObjectProperty ;
    rdfs:label "country"@en ;
    rdfs:domain schema:Place ;
    rdfs:range tm:Country ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:state a owl:ObjectProperty ;
    rdfs:label "state"@en ;
    rdfs:domain schema:Place ;
    rdfs:range tm:State ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:city a owl:ObjectProperty ;
    rdfs:label "city"@en ;
    rdfs:domain schema:Place ;
    rdfs:range tm:City ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:institutionType a owl:ObjectProperty ;
    rdfs:label "institutionType"@en ;
    rdfs:domain schema:Organization ;
    rdfs:range tm:InstitutionType ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Object properties — Migration
# =============================================================================

tm:migrant a owl:ObjectProperty ;
    rdfs:label "migrant"@en ;
    rdfs:comment "The person who migrated."@en ;
    rdfs:domain tm:Migration ;
    rdfs:range schema:Person ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:startPlace a owl:ObjectProperty ;
    rdfs:label "startPlace"@en ;
    rdfs:comment "The place from which the migration started."@en ;
    rdfs:domain tm:Migration ;
    rdfs:range schema:Place ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:destinationPlace a owl:ObjectProperty ;
    rdfs:label "destinationPlace"@en ;
    rdfs:comment "The place to which the person migrated."@en ;
    rdfs:domain tm:Migration ;
    rdfs:range schema:Place ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:reason a owl:ObjectProperty ;
    rdfs:label "reason"@en ;
    rdfs:comment "The primary reason for this migration."@en ;
    rdfs:domain tm:Migration ;
    rdfs:range tm:MigrationReason ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:secondaryReason a owl:ObjectProperty ;
    rdfs:label "secondaryReason"@en ;
    rdfs:comment "A secondary reason for this migration."@en ;
    rdfs:domain tm:Migration ;
    rdfs:range tm:MigrationReason ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Object properties — org:Membership (work engagements)
#
# Work engagements are modeled as org:Membership instances. The properties
# org:member and org:organization from the W3C Organization Ontology are
# used directly. The following custom properties extend org:Membership with
# domain-specific information.
# =============================================================================

tm:workLocation a owl:ObjectProperty ;
    rdfs:label "workLocation"@en ;
    rdfs:comment "The place where this work engagement took place."@en ;
    rdfs:domain org:Membership ;
    rdfs:range schema:Place ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:secondaryOrganisation a owl:ObjectProperty ;
    rdfs:label "secondaryOrganisation"@en ;
    rdfs:comment "A secondary organisation associated with this work engagement."@en ;
    rdfs:domain org:Membership ;
    rdfs:range schema:Organization ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:profession a owl:ObjectProperty ;
    rdfs:label "profession"@en ;
    rdfs:comment "The primary profession exercised in this work engagement."@en ;
    rdfs:domain org:Membership ;
    rdfs:range schema:Occupation ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:secondaryProfession a owl:ObjectProperty ;
    rdfs:label "secondaryProfession"@en ;
    rdfs:domain org:Membership ;
    rdfs:range schema:Occupation ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:tertiaryProfession a owl:ObjectProperty ;
    rdfs:label "tertiaryProfession"@en ;
    rdfs:domain org:Membership ;
    rdfs:range schema:Occupation ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:employmentType a owl:ObjectProperty ;
    rdfs:label "employmentType"@en ;
    rdfs:domain org:Membership ;
    rdfs:range tm:EmploymentType ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Object properties — Relationship
# =============================================================================

tm:activePerson a owl:ObjectProperty ;
    rdfs:label "activePerson"@en ;
    rdfs:comment "The person from whose perspective the relationship is described."@en ;
    rdfs:domain tm:Relationship ;
    rdfs:range schema:Person ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:passivePerson a owl:ObjectProperty ;
    rdfs:label "passivePerson"@en ;
    rdfs:comment "The other person in the relationship."@en ;
    rdfs:domain tm:Relationship ;
    rdfs:range schema:Person ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:relationshipLocation a owl:ObjectProperty ;
    rdfs:label "relationshipLocation"@en ;
    rdfs:domain tm:Relationship ;
    rdfs:range schema:Place ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:relationshipOrganisation a owl:ObjectProperty ;
    rdfs:label "relationshipOrganisation"@en ;
    rdfs:domain tm:Relationship ;
    rdfs:range schema:Organization ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:relationshipType a owl:ObjectProperty ;
    rdfs:label "relationshipType"@en ;
    rdfs:domain tm:Relationship ;
    rdfs:range tm:RelationshipType ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:relationshipTypePrecise a owl:ObjectProperty ;
    rdfs:label "relationshipTypePrecise"@en ;
    rdfs:domain tm:Relationship ;
    rdfs:range tm:RelationshipTypePrecise ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Object properties — PersonName
# =============================================================================

tm:personNamePerson a owl:ObjectProperty ;
    rdfs:label "person"@en ;
    rdfs:comment "The person associated with this name record."@en ;
    rdfs:domain tm:PersonName ;
    rdfs:range schema:Person ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:nameType a owl:ObjectProperty ;
    rdfs:label "nameType"@en ;
    rdfs:domain tm:PersonName ;
    rdfs:range tm:NameType ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Object properties — ReligionAffiliation
# =============================================================================

tm:religionAffiliationPerson a owl:ObjectProperty ;
    rdfs:label "person"@en ;
    rdfs:comment "The person associated with this religion affiliation."@en ;
    rdfs:domain tm:ReligionAffiliation ;
    rdfs:range schema:Person ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:religion a owl:ObjectProperty ;
    rdfs:label "religion"@en ;
    rdfs:domain tm:ReligionAffiliation ;
    rdfs:range tm:Religion ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Datatype properties — Person
# =============================================================================

tm:birthDateMax a owl:DatatypeProperty ;
    rdfs:label "birthDateMax"@en ;
    rdfs:comment "Upper bound of the birth date when the exact date is uncertain."@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:deathDateMax a owl:DatatypeProperty ;
    rdfs:label "deathDateMax"@en ;
    rdfs:comment "Upper bound of the death date when the exact date is uncertain."@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:fuzzyBirthDate a owl:DatatypeProperty ;
    rdfs:label "fuzzyBirthDate"@en ;
    rdfs:comment "Free-text representation of an uncertain birth date."@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:fuzzyDeathDate a owl:DatatypeProperty ;
    rdfs:label "fuzzyDeathDate"@en ;
    rdfs:comment "Free-text representation of an uncertain death date."@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:birthInfo a owl:DatatypeProperty ;
    rdfs:label "birthInfo"@en ;
    rdfs:comment "Additional textual information about the birth."@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:deathInfo a owl:DatatypeProperty ;
    rdfs:label "deathInfo"@en ;
    rdfs:comment "Additional textual information about the death."@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:religionLabel a owl:DatatypeProperty ;
    rdfs:label "religionLabel"@en ;
    rdfs:comment "Free-text religion label on the person record."@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:imageSource a owl:DatatypeProperty ;
    rdfs:label "imageSource"@en ;
    rdfs:comment "URI of the source from which the person's image was obtained."@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:anyURI ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Datatype properties — Place
# =============================================================================

tm:geoNamesID a owl:DatatypeProperty ;
    rdfs:label "GeoNamesID"@en ;
    rdfs:comment "The GeoNames identifier for this place."@en ;
    rdfs:domain schema:Place ;
    rdfs:range xsd:integer ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Datatype properties — shared temporal properties
#
# The following properties model temporal uncertainty. Events (Migration,
# Work, Relationship, PersonName, ReligionAffiliation) may have imprecise
# dates expressed as min/max bounds or fuzzy strings.
# =============================================================================

tm:dateStartMin a owl:DatatypeProperty ;
    rdfs:label "dateStartMin"@en ;
    rdfs:comment "Lower bound of the start date."@en ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:dateStartMax a owl:DatatypeProperty ;
    rdfs:label "dateStartMax"@en ;
    rdfs:comment "Upper bound of the start date."@en ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:dateEndMin a owl:DatatypeProperty ;
    rdfs:label "dateEndMin"@en ;
    rdfs:comment "Lower bound of the end date."@en ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:dateEndMax a owl:DatatypeProperty ;
    rdfs:label "dateEndMax"@en ;
    rdfs:comment "Upper bound of the end date."@en ;
    rdfs:range xsd:date ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:dateStartFuzzy a owl:DatatypeProperty ;
    rdfs:label "dateStartFuzzy"@en ;
    rdfs:comment "Free-text representation of an uncertain start date."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:dateEndFuzzy a owl:DatatypeProperty ;
    rdfs:label "dateEndFuzzy"@en ;
    rdfs:comment "Free-text representation of an uncertain end date."@en ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Datatype properties — Migration
# =============================================================================

tm:via a owl:DatatypeProperty ;
    rdfs:label "via"@en ;
    rdfs:comment "An intermediate place or route description for the migration."@en ;
    rdfs:domain tm:Migration ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Datatype properties — org:Membership
# =============================================================================

tm:employment a owl:DatatypeProperty ;
    rdfs:label "employment"@en ;
    rdfs:comment "Description of the employment arrangement."@en ;
    rdfs:domain org:Membership ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Datatype properties — Relationship
# =============================================================================

tm:timePeriod a owl:DatatypeProperty ;
    rdfs:label "timePeriod"@en ;
    rdfs:comment "Free-text description of the time period of the relationship."@en ;
    rdfs:domain tm:Relationship ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Datatype properties — PersonName
# =============================================================================

tm:personName a owl:DatatypeProperty ;
    rdfs:label "personName"@en ;
    rdfs:comment "The given name in this name record."@en ;
    rdfs:domain tm:PersonName ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

tm:personSurName a owl:DatatypeProperty ;
    rdfs:label "personSurName"@en ;
    rdfs:comment "The surname in this name record."@en ;
    rdfs:domain tm:PersonName ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .

# =============================================================================
# Datatype properties — ReligionAffiliation
# =============================================================================

tm:denomination a owl:DatatypeProperty ;
    rdfs:label "denomination"@en ;
    rdfs:comment "The specific denomination within the religion."@en ;
    rdfs:domain tm:ReligionAffiliation ;
    rdfs:range xsd:string ;
    rdfs:isDefinedBy <https://daniel.degu.cl/ontologies/theatre-migrants/> .
