@prefix : . @prefix rdf: . @prefix rdfs: . @prefix owl: . @prefix xsd: . # Design: # class hierarchy described by disjointUnionOf as far as possible. # some declarations are intensionally redundant # ... and now to the Mondial ontology :MondialThing owl:disjointUnionOf ( :PoliticalOrGeographicalThing :AnthropoGeographicalThing :ReifiedThing ). :PoliticalOrGeographicalThing owl:unionOf (:PoliticalThing :GeographicalThing). # note: Cities are both PoliticalThings and GeographicalThings. :ReifiedThing owl:disjointUnionOf (:Membership :Encompassed :SpokenBy :BelievedBy :EthnicProportion); owl:disjointWith :Geometrical. # the following is not allowed in OWL. #:reifies a owl:AnnotationProperty; rdfs:domain :ReifiedRelationship; # rdfs:range rdf:Property; # owl:inverseOf :reifiedBy. :name a owl:FunctionalProperty; rdfs:domain [ owl:intersectionOf ( :MondialThing [ owl:complementOf :ReifiedThing ] [ owl:complementOf :Border ] [ owl:complementOf :Source ] [ owl:complementOf :Estuary ])]; rdfs:range xsd:string. :type a owl:FunctionalProperty; rdfs:domain [owl:intersectionOf ( [owl:unionOf (:GeographicalThing :Membership)] [ owl:complementOf :Continent ] [ owl:complementOf :City ])]; rdfs:range xsd:string. ## geometric aspects: Place (long,lat,elev.), Area (area, bordering), Line (length,between) # note: small areas like city, lake, island, desert are also Places and Areas :Geometrical owl:unionOf (:Place :Area :Line). :Location owl:disjointUnionOf (:Place :SmallArea). :Area owl:disjointUnionOf (:SmallArea :LargeArea). :Place owl:disjointWith :Area. :LargeArea rdfs:subClassOf :Area. :Line owl:disjointWith :Area, :Place. :borders rdfs:domain :LargeArea; rdfs:range :LargeArea. ####### Political Things :PoliticalThing owl:disjointUnionOf (:NonGeographicalPoliticalThing :City). :NonGeographicalPoliticalThing owl:disjointUnionOf (:Country :Province :Organization :Border). :AdministrativeArea rdfs:subClassOf :Area, :PoliticalThing; owl:disjointUnionOf (:Country :Province). :AdministrativeSubdivision owl:disjointUnionOf (:Province :City). :PoliticalBody rdfs:subClassOf :PoliticalThing; owl:disjointUnionOf (:Country :Organization); owl:disjointWith :AdministrativeSubdivision. :Country rdfs:subClassOf :LargeArea. :Province rdfs:subClassOf :LargeArea. :City rdfs:subClassOf :GeographicalThing, :SmallArea. :Organization owl:disjointWith :Geometrical. :carCode a owl:FunctionalProperty; a owl:InverseFunctionalProperty; rdfs:domain :Country; rdfs:range xsd:string. # a border is a line between two areas (e.g. country/country, # sea/sea, country/sea) :Border rdfs:subClassOf :Line. :bordering rdfs:domain :Border; rdfs:range :Country; owl:inverseOf :hasBorder. :Border rdfs:subClassOf [ a owl:Restriction; owl:onProperty :bordering; owl:cardinality 2 ]. :neighbor a owl:SymmetricProperty; rdfs:subPropertyOf :borders; rdfs:domain :Country; rdfs:range :Country. :hasProvince a owl:InverseFunctionalProperty; rdfs:domain :Country; rdfs:range :Province. :hasProvince owl:inverseOf :isProvinceOf. :isProvinceOf rdfs:subPropertyOf :belongsTo. :hasCity rdfs:domain :AdministrativeArea; rdfs:range :City. :hasCity owl:inverseOf :cityIn. :City rdfs:subClassOf [a owl:Restriction; owl:onProperty :cityIn; owl:onClass :Country; owl:qualifiedCardinality 1]. :City rdfs:subClassOf [a owl:Restriction; owl:onProperty :cityIn; owl:onClass :Province; owl:maxQualifiedCardinality 1]. :City rdfs:subClassOf :AdministrativeSubdivision. :AdministrativeSubdivision rdfs:subClassOf [a owl:Restriction; ## note: only belongsTo; because locatedIn ist restricted to GeoThings owl:onProperty :belongsTo; owl:onClass :Country; owl:qualifiedCardinality 1]. :City rdfs:subClassOf [a owl:Restriction; owl:onProperty :locatedIn; owl:onClass :Province; owl:maxQualifiedCardinality 1]. :City rdfs:subClassOf [a owl:Restriction; owl:onProperty :locatedIn; owl:onClass :Country; owl:qualifiedCardinality 1]. :population a owl:FunctionalProperty; rdfs:domain [ owl:intersectionOf ( :Area [ owl:complementOf :Continent] [ owl:complementOf :Desert] [ owl:complementOf :Water] [ owl:complementOf :Mountains] )]; rdfs:range xsd:nonNegativeInteger. :capital a owl:FunctionalProperty; rdfs:domain :AdministrativeArea; rdfs:range :City; owl:inverseOf :isCapitalOf. :City rdfs:subClassOf [a owl:Restriction; owl:onProperty :isCapitalOf; owl:onClass :Country; owl:maxQualifiedCardinality 1]. :populationGrowth a owl:FunctionalProperty; rdfs:domain :Country; rdfs:range xsd:decimal. :infantMortality a owl:FunctionalProperty; rdfs:domain :Country; rdfs:range xsd:decimal. :gdpTotal a owl:FunctionalProperty; rdfs:domain :Country; rdfs:range xsd:decimal. :gdpAgri a owl:FunctionalProperty; rdfs:domain :Country; rdfs:range xsd:decimal. :gdpInd a owl:FunctionalProperty; rdfs:domain :Country; rdfs:range xsd:decimal. :gdpServ a owl:FunctionalProperty; rdfs:domain :Country; rdfs:range xsd:decimal. :inflation a owl:FunctionalProperty; rdfs:domain :Country; rdfs:range xsd:decimal. :government a owl:FunctionalProperty; rdfs:domain :Country; rdfs:range xsd:string. :independenceDate a owl:FunctionalProperty; rdfs:domain :Country; rdfs:range xsd:date. :dependentOf a owl:FunctionalProperty; rdfs:domain :Country; rdfs:range :Country. :wasDependentOf a owl:FunctionalProperty; rdfs:domain :Country; rdfs:range :PoliticalBody. :abbrev a owl:FunctionalProperty; a owl:InverseFunctionalProperty; rdfs:domain :Organization; rdfs:range xsd:string. :established a owl:FunctionalProperty; rdfs:domain :Organization; rdfs:range xsd:date. :hasHeadq a owl:FunctionalProperty; rdfs:domain :Organization; rdfs:range :City. ####### Geographical Things :GeographicalThing owl:disjointUnionOf (:City :GeographicalNonPoliticalThing). :GeographicalNonPoliticalThing owl:disjointWith :PoliticalThing; owl:disjointUnionOf (:Continent :Water :Source :Estuary :Desert :Island :Mountain :Islands :Mountains). :Continent rdfs:subClassOf :LargeArea. :City rdfs:subClassOf :GeographicalThing. # comment, redundant :Water owl:disjointUnionOf (:River :Lake :Sea). :River rdfs:subClassOf :Line. :Lake rdfs:subClassOf :SmallArea. :Sea rdfs:subClassOf :LargeArea. :Source rdfs:subClassOf :Place; owl:disjointWith :Area. :Estuary rdfs:subClassOf :Place; owl:disjointWith :Area. :Desert rdfs:subClassOf :SmallArea. :Island rdfs:subClassOf :SmallArea. :Mountain rdfs:subClassOf :Place. :Mountains rdfs:subClassOf :SmallArea. :Islands rdfs:subClassOf :SmallArea. :area a owl:FunctionalProperty; rdfs:domain [ owl:unionOf ( :Area :River )]; ## River: area of the river's basin rdfs:range xsd:decimal. :City rdfs:subClassOf [ a owl:Restriction; owl:onProperty :area; owl:cardinality 0 ]. :length a owl:FunctionalProperty; rdfs:domain :Line; rdfs:range xsd:decimal. :elevation a owl:FunctionalProperty; rdfs:domain [ owl:intersectionOf ( :Location [ owl:complementOf :Estuary] [ owl:complementOf :Desert] )]; rdfs:domain :Location; rdfs:range xsd:decimal. :depth a owl:FunctionalProperty; rdfs:domain [owl:unionOf (:Sea :Lake)]; rdfs:range xsd:decimal. :longitude a owl:FunctionalProperty; rdfs:domain :Location; rdfs:range xsd:decimal. :latitude a owl:FunctionalProperty; rdfs:domain :Location; rdfs:range xsd:decimal. :mergesWith a owl:SymmetricProperty; rdfs:subPropertyOf :borders; rdfs:domain :Sea; rdfs:range :Sea. :locatedIn rdfs:domain :GeographicalThing; # geht nicht. Dann findet pellet kein range der inversen ... # [ owl:intersectionOf ( :GeographicalThing # [ owl:complementOf :Continent])]; rdfs:range :Area. [ owl:intersectionOf ( :GeographicalThing [ owl:complementOf :Continent])] rdfs:subClassOf [a owl:Restriction; owl:onProperty :locatedIn; owl:onClass :Country; owl:minQualifiedCardinality 1]. :Sea rdfs:subClassOf [a owl:Restriction; owl:onProperty :locatedIn; owl:allValuesFrom [ owl:unionOf (:Province :Country :Continent) ]]. :Continent rdfs:subClassOf [a owl:Restriction; owl:onProperty :locatedIn; owl:allValuesFrom owl:Nothing ]. :River rdfs:subClassOf [a owl:Restriction; owl:onProperty :locatedIn; owl:allValuesFrom [ owl:complementOf :City]]. :Mountains rdfs:subClassOf [a owl:Restriction; owl:onProperty :locatedIn; owl:allValuesFrom [ owl:complementOf :City]]. :Desert rdfs:subClassOf [a owl:Restriction; owl:onProperty :locatedIn; owl:allValuesFrom [ owl:complementOf :City]]. :Lake rdfs:subClassOf [a owl:Restriction; owl:onProperty :locatedIn; owl:allValuesFrom [ owl:complementOf :Lake]]. # Relationships :EncompassedArea owl:equivalentClass [ owl:intersectionOf ( :LargeArea [ owl:complementOf :Continent] [ owl:complementOf :Sea] )]. :Encompassed rdfs:subClassOf :ReifiedThing. :encompassedArea a owl:FunctionalProperty; rdfs:domain :Encompassed; rdfs:range :EncompassedArea; owl:inverseOf :encompassedByInfo. :encompassedBy a owl:FunctionalProperty; owl:inverseOf :encompassesInfo; rdfs:domain :Encompassed; rdfs:range :Continent. :encompassed rdfs:domain :EncompassedArea; rdfs:range :Continent; owl:inverseOf :encompasses. :Continent owl:disjointWith :Province. :Sea owl:disjointWith :Province. :Membership rdfs:subClassOf :ReifiedThing. :ofMember a owl:FunctionalProperty; rdfs:domain :Membership; owl:inverseOf :isInMembership; rdfs:range :Country. :inOrganization a owl:FunctionalProperty; rdfs:domain :Membership; owl:inverseOf :hasMembership; rdfs:range :Organization. :isMember rdfs:domain :Country; rdfs:range :Organization; owl:inverseOf :hasMember. :flowsInto rdfs:domain [ owl:unionOf (:River :Lake) ]; rdfs:range :Water. :Water rdfs:subClassOf [a owl:Restriction; owl:onProperty :flowsInto; owl:maxCardinality 1]. :flowsThrough a owl:InverseFunctionalProperty; # owl:inverseOf :flowsThrough-; ## das soll nicht explizit benannt sein. rdfs:domain :River; rdfs:range :Lake. :hasSource a owl:FunctionalProperty; a owl:InverseFunctionalProperty; rdfs:domain :River; rdfs:range :Source; owl:inverseOf :hasSource-. :hasEstuary a owl:FunctionalProperty; a owl:InverseFunctionalProperty; rdfs:domain :River; rdfs:range :Estuary; owl:inverseOf :hasEstuary-. :River rdfs:subClassOf [a owl:Restriction; owl:onProperty :hasSource; owl:cardinality 1], [a owl:Restriction; owl:onProperty :hasEstuary; owl:cardinality 1]. :Source rdfs:subClassOf [a owl:Restriction; owl:onProperty :hasSource-; owl:cardinality 1]. :Estuary rdfs:subClassOf [a owl:Restriction; owl:onProperty :hasEstuary-; owl:cardinality 1]. :locatedAt rdfs:domain :City; rdfs:range :Water. :locatedOnIsland rdfs:subPropertyOf :locatedIn; rdfs:domain [ owl:unionOf ( :City :Mountain ) ]; rdfs:range :Island. :locatedInWater # keine rdfs:subPropertyOf :locatedIn, weil river keine area ist rdfs:domain :Island; rdfs:range :Water. :belongsToIslands a owl:FunctionalProperty; rdfs:domain :Island; rdfs:range :Islands. :Mountain rdfs:subClassOf [a owl:Restriction; owl:onProperty :locatedOnIsland; owl:maxCardinality 1]. :inMountains a owl:FunctionalProperty; rdfs:domain [owl:unionOf (:Mountain :Source)]; rdfs:range :Mountains. # Anthropogeographical Things :AnthropoGeographicalThing owl:disjointUnionOf (:Language :Religion :EthnicGroup); owl:disjointWith :Geometrical. :Language rdfs:subClassOf :AnthropoGeographicalThing. :Religion rdfs:subClassOf :AnthropoGeographicalThing. :EthnicGroup rdfs:subClassOf :AnthropoGeographicalThing. :AnthropoGeographicalRelationship owl:disjointUnionOf (:SpokenBy :BelievedBy :EthnicProportion). :SpokenBy rdfs:subClassOf :AnthropoGeographicalRelationship. :BelievedBy rdfs:subClassOf :AnthropoGeographicalRelationship. :EthnicProportion rdfs:subClassOf :AnthropoGeographicalRelationship. :ofCountry a owl:FunctionalProperty; rdfs:domain :AnthropoGeographicalRelationship; rdfs:range :Country. :ethnicInfo a owl:InverseFunctionalProperty; rdfs:domain :Country; rdfs:range :EthnicProportion; owl:inverseOf :ethnicInfo-. :ethnicInfo- rdfs:subPropertyOf :ofCountry. :languageInfo a owl:InverseFunctionalProperty; rdfs:domain :Country; rdfs:range :SpokenBy; owl:inverseOf :languageInfo-. :languageInfo- rdfs:subPropertyOf :ofCountry. :religionInfo a owl:InverseFunctionalProperty; rdfs:domain :Country; rdfs:range :BelievedBy; owl:inverseOf :religionInfo-. :religionInfo- rdfs:subPropertyOf :ofCountry. :onLanguage a owl:FunctionalProperty; owl:inverseOf :spokenInInfo; rdfs:domain :SpokenBy; rdfs:range :Language. :onReligion a owl:FunctionalProperty; owl:inverseOf :followedInInfo; rdfs:domain :BelievedBy; rdfs:range :Religion. :onEthnicGroup a owl:FunctionalProperty; owl:inverseOf :liveInInfo; rdfs:domain :EthnicProportion; rdfs:range :EthnicGroup. :speakLanguage rdfs:domain :Country; rdfs:range :Language; owl:inverseOf :spokenInCountry. :belongToEthnicGroup rdfs:domain :Country; rdfs:range :EthnicGroup; owl:inverseOf :liveInCountry. :believeInReligion rdfs:domain :Country; rdfs:range :Religion; owl:inverseOf :believedInCountry. :percent a owl:FunctionalProperty; rdfs:domain [owl:unionOf (:SpokenBy :BelievedBy :EthnicProportion :Encompassed)]; rdfs:range xsd:decimal.