@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 skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix schema: <https://schema.org/> .
@prefix wgs84: <http://www.w3.org/2003/01/geo/wgs84_pos#> .
@prefix wdtn: <http://www.wikidata.org/prop/direct-normalized/> .
@prefix migrants: <http://example.org/migrants/> .

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

<http://example.org/migrants/ontology> a owl:Ontology ;
    rdfs:label "Theater Migrants Ontology"@en ;
    rdfs:comment "Ontology for the Theater Migrants Knowledge Graph, documenting professional migrations of theater practitioners across Europe (1850–1918)."@en .

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

migrants:migration_table a owl:Class ;
    rdfs:label "Migration"@en ;
    rdfs:comment "A migration event recording the movement of a person from one place to another."@en .

migrants:work a owl:Class ;
    rdfs:label "Work"@en ;
    rdfs:comment "A professional engagement of a person at an organisation in a given location and time period."@en .

migrants:relationship a owl:Class ;
    rdfs:label "Relationship"@en ;
    rdfs:comment "An interpersonal relationship between two persons."@en .

migrants:person_profession a owl:Class ;
    rdfs:label "PersonProfession"@en ;
    rdfs:comment "An association between a person and a profession label."@en .

migrants:personnames a owl:Class ;
    rdfs:label "PersonName"@en ;
    rdfs:comment "An alternative or historical name for a person, optionally typed and time-bounded."@en .

migrants:religions a owl:Class ;
    rdfs:label "ReligionAffiliation"@en ;
    rdfs:comment "A person's affiliation with a religion during a given period."@en .

migrants:ImportSource a owl:Class ;
    rdfs:label "ImportSource"@en ;
    rdfs:comment "The provenance source from which a person record was imported."@en .

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

migrants:Continent a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "Continent"@en .

migrants:Country a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "Country"@en .

migrants:State a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "State"@en .

migrants:City a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "City"@en .

migrants:MigrationReason a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "MigrationReason"@en .

migrants:InstitutionType a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "InstitutionType"@en .

migrants:Nametype a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "NameType"@en .

migrants:RelationshipType a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "RelationshipType"@en .

migrants:RelationshipTypePrecise a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "RelationshipTypePrecise"@en .

migrants:Religion a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "Religion"@en .

migrants:Profession a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "Profession"@en .

migrants:EmploymentType a owl:Class ;
    rdfs:subClassOf skos:Concept ;
    rdfs:label "EmploymentType"@en .

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

migrants:person\#Importsource a owl:ObjectProperty ;
    rdfs:label "importSource"@en ;
    rdfs:domain schema:Person ;
    rdfs:range migrants:ImportSource .

migrants:person\#Nametype a owl:ObjectProperty ;
    rdfs:label "nameType"@en ;
    rdfs:domain schema:Person ;
    rdfs:range migrants:Nametype .

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

migrants:person\#IDPerson a owl:DatatypeProperty ;
    rdfs:label "IDPerson"@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:string .

migrants:person\#birthdate_max 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 .

migrants:person\#deathdate_max 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 .

migrants:person\#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 .

migrants:person\#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 .

migrants:person\#Birth_Info a owl:DatatypeProperty ;
    rdfs:label "birthInfo"@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:string .

migrants:person\#Death_Info a owl:DatatypeProperty ;
    rdfs:label "deathInfo"@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:string .

migrants:person\#religion a owl:DatatypeProperty ;
    rdfs:label "religion"@en ;
    rdfs:comment "Free-text religion label on the person record."@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:string .

migrants:person\#image_source a owl:DatatypeProperty ;
    rdfs:label "imageSource"@en ;
    rdfs:domain schema:Person ;
    rdfs:range xsd:anyURI .

# =============================================================================
# Object properties — Place
# =============================================================================

migrants:location\#Continent a owl:ObjectProperty ;
    rdfs:label "continent"@en ;
    rdfs:domain schema:Place ;
    rdfs:range migrants:Continent .

migrants:location\#Country a owl:ObjectProperty ;
    rdfs:label "country"@en ;
    rdfs:domain schema:Place ;
    rdfs:range migrants:Country .

migrants:location\#State a owl:ObjectProperty ;
    rdfs:label "state"@en ;
    rdfs:domain schema:Place ;
    rdfs:range migrants:State .

migrants:location\#City a owl:ObjectProperty ;
    rdfs:label "city"@en ;
    rdfs:domain schema:Place ;
    rdfs:range migrants:City .

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

migrants:location\#IDLocation a owl:DatatypeProperty ;
    rdfs:label "IDLocation"@en ;
    rdfs:domain schema:Place ;
    rdfs:range xsd:string .

migrants:location\#GeoNamesID a owl:DatatypeProperty ;
    rdfs:label "GeoNamesID"@en ;
    rdfs:domain schema:Place ;
    rdfs:range xsd:integer .

# =============================================================================
# Object properties — Organisation
# =============================================================================

migrants:organisation\#InstType a owl:ObjectProperty ;
    rdfs:label "institutionType"@en ;
    rdfs:domain schema:Organization ;
    rdfs:range migrants:InstitutionType .

# =============================================================================
# Datatype properties — Organisation
# =============================================================================

migrants:organisation\#IDOrganisation a owl:DatatypeProperty ;
    rdfs:label "IDOrganisation"@en ;
    rdfs:domain schema:Organization ;
    rdfs:range xsd:integer .

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

migrants:migration_table\#ref-IDPerson a owl:ObjectProperty ;
    rdfs:label "migrant"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range schema:Person .

migrants:migration_table\#ref-IDStartPlace a owl:ObjectProperty ;
    rdfs:label "startPlace"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range schema:Place .

migrants:migration_table\#ref-IDDestPlace a owl:ObjectProperty ;
    rdfs:label "destinationPlace"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range schema:Place .

migrants:migration_table\#reason a owl:ObjectProperty ;
    rdfs:label "reason"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range migrants:MigrationReason .

migrants:migration_table\#reason2 a owl:ObjectProperty ;
    rdfs:label "secondaryReason"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range migrants:MigrationReason .

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

migrants:migration_table\#IDMig a owl:DatatypeProperty ;
    rdfs:label "IDMig"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range xsd:integer .

migrants:migration_table\#DateStart_Min a owl:DatatypeProperty ;
    rdfs:label "dateStartMin"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range xsd:date .

migrants:migration_table\#DateStart_Max a owl:DatatypeProperty ;
    rdfs:label "dateStartMax"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range xsd:date .

migrants:migration_table\#DateEnd_Min a owl:DatatypeProperty ;
    rdfs:label "dateEndMin"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range xsd:date .

migrants:migration_table\#DateEnd_Max a owl:DatatypeProperty ;
    rdfs:label "dateEndMax"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range xsd:date .

migrants:migration_table\#DateStart_Fuzzy a owl:DatatypeProperty ;
    rdfs:label "dateStartFuzzy"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range xsd:string .

migrants:migration_table\#DateEnd_Fuzzy a owl:DatatypeProperty ;
    rdfs:label "dateEndFuzzy"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range xsd:string .

migrants:migration_table\#via a owl:DatatypeProperty ;
    rdfs:label "via"@en ;
    rdfs:domain migrants:migration_table ;
    rdfs:range xsd:string .

# =============================================================================
# Object properties — Work
# =============================================================================

migrants:work\#ref-IDPerson a owl:ObjectProperty ;
    rdfs:label "worker"@en ;
    rdfs:domain migrants:work ;
    rdfs:range schema:Person .

migrants:work\#ref-IDLocation a owl:ObjectProperty ;
    rdfs:label "workLocation"@en ;
    rdfs:domain migrants:work ;
    rdfs:range schema:Place .

migrants:work\#ref-IDOrganisation a owl:ObjectProperty ;
    rdfs:label "workOrganisation"@en ;
    rdfs:domain migrants:work ;
    rdfs:range schema:Organization .

migrants:work\#ref-IDOrganisation2 a owl:ObjectProperty ;
    rdfs:label "secondaryOrganisation"@en ;
    rdfs:domain migrants:work ;
    rdfs:range schema:Organization .

migrants:work\#Profession a owl:ObjectProperty ;
    rdfs:label "profession"@en ;
    rdfs:domain migrants:work ;
    rdfs:range migrants:Profession .

migrants:work\#Profession2 a owl:ObjectProperty ;
    rdfs:label "secondaryProfession"@en ;
    rdfs:domain migrants:work ;
    rdfs:range migrants:Profession .

migrants:work\#Profession3 a owl:ObjectProperty ;
    rdfs:label "tertiaryProfession"@en ;
    rdfs:domain migrants:work ;
    rdfs:range migrants:Profession .

migrants:work\#EmploymentType a owl:ObjectProperty ;
    rdfs:label "employmentType"@en ;
    rdfs:domain migrants:work ;
    rdfs:range migrants:EmploymentType .

# =============================================================================
# Datatype properties — Work
# =============================================================================

migrants:work\#IDWork a owl:DatatypeProperty ;
    rdfs:label "IDWork"@en ;
    rdfs:domain migrants:work ;
    rdfs:range xsd:integer .

migrants:work\#DateStart_Min a owl:DatatypeProperty ;
    rdfs:label "dateStartMin"@en ;
    rdfs:domain migrants:work ;
    rdfs:range xsd:date .

migrants:work\#DateStart_Max a owl:DatatypeProperty ;
    rdfs:label "dateStartMax"@en ;
    rdfs:domain migrants:work ;
    rdfs:range xsd:date .

migrants:work\#DateEnd_Min a owl:DatatypeProperty ;
    rdfs:label "dateEndMin"@en ;
    rdfs:domain migrants:work ;
    rdfs:range xsd:date .

migrants:work\#DateEnd_Max a owl:DatatypeProperty ;
    rdfs:label "dateEndMax"@en ;
    rdfs:domain migrants:work ;
    rdfs:range xsd:date .

migrants:work\#DateStart_Fuzzy a owl:DatatypeProperty ;
    rdfs:label "dateStartFuzzy"@en ;
    rdfs:domain migrants:work ;
    rdfs:range xsd:string .

migrants:work\#DateEnd_Fuzzy a owl:DatatypeProperty ;
    rdfs:label "dateEndFuzzy"@en ;
    rdfs:domain migrants:work ;
    rdfs:range xsd:string .

migrants:work\#Employment a owl:DatatypeProperty ;
    rdfs:label "employment"@en ;
    rdfs:domain migrants:work ;
    rdfs:range xsd:string .

migrants:work\#comment a owl:DatatypeProperty ;
    rdfs:label "comment"@en ;
    rdfs:domain migrants:work ;
    rdfs:range xsd:string .

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

migrants:relationship\#ref-IDPerson_active a owl:ObjectProperty ;
    rdfs:label "activePerson"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range schema:Person .

migrants:relationship\#ref-IDPerson_passive a owl:ObjectProperty ;
    rdfs:label "passivePerson"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range schema:Person .

migrants:relationship\#ref-IDLocation a owl:ObjectProperty ;
    rdfs:label "location"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range schema:Place .

migrants:relationship\#ref-IDOrganisation a owl:ObjectProperty ;
    rdfs:label "organisation"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range schema:Organization .

migrants:relationship\#Relationshiptype a owl:ObjectProperty ;
    rdfs:label "relationshipType"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range migrants:RelationshipType .

migrants:relationship\#relationshiptype_precise a owl:ObjectProperty ;
    rdfs:label "relationshipTypePrecise"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range migrants:RelationshipTypePrecise .

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

migrants:relationship\#IDRel a owl:DatatypeProperty ;
    rdfs:label "IDRel"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range xsd:integer .

migrants:relationship\#DateStart_Min a owl:DatatypeProperty ;
    rdfs:label "dateStartMin"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range xsd:date .

migrants:relationship\#DateStart_Max a owl:DatatypeProperty ;
    rdfs:label "dateStartMax"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range xsd:date .

migrants:relationship\#DateEnd_Min a owl:DatatypeProperty ;
    rdfs:label "dateEndMin"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range xsd:date .

migrants:relationship\#DateEnd_Max a owl:DatatypeProperty ;
    rdfs:label "dateEndMax"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range xsd:date .

migrants:relationship\#DateStart_Fuzzy a owl:DatatypeProperty ;
    rdfs:label "dateStartFuzzy"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range xsd:string .

migrants:relationship\#DateEnd_Fuzzy a owl:DatatypeProperty ;
    rdfs:label "dateEndFuzzy"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range xsd:string .

migrants:relationship\#Timeperiod a owl:DatatypeProperty ;
    rdfs:label "timePeriod"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range xsd:string .

migrants:relationship\#comment a owl:DatatypeProperty ;
    rdfs:label "comment"@en ;
    rdfs:domain migrants:relationship ;
    rdfs:range xsd:string .

# =============================================================================
# Object properties — PersonProfession
# =============================================================================

migrants:person_profession\#ref-IDPerson a owl:ObjectProperty ;
    rdfs:label "person"@en ;
    rdfs:domain migrants:person_profession ;
    rdfs:range schema:Person .

migrants:person_profession\#Eprofession a owl:ObjectProperty ;
    rdfs:label "enumeratedProfession"@en ;
    rdfs:domain migrants:person_profession ;
    rdfs:range migrants:Profession .

# =============================================================================
# Datatype properties — PersonProfession
# =============================================================================

migrants:person_profession\#IDProfPerson a owl:DatatypeProperty ;
    rdfs:label "IDProfPerson"@en ;
    rdfs:domain migrants:person_profession ;
    rdfs:range xsd:integer .

migrants:person_profession\#profession a owl:DatatypeProperty ;
    rdfs:label "professionLabel"@en ;
    rdfs:domain migrants:person_profession ;
    rdfs:range xsd:string .

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

migrants:personnames\#ref-IDPerson a owl:ObjectProperty ;
    rdfs:label "person"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range schema:Person .

migrants:personnames\#Nametype a owl:ObjectProperty ;
    rdfs:label "nameType"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range migrants:Nametype .

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

migrants:personnames\#IDPersonname a owl:DatatypeProperty ;
    rdfs:label "IDPersonname"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range xsd:integer .

migrants:personnames\#personName a owl:DatatypeProperty ;
    rdfs:label "personName"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range xsd:string .

migrants:personnames\#personSurName a owl:DatatypeProperty ;
    rdfs:label "personSurName"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range xsd:string .

migrants:personnames\#comment a owl:DatatypeProperty ;
    rdfs:label "comment"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range xsd:string .

migrants:personnames\#DateStart_Min a owl:DatatypeProperty ;
    rdfs:label "dateStartMin"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range xsd:date .

migrants:personnames\#DateStart_Max a owl:DatatypeProperty ;
    rdfs:label "dateStartMax"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range xsd:date .

migrants:personnames\#DateEnd_Min a owl:DatatypeProperty ;
    rdfs:label "dateEndMin"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range xsd:date .

migrants:personnames\#DateEnd_Max a owl:DatatypeProperty ;
    rdfs:label "dateEndMax"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range xsd:date .

migrants:personnames\#DateStart_Fuzzy a owl:DatatypeProperty ;
    rdfs:label "dateStartFuzzy"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range xsd:string .

migrants:personnames\#DateEnd_Fuzzy a owl:DatatypeProperty ;
    rdfs:label "dateEndFuzzy"@en ;
    rdfs:domain migrants:personnames ;
    rdfs:range xsd:string .

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

migrants:religions\#ref-IDPerson a owl:ObjectProperty ;
    rdfs:label "person"@en ;
    rdfs:domain migrants:religions ;
    rdfs:range schema:Person .

migrants:religions\#religion a owl:ObjectProperty ;
    rdfs:label "religion"@en ;
    rdfs:domain migrants:religions ;
    rdfs:range migrants:Religion .

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

migrants:religions\#IDReligion a owl:DatatypeProperty ;
    rdfs:label "IDReligion"@en ;
    rdfs:domain migrants:religions ;
    rdfs:range xsd:integer .

migrants:religions\#denomination a owl:DatatypeProperty ;
    rdfs:label "denomination"@en ;
    rdfs:domain migrants:religions ;
    rdfs:range xsd:string .

migrants:religions\#comment a owl:DatatypeProperty ;
    rdfs:label "comment"@en ;
    rdfs:domain migrants:religions ;
    rdfs:range xsd:string .

migrants:religions\#date_start a owl:DatatypeProperty ;
    rdfs:label "dateStart"@en ;
    rdfs:domain migrants:religions ;
    rdfs:range xsd:date .

migrants:religions\#DateStart_Max a owl:DatatypeProperty ;
    rdfs:label "dateStartMax"@en ;
    rdfs:domain migrants:religions ;
    rdfs:range xsd:date .

migrants:religions\#DateEnd_Max a owl:DatatypeProperty ;
    rdfs:label "dateEndMax"@en ;
    rdfs:domain migrants:religions ;
    rdfs:range xsd:date .

migrants:religions\#DateEnd_Min a owl:DatatypeProperty ;
    rdfs:label "dateEndMin"@en ;
    rdfs:domain migrants:religions ;
    rdfs:range xsd:date .

migrants:religions\#DateStart_Fuzzy a owl:DatatypeProperty ;
    rdfs:label "dateStartFuzzy"@en ;
    rdfs:domain migrants:religions ;
    rdfs:range xsd:string .
