@prefix cc: <http://creativecommons.org/ns#> .
@prefix dc: <http://purl.org/dc/elements/1.1/> .
@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix foaf: <http://xmlns.com/foaf/0.1/> .
@prefix foo: <https://w3id.org/def/foo#> .
@prefix ns1: <http://data.bioontology.org/metadata/> .
@prefix ns2: <http://www.w3.org/2003/06/sw-vocab-status/ns#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix pos: <http://www.w3.org/2003/01/geo/wgs84_pos#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix sosa: <http://www.w3.org/ns/sosa/> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix wo: <https://www.bbc.co.uk/ontologies/wildlife-ontology#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

### Ontology Declaration ###

foo: a owl:Ontology ;
    cc:license <http://creativecommons.org/licenses/by-sa/4.0/> ;
    dc:abstract "The Forest Observatory Ontology (FOO) comprises a novel ontology that integrates wildlife data generated by sensors. FOO borrows classes and properties from SOSA and BBC wildlife ontology."@en ;
    dc:contributor [
        foaf:name "Professor Omer Rana"@en ;
        foaf:homepage <https://profiles.cardiff.ac.uk/staff/ranaof> ;
        schema:identifier <https://orcid.org/0000-0003-3597-2646> 
    ],
    [
        foaf:name "Dr. Pablo Orozco-terWengel"@en ;
        foaf:homepage <https://profiles.cardiff.ac.uk/staff/orozco-terwengelpa> ;
        schema:identifier <https://orcid.org/0000-0002-7951-4148> 
    ],
    [
        foaf:name "Professor Benoit Goossens"@en ;
        foaf:homepage <https://profiles.cardiff.ac.uk/staff/goossensbr> ;
        schema:identifier <https://orcid.org/0000-0003-2360-4643> 
    ],
    [
        foaf:name "Dr. Charith Perera"@en ;
        foaf:homepage <https://profiles.cardiff.ac.uk/staff/pererac> ;
        schema:identifier <https://orcid.org/0000-0002-0190-3346> 
    ] ;
    dc:creator [
        foaf:name "Naeima Hamed"@en ;
        foaf:homepage <https://www.cardiff.ac.uk/people/research-students/view/2501164-hamed-naeima> ;
        schema:identifier <https://orcid.org/0000-0002-2998-5056> 
    ] ;
    dc:description "This ontology describes wildlife observations generated by sensors."@en ;
    dc:title "Forest Observatory Ontology (FOO)"@en ;
    dcterms:issued "2024-06-01"^^xsd:date ;
    dcterms:license <http://creativecommons.org/licenses/by-sa/4.0/> ;
    dcterms:publisher <https://ontoology.linkeddata.es/> ;
    vann:preferredNamespacePrefix "foo"@en ;
    vann:preferredNamespaceUri "https://w3id.org/def/foo#" ;
    owl:imports sosa: ;
    owl:versionIRI foo:V2.0 ;
    owl:versionInfo "BBC Wildlife Ontology Reused 26 June 2024" ;
    prov:generatedAtTime "2024-06-01T00:00:00+00:00"^^xsd:dateTime ;
    prov:wasAttributedTo <https://github.com/Naeima> ;
    prov:wasDerivedFrom <https://ontology.forest-observatory.org> ;
    schema:citation "Cite this vocabulary as: Hamed, N., Rana, O., Goossens, B., Orozco-terWengel, P., Perera, C. (2023). FOO: An Upper-Level Ontology for the Forest Observatory. In: Pesquita, C., et al. The Semantic Web: ESWC 2023 Satellite Events. ESWC 2023. Lecture Notes in Computer Science, vol 13998. Springer, Cham. https://doi.org/10.1007/978-3-031-43458-7_29"@en ;
    foaf:logo <https://github.com/Naeima/Forest-Observatory-Ontology/blob/main/logo.png?raw=true> ;
    dcterms:doi <https://doi.org/10.1007/978-3-031-43458-7_29> ;
    ns2:status "Active" ;
    rdfs:seeAlso <https://naeima.github.io/foo_html/> ;  
    rdfs:seeAlso <https://naeima.github.io/foo_html/index.ttl> .

### Provenance Information ###
<https://github.com/Naeima> a prov:Agent,
    foaf:Person ;
    foaf:affiliation "Cardiff University"@en ;
    foaf:mbox <mailto:naeima.hamed@cardiff.ac.uk> ;
    foaf:name "Naeima Hamed"@en .
<https://ontology.forest-observatory.org> a prov:Entity ;
    dc:creator "Data Provider"@en ;
    dc:description "The dataset from which this ontology was derived."@en ;
    dc:title "Source Dataset"@en ;
    dcterms:created "2023-01-15"^^xsd:date .
<https://link.springer.com/chapter/10.1007/978-3-031-43458-7_29> a prov:Agent,
    foaf:Organization ;
    foaf:homepage <https://rdcu.be/dKNG2> ;
    foaf:name "Springer, Cham"@en .


### FOO Classes (Reused from BBC Wildlife Ontology (wo)) ###
#### BBC Wildlife Ontology Taxonomic Classes ####
wo:Kingdom a owl:Class .
wo:Phylum a owl:Class .
wo:Class a owl:Class .
wo:Order a owl:Class .
wo:Family a owl:Class .
wo:Genus a owl:Class .
wo:Species a owl:Class .
wo:TaxonRank a owl:Class .

#### Kingdom ####
foo:Animalia a owl:Class ;
    rdfs:label "Animalia"@en-gb ;
    rdfs:subClassOf owl:Thing ;
    owl:equivalentClass wo:Animalia ;
    skos:definition "Animalia is the scientific grouping that includes all animals. Scientists, historians, and others classify similar things together, using a taxonomy."@en.

#### Phylum ####
foo:Chordata a owl:Class ;
    rdfs:label "Chordata"@en-gb ;
    rdfs:subClassOf foo:Animalia ;
    owl:equivalentClass wo:Chordata ;
    skos:definition  "A large phylum of animals that includes the vertebrates together with the sea squirts and lancelets. They are distinguished by the possession of a notochord at some stage during their development."@en .

#### Class ####
foo:Mammalia a owl:Class ;
    rdfs:label "Mammalia"@en-gb ;
    rdfs:subClassOf foo:Chordata ;
    owl:equivalentClass wo:Mammalia ;
    skos:definition  "The highest class of the subphylum Vertebrata comprising humans and all other animals that nourish their young with milk secreted by mammary glands."@en.

foo:Reptilia a owl:Class ;
    rdfs:label "Reptilia"@en-gb ;
    rdfs:subClassOf foo:Chordata ;
    owl:equivalentClass wo:Reptilia ;
    skos:definition   "Reptilia is a vertebrate animal of a class that includes snakes, lizards, crocodiles, turtles, and tortoises. They are distinguished by having a dry scaly skin and typically laying soft-shelled eggs on land."@en.
    
#### Order ####
foo:Proboscidea a owl:Class ;
    rdfs:label "Proboscidea"@en-gb ;
    rdfs:subClassOf foo:Mammalia ;
    owl:equivalentClass wo:Proboscidea ;
    skos:definition "Any of an order (Proboscidea) of large mammals comprising the elephants and extinct related forms."@en.
foo:Carnivora a owl:Class ;
    rdfs:label "Carnivora"@en-gb ;
    rdfs:subClassOf foo:Mammalia ;
    owl:equivalentClass wo:Carnivora ;
    skos:definition  "Carnivora is a monophyletic order of placental mammals consisting of the most recent common ancestor of all cats and dogs, and all descendants of that ancestor. Members of this group are formally referred to as carnivorans, and have evolved to specialize in eating flesh."@en .
foo:Squamata a owl:Class ;
    rdfs:label "Squamata"@en-gb ;
    rdfs:subClassOf foo:Reptilia ;
    owl:equivalentClass wo:Squamata .

#### Family ####
foo:Elephantidae a owl:Class ;
    rdfs:label "Elephantidae"@en-gb ;
    rdfs:subClassOf foo:Proboscidea ;
    owl:equivalentClass wo:Elephantidae ;
    skos:definition "ELEPHANTIDAE is a family of bulky mammals (order Proboscidea) comprising the recent elephants and related extinct forms."@en.

#### Additional Families ####

foo:Species  a owl:Class ;
    rdfs:label  "Species"@en-gb ;
    owl:equivalentClass  wo:Species ;
    skos:definition  "Generic class defining a biological species."@en.

foo:Genus  a owl:Class ;
    rdfs:label  "Genus"@en-gb ;
    owl:equivalentClass  wo:Genus . 

#############################################################################

#### FOO Observation and Sensor Classes (Reused from SOSA) ####

foo:Observation a owl:Class ;
    rdfs:label "Observation"@en ;
    rdfs:definedBy <https://w3id.org/def/foo> ;
    owl:equivalentClass sosa:Observation ;
    skos:definition "Act of carrying out an (Observation) Procedure to estimate or calculate a value of a property of a FeatureOfInterest (e.g., Elephant)."@en .

foo:Sensor a owl:Class ;
    rdfs:label "Sensor"@en ;
    rdfs:definedBy sosa:Sensor ;
    owl:equivalentClass sosa:Sensor ;
    skos:definition "Device, agent (including humans), or software (simulation) involved in, or implementing, a Procedure."@en .

foo:ObservableProperty a owl:Class ;
    rdfs:label "Observable Property"@en ;
    rdfs:definedBy <https://w3id.org/def/foo> ;
    owl:equivalentClass sosa:ObservableProperty ;
    skos:definition "An observable quality (property, characteristic) of a FeatureOfInterest."@en .

foo:FeatureOfInterest a owl:Class ;
  rdfs:label "Feature Of Interest"@en ;
  skos:definition "The thing whose property is being estimated or calculated in the course of an Observation to arrive at a Result or whose property is being manipulated by an Actuator, or which is being sampled or transformed in an act of Sampling."@en ;
  rdfs:comment "The thing whose property is being estimated or calculated in the course of an Observation to arrive at a Result or whose property is being manipulated by an Actuator, or which is being sampled or transformed in an act of Sampling."@en ;
  skos:example "When measuring the height of a tree, the height is the observed ObservableProperty, 20m may be the Result of the Observation, and the tree is the FeatureOfInterest. A window is a FeatureOfInterest for an automatic window control Actuator."@en ;
  owl:equivalentClass  sosa:FeatureOfInterest ;
  rdfs:isDefinedBy sosa: .

### FOO Object Properties (Reused from SOSA) ###

foo:hasFeatureOfInterest a owl:ObjectProperty ;
    rdfs:label "has Feature Of Interest"@en ;
    rdfs:comment "A relation between an Observation and the entity whose quality was observed."@en ;
    rdfs:domain foo:Observation ;
    rdfs:range foo:FeatureOfInterest ;
    owl:inverseOf sosa:isFeatureOfInterestOf ;
    owl:equivalentProperty sosa:hasFeatureOfInterest .

foo:isFeatureOfInterestOf a owl:ObjectProperty ;
    rdfs:label "is feature of interest of"@en ;
    rdfs:comment "A relation between a FeatureOfInterest and an Observation about it."@en ;
    rdfs:domain foo:FeatureOfInterest ; 
    rdfs:range foo:Observation ;
    owl:inverseOf sosa:hasFeatureOfInterest ;
    owl:equivalentProperty  sosa:isFeatureOfInterestOf .

foo:madeBySensor a owl:ObjectProperty ;
    rdfs:label "made by sensor"@en ;
    rdfs:comment "Relation between an Observation and the Sensor which made the Observation."@en ;
    rdfs:domain foo:Observation ;
    rdfs:range foo:Sensor ;
    owl:inverseOf foo:madeObservation ;
    owl:equivalentProperty sosa:madeBySensor .

foo:observedProperty a owl:ObjectProperty ;
    rdfs:label "observed property"@en ;
    rdfs:comment "Relation linking an Observation to the property that was observed."@en ;
    rdfs:domain foo:Observation ;
    rdfs:range foo:ObservableProperty ;
    owl:equivalentProperty    sosa:observedProperty  .

foo:isObservedBy a owl:ObjectProperty ;
    rdfs:label "is observed by"@en ;
    rdfs:comment "Relation between an ObservableProperty and the Sensor able to observe it."@en ;
    rdfs:domain foo:ObservableProperty ;
    rdfs:range foo:Sensor ;
    owl:inverseOf foo:observes ;
    owl:equivalentProperty  sosa:isObservedBy .

foo:madeObservation a owl:ObjectProperty ;
    rdfs:label "made observation"@en ;
    rdfs:comment "Relation between a Sensor and an Observation made by the Sensor."@en ;
    rdfs:domain foo:Sensor ;
    rdfs:range foo:Observation ;
    owl:inverseOf sosa:madeBySensor ;
    owl:equivalentProperty  sosa:madeObservation  .

foo:observes a owl:ObjectProperty ;
    rdfs:label "observes"@en ;
    rdfs:comment "Relation between a Sensor and an ObservableProperty that it is capable of sensing."@en ;
    rdfs:domain foo:Sensor ;
    rdfs:range foo:ObservableProperty ;
    owl:inverseOf foo:isObservedBy ;
    owl:equivalentProperty  sosa:observes  .  

#########################################################################################################

### FOO defined Classes###

foo:Primates a owl:Class ;
    rdfs:label "Primates"@en-gb ;
    rdfs:subClassOf foo:Mammalia ;
    rdfs:definedBy   <http://purl.bioontology.org/ontology/MESH/D011323> ;
    skos:definition  "An order of mammals consisting of more than 300 species that include LEMURS; LORISIDAE; TARSIERS; MONKEYS; and HOMINIDS. They are characterized by a relatively large brain when compared with other terrestrial" .

foo:Cercopithecidae a owl:Class;
    rdfs:label "Cercopithecidae"@en-gb ;
    rdfs:subClassOf foo:Primates ;
    rdfs:definedBy  <http://purl.bioontology.org/ontology/CSP/0182-1650>  ;
    skos:definition   "African and Asian monkeys with tail as balancing organ, opposable thumb and large toe, nostrils close together and directed downward; social in large groups, some ground dwelling".
  
foo:Nasalis a  owl:Class ;
    rdfs:label "Nasalis"@en-gb ;
    rdfs:subClassOf foo:Cercopithecidae ;
    skos:definition "Nasalis is a genus within the family Cercopithecidae (Old World monkeys), specifically part of the subfamily Colobinae, which comprises leaf-eating monkeys. The genus Nasalis is characterized by its sole species, Nasalis larvatus, commonly known as the proboscis monkey."@en .

foo:NasalisLarvatus a owl:Class ;
    rdfs:label "Proboscis Monkey"@en, "Nasalis larvatus"@la ;
    rdfs:subClassOf foo:Nasalis ;
    owl:equivalentClass   <http://purl.obolibrary.org/obo/NCBITaxon_43780> ;
    rdfs:comment "Male proboscis monkeys have notably large noses, which are believed to have evolved due to their sexually competitive social system. Significant correlations exist between nose size, body size, testis size, and the number of females in a male's harem. This suggests that both male competition and female choice have driven the evolution of these enlarged noses."@en ;
    rdfs:definedBy <https://doi.org/10.1016/S0006-3207(99)00066-X>, <https://doi/10.1126/sciadv.aaq0250> , <https://10.1371/journal.pone.0174891> ; 
    skos:definition "Nasalis larvatus, aka the proboscis monkey, is a primate species endemic to the island of Borneo. Characterized by its large, pendulous nose in males, this arboreal monkey primarily inhabits mangrove forests, riverine, and coastal areas, and is known for its distinct vocalizations and swimming abilities."@en .

foo:ElephasMaximus a owl:Class ;  
    rdfs:subClassOf foo:Elephantidae, foo:FeatureOfInterest ;
    rdfs:label "Asian Elephant"@en, "Elephas maximus"@la ;  
    rdfs:comment "Bornean elephants exhibit distinct morphological and behavioural traits compared to mainland Asian elephants, and their genetic uniqueness emphasises their priority for conservation efforts. Although they are considered an evolutionary significant unit requiring tailored conservation measures, their formal recognition as a subspecies awaits further research. Restricted to about 5% of Borneo, primarily in Sabah, Bornean elephants typically form family groups of 5 to 20 individuals, occasionally merging into larger herds of up to 200."@en ;
    rdfs:definedBy <https://doi.org/10.1016/j.biocon.2016.02.008>,
        <https://www.iucnredlist.org/species/7140/45818198> ;
    skos:definition "Elephas maximus, commonly known as the Asian elephant, is a species of large mammal native to various regions in South and Southeast Asia, including India, Sri Lanka, Thailand, and parts of Indonesia. It is distinguished by its smaller ears compared to its African relatives, and it has a prominent domed head with two hemispherical bulges. The Asian elephant is classified as Endangered due to significant threats from habitat loss, fragmentation, and poaching. This species plays a crucial ecological role, aiding in forest maintenance through seed dispersal and the creation of clearings in dense vegetation."@en .

foo:Pythonidae a owl:Class ;
    rdfs:subClassOf foo:Squamata   ;
    owl:equivalentClass   <http://purl.obolibrary.org/obo/NCBITaxon_34984> ;
    rdfs:label "Pythonidae"@en .

foo:Malayopython a owl:Class ;
     rdfs:subClassOf foo:Pythonidae  ;
     owl:equivalentClass  <http://purl.obolibrary.org/obo/NCBITaxon_1496304> ;
     rdfs:label "Malayopython"@en .  

foo:MalayopythonReticulatus a owl:Class ;
    rdfs:subClassOf  foo:Malayopython, foo:FeatureOfInterest  ;
    rdfs:label "Reticulated Python"@en, "Malayopython reticulatus"@la ;
    owl:equivalentClass  <http://purl.obolibrary.org/obo/NCBITaxon_1496311> ;
    rdfs:definedBy <https://orca.cardiff.ac.uk/id/eprint/152386/15/2022burgerphd.pdf> ;
    skos:definition "Malayopython reticulatus, aka the reticulated python, is a large snake species native to Southeast Asia. Renowned for its impressive length, it is the longest snake in the world, often exceeding 6 meters. It inhabits various environments, including rainforests, woodlands, and plantations, demonstrating adaptability. As a generalist predator, it feeds on many animals, contributing to its ecological significance."@en .

foo:ManisJavanica a owl:Class ;
    rdfs:subClassOf foo:Mammalia, foo:FeatureOfInterest ;
    rdfs:label "Sunda Pangolin"@en, "Manis javanica"@la ;
    owl:equivalentClass  <http://purl.bioontology.org/ontology/NCBITAXON/9974> ;
    rdfs:comment "Manis Javanica is a species critically threatened by poaching and habitat loss. It is one of eight pangolin species, all of which are considered Vulnerable, Endangered, or Critically Endangered according to the IUCN Red List and listed in CITES Appendix I. The Sunda pangolin, critically endangered and the only species found in Malaysia, inhabits Peninsular Malaysia and Malaysian Borneo, including Sabah and Sarawak. Despite its high protection status in Sabah, where it is (totally protected) under the Wildlife Conservation Enactment 1997, the species faces severe threats from illegal wildlife trade and habitat degradation. In 2019, authorities in Sabah seized over 30 tonnes of pangolin products, highlighting the extensive illicit trade network. The Sunda pangolin occupies various habitats, from primary and secondary forests to wetlands, mangroves, and grasslands."@en ;
    rdfs:definedBy <https://doi.org/10.1016/j.gecco.2024.e02962> ;
    skos:definition "Sunda pangolin aka Manis Javanica is a mammal distinguished by its protective armor of keratin scales, which cover its body except for its belly and face. Native to Southeast Asia, including Malaysia, Thailand, Indonesia, and Vietnam, this species is adapted to various habitats, ranging from primary and secondary forests to wetlands, mangroves, and grasslands. Characterized by its elongated body, small head, and long, prehensile tail, the Sunda pangolin is primarily nocturnal and has a diet mainly consisting of ants and termites, which it extracts using its long, sticky tongue. It plays a vital role in its ecosystem by controlling insect populations."@en .

### FOO Data Properties ###
### GPS Observation Data Properties ###
foo:temperature a owl:DatatypeProperty ;
    rdfs:label "Temperature" ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:double ;
    skos:definition "Estimated temperature of the elephant in Celsius at the moment of data collection." .

foo:count a owl:DatatypeProperty ;
    rdfs:label "Count"@en ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:integer ;
    skos:definition "Observation count per data set." .

foo:cov a owl:DatatypeProperty ;
    rdfs:label "Cov" ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:double ;
    skos:definition "TBC" .

foo:direction a owl:DatatypeProperty ;
    rdfs:label "Direction" ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:integer ;
    skos:definition "Direction of elephant travel at the moment of data collection." .

foo:distance a owl:DatatypeProperty ;
    rdfs:label "Distance"@en ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:double ;
    skos:definition "Distance (m) travelled from the last to the current data collection point." .

foo:gMTDate a owl:DatatypeProperty ;
    rdfs:label "GMT Date" ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:date ;
    skos:definition "The GMT date in Sabah, Malaysia, when the GPS collar records its readings." .

foo:gMTTime a owl:DatatypeProperty ;
    rdfs:label "GMT Time" ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:time ;
    skos:definition "The GMT time in Sabah, Malaysia, when the GPS collar records its readings." .

foo:hDOP a owl:DatatypeProperty ;
    rdfs:label "HDOP" ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:double ;
    skos:definition "Horizontal Dilution of Precision (HDOP), indicating GPS accuracy." .

foo:horizon a owl:DatatypeProperty ;
    rdfs:label "Horizon"@en ;
    rdfs:domain foo:soilObservation ;
    rdfs:range xsd:string ;
    skos:definition "Soil horizon sampled."@en .

foo:id a owl:DatatypeProperty ;
    rdfs:label "id"@en ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:string .

foo:landUse a owl:DatatypeProperty ;
    rdfs:label "Land Use"@en ;
    rdfs:domain foo:soilObservation ;
    rdfs:range xsd:string ;
    skos:definition "Land use of the study plots."@en .

foo:latitude a owl:DatatypeProperty ;
    rdfs:label "Latitude" ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:double ;
    owl:equivalentProperty pos:lat ;
    skos:definition "Latitudinal coordinate of the elephant." .

foo:localDate a owl:DatatypeProperty ;
    rdfs:label "Local Date" ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:date ;
    skos:definition "The local date in Sabah, Malaysia." .

foo:localTime a owl:DatatypeProperty ;
    rdfs:label "Local Time" ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:time ;
    skos:definition "The local time in Sabah, Malaysia." .

foo:longitude a owl:DatatypeProperty ;
    rdfs:label "Longitude" ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:double ;
    owl:equivalentProperty pos:long ;
    skos:definition "Longitudinal coordinate of the elephant." .

foo:speed a owl:DatatypeProperty ;
    rdfs:label "Speed" ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:double ;
    skos:definition "Speed of the elephant at the moment of data collection." .

### Soil Data Properties ###

foo:clay a owl:DatatypeProperty ;
    rdfs:label "Clay"@en ;
    rdfs:domain foo:soilObservation  ;
    rdfs:range xsd:double ;
    skos:definition "Clay content of the soil sample."@en .

foo:silt a owl:DatatypeProperty ;
    rdfs:label "Silt"@en ;
    rdfs:domain foo:soilObservation ;
    rdfs:range xsd:double ;
    skos:definition "Silt content of the soil sample."@en .

foo:site a owl:DatatypeProperty ;
    rdfs:label "Site"@en ;
    rdfs:domain foo:soilObservation ;
    rdfs:range xsd:string ;
    skos:definition "Geographical area/site which samples were taken from."@en .

foo:soilPH a owl:DatatypeProperty ;
    rdfs:label "Soil PH" ;
    rdfs:domain foo:soilObservation ;
    rdfs:range xsd:double ;
    skos:definition "Measured pH of the soil sample."@en .

foo:subplot a owl:DatatypeProperty ;
    rdfs:label "subPlot"@en ;
    rdfs:domain foo:gPSObservation ;
    rdfs:range xsd:string ;
    skos:definition "Number of the subplot sampled within each 1 Ha plot."@en .

foo:totalC a owl:DatatypeProperty ;
    rdfs:label "Total C"@en ;
    rdfs:domain foo:soilObservation ;
    rdfs:range xsd:double ;
    skos:definition "Total carbon content of the soil sample."@en .

foo:totalN a owl:DatatypeProperty ;
    rdfs:label "Total N"@en ;
    rdfs:domain foo:soilObservation ;
    rdfs:range xsd:double ;
    skos:definition "Total nitrogen content of the soil sample."@en .

### Tree Observation Data Properties ###

foo:lianaDBH_cm a owl:DatatypeProperty ;
    rdfs:label "lianaDBH_cm 10a"@en ;
    rdfs:domain foo:treeObservation ;
    rdfs:range xsd:string .

 foo:subplotRadius_m a owl:DatatypeProperty ;
    rdfs:label "SubplotRadius_m 30"@en ;
    rdfs:domain foo:treeObservation ;
    rdfs:range xsd:float .

 foo:treeDBH_cm a owl:DatatypeProperty ;
    rdfs:label "TreeDBH_cm 110"@en ;
    rdfs:domain foo:treeObservation ;
    rdfs:range xsd:float .

 foo:treeHeight_m   a owl:DatatypeProperty ;
    rdfs:label "treeHeight_m 60"@en ;
    rdfs:domain foo:treeObservation ;
    rdfs:range xsd:float .

 foo:treeID  a owl:DatatypeProperty ;
    rdfs:label "TreeID"@en ;
    rdfs:domain foo:treeObservation ;
    rdfs:range xsd:string .

 foo:treeDBH_cm  a owl:DatatypeProperty ;
    rdfs:label "TreeDBH_cm 110"@en ;
    rdfs:domain foo:treeObservation ;
    rdfs:range xsd:float .
    
 foo:treeIndividualNo  a owl:DatatypeProperty ;
    rdfs:label "TreeIndividualNo"@en ;
    rdfs:domain foo:treeObservation ;
    rdfs:range xsd:integer .

 foo:treeIndividualNo  a owl:DatatypeProperty ;
    rdfs:label "TreeIndividualNo"@en ;
    rdfs:domain foo:treeObservation ;
    rdfs:range xsd:integer .


### Camera Trap Image Data Properties ###
foo:name a owl:DatatypeProperty ;
    rdfs:label "Image Name"@en ;
    rdfs:domain foo:imageObservation ;
    rdfs:range xsd:string ;
    skos:definition "The name assigned to an image at collection time."@en .

foo:path a owl:DatatypeProperty ;
    rdfs:label "Image Path"@en ;
    rdfs:domain foo:imageObservation ;
    rdfs:range xsd:anyURI ;
    skos:definition "The URI pointing to the location of the image in secure cloud storage."@en .

foo:localDate a owl:DatatypeProperty ;
    rdfs:label "Local Date"@en ;
    rdfs:domain foo:imageObservation;
    rdfs:range xsd:date ;
    skos:definition "The current local date in Sabah, Malaysia when the GPS collar collects its readings."@en .

foo:localTime a owl:DatatypeProperty ;
    rdfs:label "Local Time"@en ;
    rdfs:domain foo:imageObservation ;
    rdfs:range xsd:time ;
    skos:definition "The current local time in Sabah, Malaysia when the GPS collar collects its readings."@en .

foo:gMTDate a owl:DatatypeProperty ;
    rdfs:label "GMT Date"@en ;
    rdfs:domain foo:imageObservation ;
    rdfs:range xsd:date ;
    skos:definition "The GMT date in Sabah, Malaysia when the GPS collar collects its readings."@en .

foo:gMTTime a owl:DatatypeProperty ;
    rdfs:label "GMT Time"@en ;
    rdfs:domain foo:imageObservation ;
    rdfs:range xsd:time ;
    skos:definition "The GMT time in Sabah, Malaysia when the GPS collar collects its readings."@en .

foo:model a owl:DatatypeProperty ;
    rdfs:label "Camera Model"@en ;
    rdfs:domain foo:imageObservation ;
    rdfs:range xsd:string ;
    skos:definition "The model of the trail camera used to capture the image."@en .

foo:make a owl:DatatypeProperty ;
    rdfs:label "Camera Make"@en ;
    rdfs:domain foo:imageObservation ;
    rdfs:range xsd:string ;
    skos:definition "The make of the trail camera used to capture the image."@en .

foo:imageFile a owl:DatatypeProperty ;
    rdfs:label "Image File"@en ;
    rdfs:domain  foo:imageObservation ;
    rdfs:range    xsd:string ;
    skos:definition "The image file name generated by the image observation."@en .

foo:cameraLocation a owl:DatatypeProperty ;
    rdfs:label "Camera Location"@en ;
    rdfs:domain  foo:imageObservation ;
    rdfs:range    xsd:string ;
    skos:definition "The location information (address) of the camera trap."@en .

 foo:animalDetected a owl:DatatypeProperty ;
    rdfs:label "Animal Detected"@en ;
    rdfs:domain  foo:imageObservation ;
    rdfs:range    xsd:string .

### FOO Instances ###
#### Sensor Instances ####
foo:aqeelaGPS a owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Aqeela GPS"@en ;
    foo:hasFeatureOfInterest foo:Aqeela ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Aqeela."@en ;
    foo:observes foo:gPSObservation .

foo:bikang1GPS a owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Bikang 1 GPS"@en ;
    foo:hasFeatureOfInterest foo:Bikang1 ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Bikang 1."@en ;
    foo:observes foo:gPSObservation .

foo:bikang2GPS a owl:NamedIndividual,  foo:Sensor ;
    rdfs:label "Bikang 2 GPS"@en ;
    foo:hasFeatureOfInterest foo:Bikang2 ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Bikang 2."@en ;
    foo:observes foo:gPSObservation .

foo:binbinganGPS a owl:NamedIndividual,  foo:Sensor ;
    rdfs:label "Binbingan GPS"@en ;
    foo:hasFeatureOfInterest foo:Binbingan ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Binbingan."@en ;
    foo:observes foo:gPSObservation .

foo:guliGPS a  owl:NamedIndividual,  foo:Sensor ;
    rdfs:label "Guli GPS"@en ;
    foo:hasFeatureOfInterest foo:Guli ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Guli."@en ;
    foo:observes foo:gPSObservation .

foo:itaGPS a owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Ita GPS"@en ;
    foo:hasFeatureOfInterest foo:Ita;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Ita."@en ;
    foo:observes foo:gPSObservation .

foo:jasminGPS a owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Jasmin GPS"@en ;
    foo:hasFeatureOfInterest foo:Jasmin ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Jasmin."@en ;
    foo:observes foo:gPSObservation .

foo:jasperGPS a owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Jasper GPS"@en ;
    foo:hasFeatureOfInterest foo:Jasper ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Jasper."@en ;
    foo:observes foo:gPSObservation .

foo:kasihGPS a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Kasih GPS"@en ;
    foo:hasFeatureOfInterest foo:Kasih ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Kasih."@en ;
    foo:observes foo:gPSObservation .

foo:kumaGPS a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Kuma GPS"@en ;
    foo:hasFeatureOfInterest foo:Kuma ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Kuma."@en ;
    foo:observes foo:gPSObservation .

foo:liunGPS a  owl:NamedIndividual,  foo:Sensor ;
    rdfs:label "Liun GPS"@en ;
    foo:hasFeatureOfInterest foo:Luin ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Liun."@en ;
    foo:observes foo:gPSObservation .

foo:maliauGPS a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Maliau GPS"@en ;
    foo:hasFeatureOfInterest foo:Maliau ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Maliau."@en ;
    foo:observes foo:gPSObservation .

foo:merotaiGPS a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Merotai GPS"@en ;
    foo:hasFeatureOfInterest foo:Merotai ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Merotai."@en ;
    foo:observes foo:gPSObservation .

foo:puteriGPS a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Puteri GPS"@en ;
    foo:hasFeatureOfInterest foo:Puteri ;
     skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Puteri."@en ;
    foo:observes foo:gPSObservation .

foo:pututGPS a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Putut GPS"@en ;
    foo:hasFeatureOfInterest foo:Putut ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Putut."@en ;
    foo:observes foo:gPSObservation .

foo:sejatiGPS a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Sejati GPS"@en ;
    foo:hasFeatureOfInterest foo:Sejati ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Sejati."@en ;
    foo:observes foo:gPSObservation .

foo:seriGPS a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Seri GPS"@en ;
    foo:hasFeatureOfInterest foo:Seri ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Seri."@en ;
    foo:observes foo:gPSObservation .

foo:tulidGPS a  owl:NamedIndividual,  foo:Sensor ;
    rdfs:label "Tulid GPS"@en ;
    foo:hasFeatureOfInterest foo:Tulid ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Tulid."@en ;
    foo:observes foo:gPSObservation .

foo:tunglapGPS a   owl:NamedIndividual,  foo:Sensor ;
    rdfs:label "Tunglap GPS"@en ;
    foo:hasFeatureOfInterest foo:Tunglap ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Tunglap."@en ;
    foo:observes foo:gPSObservation .

foo:umas2GPS a   owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Umas2 GPS"@en ;
    foo:hasFeatureOfInterest foo:Umas2 ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Umas2."@en ;
    foo:observes foo:gPSObservation .

foo:daraGPS a   owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Dara GPS"@en ;
    foo:hasFeatureOfInterest foo:Dara ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Dara."@en ;
    foo:observes foo:gPSObservation .

foo:abawGPS a   owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Abaw GPS"@en ;
    foo:hasFeatureOfInterest foo:Abaw ;
    skos:definition "A GPS collar sensor fitted around the neck of an Asian elephant named Abaw ."@en ;
    foo:observes foo:gPSObservation .


#### Animal Instances ####

foo:aqeela a owl:NamedIndividual, foo:ElephasMaximus ;
    rdfs:label "Aqeela"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:guli a   owl:NamedIndividual, foo:ElephasMaximus;
    rdfs:label "Guli"@en ;
    skos:definition "Male Asian Elephant."@en .

foo:bikang1 a   owl:NamedIndividual, foo:ElephasMaximus;
    rdfs:label "Bikang 1"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:bikang2 a   owl:NamedIndividual, foo:ElephasMaximus;
    rdfs:label "Bikang 2"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:dara a   owl:NamedIndividual, foo:ElephasMaximus;
    rdfs:label "Dara"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:abaw a   owl:NamedIndividual, foo:ElephasMaximus; 
    rdfs:label "Abaw"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:ita a   owl:NamedIndividual, foo:ElephasMaximus ;
    rdfs:label "Ita"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:jasmin a  owl:NamedIndividual,  foo:ElephasMaximus ;
    rdfs:label "Jasmin"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:jasper a  owl:NamedIndividual,  foo:ElephasMaximus ;
    rdfs:label "Jasper"@en ;
    skos:definition "Male Asian Elephant."@en .

foo:kasih a owl:NamedIndividual, foo:ElephasMaximus ;
    rdfs:label "Kasih"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:kuma a  owl:NamedIndividual,  foo:ElephasMaximus ;
    rdfs:label "Kuma"@en ;
    skos:definition "Male Asian Elephant."@en .

foo:liun a  owl:NamedIndividual,  foo:ElephasMaximus ;
    rdfs:label "Liun"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:maliau a  owl:NamedIndividual, foo:ElephasMaximus ;
    rdfs:label "Maliau"@en ;
    skos:definition "Male Asian Elephant."@en .

foo:merotai a   owl:NamedIndividual, foo:ElephasMaximus ;
    rdfs:label "Merotai"@en ;
    skos:definition "Male Asian Elephant."@en .

foo:puteri a  owl:NamedIndividual, foo:ElephasMaximus;
    rdfs:label "Puteri"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:putut a  owl:NamedIndividual, foo:ElephasMaximus ;
    rdfs:label "Putut"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:sejati a   owl:NamedIndividual, foo:ElephasMaximus ;
    rdfs:label "Sejati"@en ;
    skos:definition "Male Asian Elephant."@en .

foo:seri a   owl:NamedIndividual, foo:ElephasMaximus ;
    rdfs:label "Seri"@en ;
    skos:definition "Female Asian Elephant ."@en .

foo:tulid a   owl:NamedIndividual, foo:ElephasMaximus ;
    rdfs:label "Tulid"@en ;
    skos:definition "Female Asian Elephant ."@en .

foo:tunglap a  owl:NamedIndividual,  foo:ElephasMaximus ;
    rdfs:label "Tunglap"@en ;
    skos:definition "Female Asian Elephant."@en .

foo:umas2 a   owl:NamedIndividual, foo:ElephasMaximus ;
    rdfs:label "Umas2"@en ;
    skos:definition "Male Asian Elephant ."@en .

foo:gPSObservation a   owl:NamedIndividual,  foo:Observation ;
    rdfs:label "GPS Observation"@en ;
    foo:observedProperty  foo:id, foo:altitude , foo:count , foo:cov , foo:direction , foo:distance , foo:gMTDate ,
    foo:gMTTime , foo:hDOP , foo:latitude , foo:localDate , foo:local-time  , foo:longitude , foo:speed , foo:temperature  ;
    foo:hasFeatureOfInterest foo:ElephasMaximus ;
    foo:madeBySensor foo:AqeelaGPS, foo:Bikang1GPS, foo:Bikang2GPS, foo:BinbinganGPS, foo:DaraGPS, foo:GuliGPS, foo:ItaGPS, foo:JasminGPS, foo:JasperGPS, foo:KasihGPS, foo:KumaGPS, foo:LiunGPS, foo:MaliauGPS, foo:MerotaiGPS, foo:PuteriGPS, foo:PututGPS, foo:SejatiGPS, foo:SeriGPS, foo:TulidGPS, foo:TunglapGPS, foo:Umas2GPS ;
    foo:resultTime "2011-10-26T07:40:35"^^xsd:dateTime, "2015-10-26T07:40:35"^^xsd:dateTime .

####Soil Modeling ####
foo:Soil a owl:Class ;
    rdfs:label "Soil"@en ;
    rdfs:subClassOf   foo:FeatureOfInterest ;
    owl:equivalentClass  <https://saref.etsi.org/saref4agri/Soil>  .

#### Soil Sensor ####
foo:soilSensor a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Soil Sensor"@en ;
    owl:sameAs  <https://saref.etsi.org/saref4agri/SoilTensiometer> ;
    foo:hasFeatureOfInterest foo:Soil .

#### Soil Observation ####
foo:soilObservation a  owl:NamedIndividual,  foo:Observation ;
    rdfs:label "Soil Observation"@en ;    
# Soil properties observed
    foo:observedProperty foo:cNRatio ,
    foo:clay,
    foo:horizon ,
    foo:identifier ,
    foo:inorganicP ,
    foo:landUse ,
    foo:plotName ,
    foo:sand ,
    foo:silt  ,
    foo:site  ,
    foo:soilPH  ,
    foo:subplot  ,
    foo:totalC  ,
    foo:totalN ,
    foo:totalP ;
    
# Link the observation to the soil feature and sensor
    foo:hasFeatureOfInterest foo:Soil ;
    foo:madeBySensor foo:soilSensor .

#### Tree Modeling ####

foo:treeSensor a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Tree Sensor"@en ;
    foo:observes foo:treeProperties ;
    foo:hasFeatureOfInterest foo:Tree .

#### Tree modeling ####
foo:Tree a owl:Class ;
    rdfs:subClassOf   foo:FeatureOfInterest ;
    rdfs:label "Tree"@en .

#### Tree Observation ####
foo:treeObservation a  owl:NamedIndividual, foo:Observation ;
    rdfs:label "Tree Observation"@en ;
    
# Observation metadata
    foo:observedProperty  foo:date ,
    foo:iD ,   
    # Tree measurements
    foo:lianaDBH_cm ,
    foo:subplotRadius_m ,
    foo:treeDBH_cm  ,
    foo:treeHeight_m  ,
    foo:treeID  ,
    foo:treeIndividualNo  ,
    foo:treeNLianas ,
    foo:treeNotes ;
    
    # Link the observation to the feature of interest (tree) and sensor
    foo:hasFeatureOfInterest foo:Tree ;
    foo:madeBySensor foo:treeSensor .    

#### Lianas as Feature of Interest ####
foo:lianas a  owl:NamedIndividual, foo:Tree ;
    rdfs:label "Lianas"@en ;
    foo:isObservedBy foo:lianaSensor .

#### Liana Sensor ####
foo:lianaSensor a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Liana Sensor"@en ;
    foo:observes foo:lianaProperties .

##### Camera Trap Images Modeling #### 
#### Image as a Feature of Interest ####
foo:Image a owl:Class ;
    rdfs:subClassOf   foo:FeatureOfInterest ;
    owl:equivalentClass   foaf:Image ;
    rdfs:label "Camera Trap Image"@en ;
    skos:definition "Image generated by motion-activated wildlife cameras."@en ;
    rdfs:comment   "The image as feature of interest for the camera trap because it carries data critical to wildlife analysis such as species. However, it should ideally have a clear, semantically relevant role—such as representing visual evidence in an image recognition or object detection model—otherwise, it might dilute the clarity of the knowledge graph or ontology."; 
    rdfs:definedBy <http://w3id.org/def/foo#> .

#### Camera Trap Sensor ####
foo:cameraTrap a  owl:NamedIndividual, foo:Sensor ;
    rdfs:label "Camera Trap"@en ;
    foo:observes foo:imageObservation ;
    foo:observedProperty  foo:model  ,
    foo:make  ;
    foo:hasFeatureOfInterest foo:Image .

#### Image Observation ####
foo:imageObservation a owl:NamedIndividual,  foo:Observation ;
    rdfs:label "Image Observation"@en ;
    foo:hasFeatureOfInterest foo:Image ;
    foo:madeBySensor foo:cameraTrap ;
    foo:observedProperty   foo:imageFile ,
    foo:cameraLocation ,
    foo:animalDetected .

##### Oil Palm Plantation ######
foo:OilPalmPlantation a  owl:Class ;
    rdfs:label   "Oil Palm Plantation" ;
    rdfs:subClassOf  foo:FeatureOfInterest ;
    rdfs:comment  "Oil palm plantations near the Danau Girang Field Centre (DGFC) in Sabah, Malaysia, are situated within the fragmented landscape of the Lower Kinabatangan floodplain, approximately between 5.4°N to 5.6°N latitude and 117.9°E to 118.1°E longitude. This region includes a mix of protected forests, degraded habitats, and extensive plantations, often bordering riparian corridors along the Kinabatangan River. These plantations have significantly impacted biodiversity and habitat connectivity, posing challenges for wildlife such as Bornean elephants and orangutans.";
    owl:equivalentClass      <http://purl.obolibrary.org/obo/ENVO_00000120> . 

foo:plantation a owl:NamedIndividual, foo:OilPalmPlantation;
    pos:latitude "5.36"^^xsd:float;
    pos:longitude "118.66 "^^xsd:float.

##### How to reuse FOO #######

# To enable effective reuse of this ontology, please follow these guidelines:
# 1. Create your own custom ontology using identical class and property names as in this model.
# 2. Import the `FOO` ontology (https://w3id.org/def/foo#) directly into your new ontology.
# 3. For each class and property, link your custom definitions to those in the `FOO` ontology using owl:equivalentClass, owl:equivalentProperty, and owl:sameAs.
# This approach will maintain semantic consistency and allow for smooth interoperability across ontologies that reference shared terms and structures.