namespace <<http:://www.wsmo.org/ontologies/location#>>
      dc:<<http://purl.org/dc/elements/1.1#>>
      wsml:<<http://www.wsmo.org/d2/#>>
      cnt:<<http://www.wsmo.org/2004/d3/d3.2/v0.1/20041004/resources/owlFactbookMediator.wsml#>>
      geo:<<http://www.wsmo.org/2004/d3/d3.2/v0.1/20041004/resources/owlGeoMediator.wsml#>>
      ad:<<http://www.wsmo.org/2004/d3/d3.2/v0.1/20041004/resources/owlAddressMediator.wsml#>>
      xsd:<<http://www.w3.org/2001/XMLSchema#>>

ontology <<http://www.wsmo.org/ontologies/location>>

      nonFunctionalProperties 
            dc:title hasValue "Locations Ontology"
            dc:creator hasValue <<http://www.deri.org/foaf#deri>>
            dc:subject hasValues {"Location", "Country", "State", "City", "Address"}
            dc:description hasValue "Ontology for representing locations in the current political/social system"
            dc:publisher hasValue <<http://www.deri.org/foaf#deri>>
            dc:contributor hasValues {<<http://www.deri.org/foaf#lara>>,
                  <<http://www.deri.org/foaf#polleres>>}
            dc:date hasValue "2004-10-04"
            dc:type hasValue <<http://www.wsmo.org/2004/d2#ontologies>>
            dc:format hasValue "text/html"
            dc:language hasValue "en-US"
            dc:identifier hasValue <<http://www.wsmo.org/ontologies/location>>
            dc:source hasValue <<http://www.daml.org/2001/02/geofile/geofile-ont>>
            dc:language hasValue "en-US"
            dc:relation hasValues {<<http://www.daml.org/2001/09/countries/fips-10-4-ont>>,
                  <<http://www.daml.org/2001/09/countries/iso-3166-ont>>,
                  <<http://www.daml.org/2003/09/factbook/factbook-ont>>,
                  <<http://www.daml.org/2001/02/geofile/geofile-ont>>,
                  <<http://daml.umbc.edu/ontologies/ittalks/address>>}
            dc:coverage hasValue "ID:7029392 Name:World"
            dc:rights hasValue <<http://www.deri.org/privacy.html>>
            version hasValue "$Revision: 1.12 $"
      endNonFunctionalProperties 
      
      usedMediators {<<http://www.wsmo.org/2004/d3/d3.2/v0.1/20041004/resources/owlFactbookMediator.wsml>>,
            <<http://www.wsmo.org/2004/d3/d3.2/v0.1/20041004/resources/owlAddressMediator.wsml>>,
            <<http://www.daml.org/2004/d3/d3.2/v0.1/20041004/resources/owlGeoMediator.wsml>>}
            
      concept country subConceptOf {cnt:country, geo:country}
            nonFunctionalProperties
                  dc:description hasValue "Add the codes to the CIA country properties"
            endNonFunctionalProperties
            fipsCode ofType xsd:string
            nonFunctionalProperties
                  dc:description hasValue "FIPS 10-4 Country Code"
            endNonFunctionalProperties
            isoCode ofType xsd:string
            nonFunctionalProperties
                  dc:description hasValue "ISO 3166 Country Code"
            endNonFunctionalProperties

      concept address subConceptOf ad:address
            nonFunctionalProperties
                  dc:description hasValue "Extended address, adding more details to
                        city, state and country"
            endNonFunctionalProperties
            city ofType city
            state ofType state
            country ofType country
            
      concept city subConceptOf geo:city
            nonFunctionalProperties
                  dc:description hasValue "City"
            endNonFunctionalProperties
            population ofType xsd:integer
            extension ofType xsd:integer
                  nonFunctionalProperties
                        dc:description hasValue "Extension of the city in square kilometers"
                  endNonFunctionalProperties
            zipcodes ofType set xsd:string
      
      concept state subConceptOf geo:state
            nonFunctionalProperties
                  dc:description hasValue "State"
            endNonFunctionalProperties
            cities ofType set city
            population ofType xsd:integer
            extension ofType xsd:integer
             
      concept border subConceptOf geo:geographicLocation
            nonFunctionalProperties
                  dc:description hasValue "Border between two countries. Notice that it
                        would be more natural to model this as a location with a cardinality
                        constraint = 2 for the country property. However, it is not clear
                        how to do this in F-Logic"
            endNonFunctionalProperties
            countryA ofType country
            countryB ofType country            

      concept distance
            nonFunctionalProperties
                  dc:description hasValue "Distance between two points"
            endNonFunctionalProperties
            amount ofType xsd:float 
            units ofType xsd:string

      axiom validDistance
            nonFunctionalProperties
                  dc:description hasValue "The amount in a distance cannot be less than 0.
                        We only accept kilometers and miles."
            endNonFunctionalProperties
            definedBy
                  constraint
                        ?D[
                              amount hasValue ?A,
                              units hasValue ?U
                        ]memberOf distance
                        and ?A < 0
                        and not (U="Kilometers" or U="Miles").

      function kilometers
            nonFunctionalProperties
                  dc:description hasValue "Calculates a distance in kilometers"
            endNonFunctionalProperties
            d ofType distance
            range ofType xsd:float
            definedBy
                  forAll ?x,?y (      kilometers[d hasValue ?d, result hasValue ?y] equivalent
                         ?d[
                                    amount hasValue ?a,
                                    units hasValue ?u
                         ] and 
                              ( (?u="Kilometers" and ?y=?a) or
                                    (?a="Miles" and ?y=?a*1.609344))).

      function miles
            nonFunctionalProperties
                  dc:description hasValue "Calculates a distance in miles"
            endNonFunctionalProperties
            d ofType distance
            range ofType xsd:float
            definedBy
                  forAll ?x,?y (      miles[d hasValue ?d, result hasValue ?y] equivalent
                         ?d[
                                    amount hasValue ?a,
                                    units hasValue ?u
                         ] and 
                              ( (?u="Miles" and ?y=?a) or
                                    (?a="Kilometers" and ?y=?a/1.609344))).

      relation equalDistance
            nonFunctionalProperties
                  dc:description hasValue "Computes equality of a distance"
            endNonFunctionalProperties
            d1 ofType distance
            d2 ofType distance
            definedBy
                  forAll ?x,?y ( equalDistance[d1 hasValue ?x, d2 hasValue ?y] equivalent
                                                 kilometers(?x,?k1) and kilometers(?y,?k2) and ?k1=?k2).


      relation lessThanDistance
            nonFunctionalProperties
                  dc:description hasValue "Computes -less than- for a distance"
            endNonFunctionalProperties
            d1 ofType distance
            d2 ofType distance
            definedBy
                  forAll ?x,?y ( equalDistance[d1 hasValue ?x, d2 hasValue ?y] equivalent
                                                 kilometers(?x,?k1) and kilometers(?y,?k2) and ?k1<?k2).
            
      relation moreThanDistance
            nonFunctionalProperties
                  dc:description hasValue "Computes -more than- for a distance"
            endNonFunctionalProperties
            d1 ofType distance
            d2 ofType distance
            definedBy
                  forAll ?x,?y ( equalDistance[d1 hasValue ?x, d2 hasValue ?y] equivalent
                                                 kilometers(?x,?k1) and kilometers(?y,?k2) and ?k1>?k2).

      instance austria memberOf country
            fipsCode hasValue "AU"^^xsd:string
            isoCode hasValue "AT"^^xsd:string
                  
      instance germany memberOf country
            fipsCode hasValue "GM"^^xsd:string
            isoCode hasValue "DE"^^xsd:string
                  
      instance usa memberOf country
            fipsCode hasValue "US"^^xsd:string
            isoCode hasValue "US"^^xsd:string                  
                  
      instance innsbruck memberOf city
            name hasValue "Innsbruck"^^xsd:string
            locatedIn hasValue austria
      
      instance frankfurt memberOf city
            name hasValue "Frankfurt"^^xsd:string
            locatedIn hasValue germany
                              
      instance boston memberOf city
            name hasValue "Boston"^^xsd:string
            locatedIn hasValue usa
            
      instance massachusetts memberOf state
            name hasValue "Massachusetts"^^xsd:string
            locatedIn hasValue usa