@prefix dcterms: <http://purl.org/dc/terms/> .
@prefix mlo: <https://www.godiveios.com/marine-life/> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix vann: <http://purl.org/vocab/vann/> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

mlo:ActivityType a rdfs:Class ;
    rdfs:label "activity type"@en ;
    rdfs:comment "Kind of in-water activity: scuba, snorkel, freedive, etc."@en .

mlo:BodyOfWater a rdfs:Class ;
    rdfs:label "body of water"@en ;
    rdfs:comment "An ocean, sea, gulf, bay, lagoon, or other water body resource (optional structured link from a Site)."@en .

mlo:Country a rdfs:Class ;
    rdfs:label "country"@en ;
    rdfs:comment "A country resource used to graph Sites (and optionally other place facts). Complements the literal mlo:country string on Site."@en .

mlo:CurrentStrength a rdfs:Class ;
    rdfs:label "current strength"@en ;
    rdfs:comment "Qualitative strength of water current during the activity."@en .

mlo:DepthCertainty a rdfs:Class ;
    rdfs:label "depth certainty"@en ;
    rdfs:comment "How reliable the organism depth value is: measured (e.g. dive computer at organism depth), estimated, or rough guess."@en .

mlo:Dive a rdfs:Class ;
    rdfs:label "dive"@en ;
    rdfs:comment "Alias for DiveActivity."@en ;
    rdfs:subClassOf mlo:DiveActivity .

mlo:DiveActivity a rdfs:Class ;
    rdfs:label "dive activity"@en ;
    rdfs:comment "Scuba dive session. Maps to GoDiveMVP DiveActivity. Scuba-specific properties live in godive-activity.ttl."@en ;
    rdfs:subClassOf mlo:InWaterActivity .

mlo:DiveSite a rdfs:Class ;
    rdfs:label "dive site"@en ;
    rdfs:comment "Alias for mlo:Site (GoDive type name DiveSite)."@en ;
    rdfs:subClassOf mlo:Site .

mlo:Diver a rdfs:Class ;
    rdfs:label "diver"@en ;
    rdfs:comment "Alias for Observer; prefer mlo:Observer."@en ;
    rdfs:subClassOf mlo:Observer .

mlo:IdentificationCertainty a rdfs:Class ;
    rdfs:label "identification certainty"@en ;
    rdfs:comment "Controlled level of confidence in the organism identification for a sighting: uncertain, likely, AI assessed, self confirmed, or peer confirmed."@en .

mlo:InWaterActivity a rdfs:Class ;
    rdfs:label "in-water activity"@en ;
    rdfs:comment "Shared parent for scuba and snorkel outings (aligned with GoDiveMVP DiveActivity / SnorkelActivity). Sightings attach here via duringActivity."@en .

mlo:LifeStage a rdfs:Class ;
    rdfs:label "life stage"@en ;
    rdfs:comment "Developmental or size stage of the organism as observed (larva, juvenile, adult, etc.)."@en .

mlo:MarineLifeOwnership a rdfs:Class ;
    rdfs:label "marine life ownership"@en ;
    rdfs:comment "GoDive MarineLifeOwnership: catalog or userOwned."@en .

mlo:MediaAsset a rdfs:Class ;
    rdfs:label "media asset"@en ;
    rdfs:comment "A photo, video, or other media file documenting a sighting or activity."@en .

mlo:Observer a rdfs:Class ;
    rdfs:label "observer"@en ;
    rdfs:comment "A person who logs an in-water activity or sighting (scuba diver, snorkeler, etc.)."@en .

mlo:OrganismConcept a rdfs:Class ;
    rdfs:label "organism concept"@en ;
    rdfs:comment "A kind of marine organism divers may encounter. Maps to GoDiveMVP MarineLife / UserMarineLife catalog rows (field-guide species)."@en .

mlo:PhysicalTrait a rdfs:Class ;
    rdfs:label "physical trait"@en ;
    rdfs:comment "Structured trait resource (ontology extension; GoDive uses distinctiveFeatures string)."@en .

mlo:Sighting a rdfs:Class ;
    rdfs:label "sighting"@en ;
    rdfs:comment "An observation of an organism during an in-water activity — maps to GoDiveMVP SightingInstance. One of two foundational facts (with OrganismConcept). Prefer also sightingSite for direct Site graphing."@en .

mlo:Site a rdfs:Class ;
    rdfs:label "site"@en ;
    rdfs:comment "Named dive/snorkel site. Hub for characteristic graph: inCountry, locatedInWater, siteWaterType, catalog depth (siteMaxDepthM), SiteReports (visit conditions/depth), and Sightings. Maps to GoDiveMVP DiveSite (id, siteName, country, region, bodyOfWater, lat/long, timezone, tags, rating, entry, environment, maxDepth, waterType, ownership)."@en .

mlo:SiteOwnership a rdfs:Class ;
    rdfs:label "site ownership"@en ;
    rdfs:comment "GoDive DiveSiteOwnership: catalogReference or userOwned."@en .

mlo:SiteReport a rdfs:Class ;
    rdfs:label "site report"@en ;
    rdfs:comment "Visit projection at a Site: observed depth and conditions (current, visibility, temp, water type). InWaterActivity remains the GoDive source of truth; mint one SiteReport per posted activity via fromActivity when contributing to the site graph."@en .

mlo:SnorkelActivity a rdfs:Class ;
    rdfs:label "snorkel activity"@en ;
    rdfs:comment "Snorkel / surface-swim session. Maps to GoDiveMVP SnorkelActivity. Snorkel-specific properties live in godive-activity.ttl."@en ;
    rdfs:subClassOf mlo:InWaterActivity .

mlo:Species a rdfs:Class ;
    rdfs:label "species"@en ;
    rdfs:comment "Species-level organism concept (typical typing for GoDive MarineLife rows)."@en ;
    rdfs:subClassOf mlo:OrganismConcept .

mlo:Taxon a rdfs:Class ;
    rdfs:label "taxon"@en ;
    rdfs:comment "A named taxonomic group at any rank, e.g. Chordata (phylum) or Carcharhinidae (family)."@en .

mlo:TaxonomicRank a rdfs:Class ;
    rdfs:label "taxonomic rank"@en ;
    rdfs:comment "A level in the taxonomic hierarchy (kingdom, phylum, class, order, family, genus, species)."@en .

mlo:TimeOfDay a rdfs:Class ;
    rdfs:label "time of day"@en ;
    rdfs:comment "Coarse activity timing category: dawn, day, dusk, or night."@en .

mlo:VisibilityRating a rdfs:Class ;
    rdfs:label "visibility rating"@en ;
    rdfs:comment "GoDive DiveVisibilityRating: poor, good, great."@en .

mlo:WaterType a rdfs:Class ;
    rdfs:label "water type"@en ;
    rdfs:comment "GoDive DiveWaterType: saltwater or freshwater."@en .

mlo: a owl:Ontology ;
    rdfs:label "Scuba Dive Marine Life Ontology"@en ;
    dcterms:created "2026-08-05"^^xsd:date ;
    dcterms:description "Two foundational building blocks: OrganismConcept (kinds of marine life with traits, taxonomy, and environment links) and Sighting (timestamped observations during an InWaterActivity such as scuba or snorkel, with depth, conditions, observer, and media)."@en ;
    dcterms:modified "2026-08-05"^^xsd:date ;
    dcterms:title "Scuba Dive Marine Life Ontology"@en ;
    vann:preferredNamespacePrefix "mlo" ;
    vann:preferredNamespaceUri "https://www.godiveios.com/marine-life/" ;
    rdfs:comment "Vocabulary for scuba/snorkel knowledge graphs: organism concepts, taxonomic identity, physical traits, sites and water bodies, and sightings during in-water activities (with depth and conditions)."@en ;
    owl:versionInfo "0.2.1" .

mlo:aboutText a rdf:Property ;
    rdfs:label "about text"@en ;
    rdfs:comment "GoDive MarineLife.aboutText."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:abundance a rdf:Property ;
    rdfs:label "abundance"@en ;
    rdfs:comment "How many were seen: single, few, many, school, etc."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range rdfs:Literal .

mlo:activityNotes a rdf:Property ;
    rdfs:label "activity notes"@en ;
    rdfs:comment "GoDive notes on the activity."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range rdfs:Literal .

mlo:activityStartDateTime a rdf:Property ;
    rdfs:label "activity start date-time"@en ;
    rdfs:comment "UTC start instant (GoDive DiveActivity/SnorkelActivity.startTime)."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:dateTime .

mlo:activityType a rdf:Property ;
    rdfs:label "activity type"@en ;
    rdfs:comment "Scuba, snorkel, freedive, etc."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range mlo:ActivityType .

<https://www.godiveios.com/marine-life/activityType/Freedive> a mlo:ActivityType ;
    rdfs:label "freedive"@en .

<https://www.godiveios.com/marine-life/activityType/Scuba> a mlo:ActivityType ;
    rdfs:label "scuba"@en ;
    rdfs:comment "Open- or closed-circuit scuba dive."@en .

<https://www.godiveios.com/marine-life/activityType/Snorkel> a mlo:ActivityType ;
    rdfs:label "snorkel"@en ;
    rdfs:comment "Surface / near-surface snorkel; organism depth is often estimated from above."@en .

mlo:aphiaId a rdf:Property ;
    rdfs:label "WoRMS AphiaID"@en ;
    rdfs:comment "Optional link key to the World Register of Marine Species (not in GoDive MarineLife)."@en ;
    rdfs:domain mlo:Taxon ;
    rdfs:range xsd:integer .

mlo:averageDepthM a rdf:Property ;
    rdfs:label "average depth (m)"@en ;
    rdfs:comment "GoDive DiveActivity.averageDepthMeters (scuba); uncommon for snorkel."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:decimal .

mlo:avgHeartRateBPM a rdf:Property ;
    rdfs:label "average heart rate (bpm)"@en ;
    rdfs:domain mlo:SnorkelActivity ;
    rdfs:range xsd:integer .

mlo:avgMovingSpeedMps a rdf:Property ;
    rdfs:label "average moving speed (m/s)"@en ;
    rdfs:domain mlo:SnorkelActivity ;
    rdfs:range xsd:decimal .

mlo:avgRMV a rdf:Property ;
    rdfs:label "average RMV (L/min)"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range xsd:decimal .

mlo:avgSAC a rdf:Property ;
    rdfs:label "average SAC (psi/min)"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range xsd:decimal .

mlo:behaviorNote a rdf:Property ;
    rdfs:label "behavior note"@en ;
    rdfs:comment "Ontology extension; prefer habitatBehavior for GoDive parity."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:bodyColor a rdf:Property ;
    rdfs:label "body color"@en ;
    rdfs:comment "Ontology extension (not a dedicated GoDive MarineLife field)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:bottomTimeSeconds a rdf:Property ;
    rdfs:label "bottom time (seconds)"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range xsd:integer .

mlo:broaderTaxon a rdf:Property ;
    rdfs:label "broader taxon"@en ;
    rdfs:comment "Immediate parent taxon (e.g. species → genus → family → … → phylum)."@en ;
    rdfs:domain mlo:Taxon ;
    rdfs:range mlo:Taxon .

mlo:caption a rdf:Property ;
    rdfs:label "caption"@en ;
    rdfs:domain mlo:MediaAsset ;
    rdfs:range rdfs:Literal .

mlo:capturedAt a rdf:Property ;
    rdfs:label "captured at"@en ;
    rdfs:domain mlo:MediaAsset ;
    rdfs:range xsd:dateTime .

mlo:catalogAbundance a rdf:Property ;
    rdfs:label "catalog abundance"@en ;
    rdfs:comment "GoDive MarineLife.abundance (species-level; distinct from sighting abundance)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:category a rdf:Property ;
    rdfs:label "category"@en ;
    rdfs:comment "GoDive MarineLife.category (field-guide category)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

<https://www.godiveios.com/marine-life/certainty/AIAssessed> a mlo:IdentificationCertainty ;
    rdfs:label "AI assessed"@en ;
    rdfs:comment "Identification proposed by an AI classifier from media (photo/video); not yet human-confirmed."@en .

<https://www.godiveios.com/marine-life/certainty/Likely> a mlo:IdentificationCertainty ;
    rdfs:label "likely"@en ;
    rdfs:comment "Good match with some remaining doubt (incomplete view, look-alikes, etc.)."@en .

<https://www.godiveios.com/marine-life/certainty/PeerConfirmed> a mlo:IdentificationCertainty ;
    rdfs:label "peer confirmed"@en ;
    rdfs:comment "Identification corroborated by another person (buddy, instructor, community reviewer, etc.)."@en .

<https://www.godiveios.com/marine-life/certainty/SelfConfirmed> a mlo:IdentificationCertainty ;
    rdfs:label "self confirmed"@en ;
    rdfs:comment "Observer is confident in their own identification from the sighting."@en .

<https://www.godiveios.com/marine-life/certainty/Uncertain> a mlo:IdentificationCertainty ;
    rdfs:label "uncertain"@en ;
    rdfs:comment "Identification is weak, deferred, or not trusted yet."@en .

mlo:commonName a rdf:Property ;
    rdfs:label "common name"@en ;
    rdfs:comment "GoDive MarineLife.commonName."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:count a rdf:Property ;
    rdfs:label "count"@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range xsd:integer .

mlo:country a rdf:Property ;
    rdfs:label "country"@en ;
    rdfs:comment "GoDive DiveSite.country string. Prefer also mlo:inCountry to a Country resource for graphing."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range rdfs:Literal .

mlo:countryCode a rdf:Property ;
    rdfs:label "country code"@en ;
    rdfs:comment "ISO 3166-1 alpha-2 when known (GoDive DiveSite.countryCode)."@en ;
    rdfs:domain mlo:Country ;
    rdfs:range xsd:string .

mlo:countryName a rdf:Property ;
    rdfs:label "country name"@en ;
    rdfs:domain mlo:Country ;
    rdfs:range rdfs:Literal .

mlo:countryOrRegion a rdf:Property ;
    rdfs:label "country or region"@en ;
    rdfs:comment "Legacy combined label; prefer separate country + region (GoDive)."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range rdfs:Literal .

<https://www.godiveios.com/marine-life/current/High> a mlo:CurrentStrength ;
    rdfs:label "high"@en ;
    rdfs:comment "GoDive: high."@en .

<https://www.godiveios.com/marine-life/current/Low> a mlo:CurrentStrength ;
    rdfs:label "low"@en ;
    rdfs:comment "GoDive: low."@en .

<https://www.godiveios.com/marine-life/current/Medium> a mlo:CurrentStrength ;
    rdfs:label "medium"@en ;
    rdfs:comment "GoDive: medium."@en .

<https://www.godiveios.com/marine-life/current/None> a mlo:CurrentStrength ;
    rdfs:label "none"@en ;
    rdfs:comment "GoDive: none."@en .

mlo:currentDirection a rdf:Property ;
    rdfs:label "current direction"@en ;
    rdfs:comment "Free-text or bearing description, e.g. \"northbound along wreck\", \"from the SE\"."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range rdfs:Literal .

mlo:currentNote a rdf:Property ;
    rdfs:label "current note"@en ;
    rdfs:comment "Additional current context (surge, downcurrent, changing mid-activity, etc.)."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range rdfs:Literal .

mlo:currentStrength a rdf:Property ;
    rdfs:label "current strength"@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range mlo:CurrentStrength .

mlo:depthCertainty a rdf:Property ;
    rdfs:label "depth certainty"@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range mlo:DepthCertainty .

<https://www.godiveios.com/marine-life/depthCertainty/Estimated> a mlo:DepthCertainty ;
    rdfs:label "estimated"@en ;
    rdfs:comment "Reasonable estimate; common when snorkeling and looking down the water column."@en .

<https://www.godiveios.com/marine-life/depthCertainty/Measured> a mlo:DepthCertainty ;
    rdfs:label "measured"@en ;
    rdfs:comment "Depth from a gauge/computer at or very near the organism."@en .

<https://www.godiveios.com/marine-life/depthCertainty/RoughGuess> a mlo:DepthCertainty ;
    rdfs:label "rough guess"@en ;
    rdfs:comment "Low-confidence depth guess."@en .

mlo:depthIsEstimate a rdf:Property ;
    rdfs:label "depth is estimate"@en ;
    rdfs:comment "True when sightingDepthM is estimated rather than measured — typical for snorkel sightings."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range xsd:boolean .

mlo:distinctiveFeature a rdf:Property ;
    rdfs:label "distinctive feature"@en ;
    rdfs:comment "Alias for distinctiveFeatures."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal ;
    rdfs:subPropertyOf mlo:distinctiveFeatures .

mlo:diveDate a rdf:Property ;
    rdfs:label "dive date"@en ;
    rdfs:comment "Alias for activityDate."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:date ;
    rdfs:subPropertyOf mlo:activityDate .

mlo:diveDurationMin a rdf:Property ;
    rdfs:label "dive duration (minutes)"@en ;
    rdfs:comment "Alias for activityDurationMin."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:integer ;
    rdfs:subPropertyOf mlo:activityDurationMin .

mlo:diveMasterName a rdf:Property ;
    rdfs:label "dive master name"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range rdfs:Literal .

mlo:diveNumber a rdf:Property ;
    rdfs:label "dive number"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range xsd:integer .

mlo:diveOperatorName a rdf:Property ;
    rdfs:label "dive operator name"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range rdfs:Literal .

mlo:diveSite a rdf:Property ;
    rdfs:label "dive site"@en ;
    rdfs:comment "Alias for atSite."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range mlo:Site ;
    rdfs:subPropertyOf mlo:atSite .

mlo:diveStartTime a rdf:Property ;
    rdfs:label "dive start time"@en ;
    rdfs:comment "Alias for activityStartTime."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:time ;
    rdfs:subPropertyOf mlo:activityStartTime .

mlo:diverName a rdf:Property ;
    rdfs:label "diver name"@en ;
    rdfs:comment "Alias for observerName."@en ;
    rdfs:domain mlo:Observer ;
    rdfs:range rdfs:Literal ;
    rdfs:subPropertyOf mlo:observerName .

mlo:diverReaction a rdf:Property ;
    rdfs:label "diver reaction"@en ;
    rdfs:comment "GoDive MarineLife.diverReaction (how divers should respond / behave)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:diverWeightKg a rdf:Property ;
    rdfs:label "diver weight (kg)"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range xsd:decimal .

mlo:duringDive a rdf:Property ;
    rdfs:label "during dive"@en ;
    rdfs:comment "Alias for duringDiveActivity."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range mlo:DiveActivity ;
    rdfs:subPropertyOf mlo:duringDiveActivity .

mlo:duringSiteReport a rdf:Property ;
    rdfs:label "during site report"@en ;
    rdfs:comment "Sighting belongs to the SiteReport for the same InWaterActivity (1:1 SiteReport ↔ activity). Prefer report IRI report/{activityUUID}."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range mlo:SiteReport .

mlo:duringSnorkelActivity a rdf:Property ;
    rdfs:label "during snorkel activity"@en ;
    rdfs:comment "Sighting logged on a SnorkelActivity (GoDive SightingInstance.snorkelActivity)."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range mlo:SnorkelActivity ;
    rdfs:subPropertyOf mlo:duringActivity .

mlo:entryLatitude a rdf:Property ;
    rdfs:label "entry latitude"@en ;
    rdfs:comment "GoDive entryLatitude."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:decimal .

mlo:entryLongitude a rdf:Property ;
    rdfs:label "entry longitude"@en ;
    rdfs:comment "GoDive entryLongitude."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:decimal .

mlo:entryType a rdf:Property ;
    rdfs:label "entry type"@en ;
    rdfs:comment "Activity entry type (GoDive DiveActivity.entryType). Site catalog entry is mlo:entry on Site."@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range rdfs:Literal .

mlo:familyName a rdf:Property ;
    rdfs:label "family name"@en ;
    rdfs:comment "GoDive MarineLife.familyName (e.g. Angelfishes)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:featureImageResourceName a rdf:Property ;
    rdfs:label "feature image resource name"@en ;
    rdfs:comment "GoDive MarineLife.featureImageResourceName (bundled JPEG name, no extension)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range xsd:string .

mlo:featureImageURL a rdf:Property ;
    rdfs:label "feature image URL"@en ;
    rdfs:comment "GoDive MarineLife.featureImageURL."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range xsd:anyURI .

mlo:featureModelResourceName a rdf:Property ;
    rdfs:label "feature model resource name"@en ;
    rdfs:comment "GoDive MarineLife.featureModelResourceName (bundled USDZ name, no extension)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range xsd:string .

mlo:featureModelURL a rdf:Property ;
    rdfs:label "feature model URL"@en ;
    rdfs:comment "GoDive MarineLife.featureModelURL (remote USDZ)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range xsd:anyURI .

mlo:foundInWater a rdf:Property ;
    rdfs:label "found in water body"@en ;
    rdfs:comment "Ontology extension: structured water-body link (not on GoDive MarineLife)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range mlo:BodyOfWater .

mlo:fromActivity a rdf:Property ;
    rdfs:label "from activity"@en ;
    rdfs:comment "Optional link to the DiveActivity/SnorkelActivity that sourced this report."@en ;
    rdfs:domain mlo:SiteReport ;
    rdfs:range mlo:InWaterActivity .

mlo:gasType a rdf:Property ;
    rdfs:label "gas type"@en ;
    rdfs:comment "Air, Nitrox, etc."@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range rdfs:Literal .

mlo:godiveMarineLifeUUID a rdf:Property ;
    rdfs:label "GoDive marine life UUID"@en ;
    rdfs:comment "GoDive MarineLife.uuid / UserMarineLife.uuid (SightingInstance.marineLifeUUID)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf mlo:godiveUUID .

mlo:godiveMediaUUID a rdf:Property ;
    rdfs:label "GoDive media UUID"@en ;
    rdfs:comment "GoDive DiveMediaPhoto.id or SnorkelMediaPhoto.id."@en ;
    rdfs:domain mlo:MediaAsset ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf mlo:godiveUUID .

mlo:godiveSightingUUID a rdf:Property ;
    rdfs:label "GoDive sighting UUID"@en ;
    rdfs:comment "GoDive SightingInstance.sightingUUID."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf mlo:godiveUUID .

mlo:godiveSiteUUID a rdf:Property ;
    rdfs:label "GoDive site UUID"@en ;
    rdfs:comment "GoDive diveSiteID / Site.id (catalog or user-owned site)."@en ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf mlo:godiveUUID .

mlo:habitatBehavior a rdf:Property ;
    rdfs:label "habitat behavior"@en ;
    rdfs:comment "GoDive MarineLife.habitatBehavior."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:habitatNote a rdf:Property ;
    rdfs:label "habitat note"@en ;
    rdfs:comment "Ontology extension; prefer habitatBehavior for GoDive parity."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:hasMedia a rdf:Property ;
    rdfs:label "has media"@en ;
    rdfs:comment "Media documenting this sighting."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range mlo:MediaAsset .

mlo:hasPhysicalTrait a rdf:Property ;
    rdfs:label "has physical trait"@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range mlo:PhysicalTrait .

mlo:hasRank a rdf:Property ;
    rdfs:label "has rank"@en ;
    rdfs:domain mlo:Taxon ;
    rdfs:range mlo:TaxonomicRank .

mlo:hasSighting a rdf:Property ;
    rdfs:label "has sighting"@en ;
    rdfs:comment "Inverse convenience: Site → Sighting."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range mlo:Sighting .

mlo:hasSiteReport a rdf:Property ;
    rdfs:label "has site report"@en ;
    rdfs:comment "Inverse convenience: Site → SiteReport."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range mlo:SiteReport .

mlo:hazardNote a rdf:Property ;
    rdfs:label "hazard note"@en ;
    rdfs:comment "Ontology extension for explicit hazard text; related to but not the same as diverReaction."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:identificationCertainty a rdf:Property ;
    rdfs:label "identification certainty"@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range mlo:IdentificationCertainty .

mlo:identificationNote a rdf:Property ;
    rdfs:label "identification note"@en ;
    rdfs:comment "Why the ID is certain or uncertain (field marks seen, look-alikes considered, etc.)."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range rdfs:Literal .

mlo:importedSiteName a rdf:Property ;
    rdfs:label "imported site name"@en ;
    rdfs:comment "GoDive siteName string before/without catalog link."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range rdfs:Literal .

mlo:inCountry a rdf:Property ;
    rdfs:label "in country"@en ;
    rdfs:comment "Structured Country link for the site characteristic graph."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range mlo:Country .

mlo:inPhylum a rdf:Property ;
    rdfs:label "in phylum"@en ;
    rdfs:comment "Convenience link from an organism to its phylum taxon (e.g. Chordata)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range mlo:Taxon ;
    rdfs:subPropertyOf mlo:classifiedAs .

mlo:includesSighting a rdf:Property ;
    rdfs:label "includes sighting"@en ;
    rdfs:comment "Inverse convenience: SiteReport → Sighting (all tags on that activity)."@en ;
    rdfs:domain mlo:SiteReport ;
    rdfs:range mlo:Sighting .

mlo:isNightDive a rdf:Property ;
    rdfs:label "is night dive"@en ;
    rdfs:comment "Alias for isNightActivity."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:boolean ;
    rdfs:subPropertyOf mlo:isNightActivity .

mlo:latitude a rdf:Property ;
    rdfs:label "latitude"@en ;
    rdfs:comment "GoDive DiveSite.latCoords."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range xsd:decimal .

mlo:lifeStage a rdf:Property ;
    rdfs:label "life stage"@en ;
    rdfs:comment "Life stage of the organism in this sighting."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range mlo:LifeStage .

<https://www.godiveios.com/marine-life/lifeStage/Adult> a mlo:LifeStage ;
    rdfs:label "adult"@en .

<https://www.godiveios.com/marine-life/lifeStage/Juvenile> a mlo:LifeStage ;
    rdfs:label "juvenile"@en .

<https://www.godiveios.com/marine-life/lifeStage/Larva> a mlo:LifeStage ;
    rdfs:label "larva"@en .

<https://www.godiveios.com/marine-life/lifeStage/Subadult> a mlo:LifeStage ;
    rdfs:label "subadult"@en .

<https://www.godiveios.com/marine-life/lifeStage/Unknown> a mlo:LifeStage ;
    rdfs:label "unknown"@en ;
    rdfs:comment "Stage not determined from the observation."@en .

mlo:locatedInWater a rdf:Property ;
    rdfs:label "located in water body"@en ;
    rdfs:comment "Optional link to a BodyOfWater resource (beyond GoDive's bodyOfWater string)."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range mlo:BodyOfWater .

mlo:locationName a rdf:Property ;
    rdfs:label "location name"@en ;
    rdfs:comment "GoDive locationName."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range rdfs:Literal .

mlo:loggedBy a rdf:Property ;
    rdfs:label "logged by"@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range mlo:Observer .

mlo:longitude a rdf:Property ;
    rdfs:label "longitude"@en ;
    rdfs:comment "GoDive DiveSite.longCoords."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range xsd:decimal .

mlo:marineLifeOwnership a rdf:Property ;
    rdfs:label "marine life ownership"@en ;
    rdfs:comment "GoDive MarineLife.ownership (catalog / userOwned)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range mlo:MarineLifeOwnership .

<https://www.godiveios.com/marine-life/marineLifeOwnership/Catalog> a mlo:MarineLifeOwnership ;
    rdfs:label "catalog"@en ;
    rdfs:comment "GoDive: catalog (bundled / remote catalog species)."@en .

<https://www.godiveios.com/marine-life/marineLifeOwnership/UserOwned> a mlo:MarineLifeOwnership ;
    rdfs:label "user owned"@en ;
    rdfs:comment "GoDive: userOwned (UserMarineLife)."@en .

mlo:maxDepthM a rdf:Property ;
    rdfs:label "maximum depth (m)"@en ;
    rdfs:comment "GoDive MarineLife.maxDepthMeters when on an organism; also used for site/activity contexts."@en ;
    rdfs:range xsd:decimal .

mlo:maxDiveDepthM a rdf:Property ;
    rdfs:label "maximum dive depth (m)"@en ;
    rdfs:comment "Alias for maxActivityDepthM."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:decimal ;
    rdfs:subPropertyOf mlo:maxActivityDepthM .

mlo:maxHeartRateBPM a rdf:Property ;
    rdfs:label "maximum heart rate (bpm)"@en ;
    rdfs:domain mlo:SnorkelActivity ;
    rdfs:range xsd:integer .

mlo:maxLengthCm a rdf:Property ;
    rdfs:label "maximum length (cm)"@en ;
    rdfs:comment "Legacy cm helper; prefer maxSizeM (GoDive stores meters)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range xsd:decimal .

mlo:maxSizeM a rdf:Property ;
    rdfs:label "maximum size (m)"@en ;
    rdfs:comment "GoDive MarineLife.maxSizeMeters."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range xsd:decimal .

mlo:mediaType a rdf:Property ;
    rdfs:label "media type"@en ;
    rdfs:comment "High-level kind: photo, video, audio, etc."@en ;
    rdfs:domain mlo:MediaAsset ;
    rdfs:range rdfs:Literal .

mlo:mediaUrl a rdf:Property ;
    rdfs:label "media URL"@en ;
    rdfs:domain mlo:MediaAsset ;
    rdfs:range xsd:anyURI .

mlo:mimeType a rdf:Property ;
    rdfs:label "MIME type"@en ;
    rdfs:comment "e.g. image/jpeg, video/mp4."@en ;
    rdfs:domain mlo:MediaAsset ;
    rdfs:range xsd:string .

mlo:minDepthM a rdf:Property ;
    rdfs:label "minimum depth (m)"@en ;
    rdfs:comment "GoDive MarineLife.minDepthMeters when on an organism; also used for site/activity contexts."@en ;
    rdfs:range xsd:decimal .

mlo:minSizeM a rdf:Property ;
    rdfs:label "minimum size (m)"@en ;
    rdfs:comment "GoDive MarineLife.minSizeMeters."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range xsd:decimal .

mlo:observerDepthM a rdf:Property ;
    rdfs:label "observer depth (m)"@en ;
    rdfs:comment "Depth of the observer at the moment of the sighting (often near the surface for snorkel)."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range xsd:decimal .

mlo:oxygenMixPercent a rdf:Property ;
    rdfs:label "oxygen mix (%)"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range xsd:decimal .

<https://www.godiveios.com/marine-life/rank/Class> a mlo:TaxonomicRank ;
    rdfs:label "class"@en .

<https://www.godiveios.com/marine-life/rank/Family> a mlo:TaxonomicRank ;
    rdfs:label "family"@en .

<https://www.godiveios.com/marine-life/rank/Genus> a mlo:TaxonomicRank ;
    rdfs:label "genus"@en .

<https://www.godiveios.com/marine-life/rank/Order> a mlo:TaxonomicRank ;
    rdfs:label "order"@en .

<https://www.godiveios.com/marine-life/rank/Species> a mlo:TaxonomicRank ;
    rdfs:label "species"@en .

mlo:region a rdf:Property ;
    rdfs:label "region"@en ;
    rdfs:comment "GoDive DiveSite.region (state, province, atoll group, etc.)."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range rdfs:Literal .

mlo:reportDate a rdf:Property ;
    rdfs:label "report date"@en ;
    rdfs:domain mlo:SiteReport ;
    rdfs:range xsd:date .

mlo:reportForSite a rdf:Property ;
    rdfs:label "report for site"@en ;
    rdfs:comment "The Site this visit report describes."@en ;
    rdfs:domain mlo:SiteReport ;
    rdfs:range mlo:Site .

mlo:reportedCurrent a rdf:Property ;
    rdfs:label "reported current"@en ;
    rdfs:domain mlo:SiteReport ;
    rdfs:range mlo:CurrentStrength .

mlo:reportedMaxDepthM a rdf:Property ;
    rdfs:label "reported maximum depth (m)"@en ;
    rdfs:comment "Max depth observed on this visit (from activity computer/estimate)."@en ;
    rdfs:domain mlo:SiteReport ;
    rdfs:range xsd:decimal .

mlo:reportedVisibility a rdf:Property ;
    rdfs:label "reported visibility"@en ;
    rdfs:domain mlo:SiteReport ;
    rdfs:range mlo:VisibilityRating .

mlo:reportedWaterTempC a rdf:Property ;
    rdfs:label "reported water temperature (°C)"@en ;
    rdfs:domain mlo:SiteReport ;
    rdfs:range xsd:decimal .

mlo:reportedWaterType a rdf:Property ;
    rdfs:label "reported water type"@en ;
    rdfs:domain mlo:SiteReport ;
    rdfs:range mlo:WaterType .

mlo:scientificName a rdf:Property ;
    rdfs:label "scientific name"@en ;
    rdfs:comment "GoDive MarineLife.scientificName (on organism); also used on Taxon resources."@en ;
    rdfs:range rdfs:Literal .

mlo:sightedOrganism a rdf:Property ;
    rdfs:label "sighted organism"@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range mlo:OrganismConcept .

mlo:sightingDateTime a rdf:Property ;
    rdfs:label "sighting date-time"@en ;
    rdfs:comment "GoDive SightingInstance.sightingDateTime (UTC)."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range xsd:dateTime .

mlo:sightingDepthM a rdf:Property ;
    rdfs:label "sighting depth (m)"@en ;
    rdfs:comment "Estimated or measured depth of the organism when sighted. For snorkel, this is often a guess because the observer is usually at a different depth looking down/through the water column."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range xsd:decimal .

mlo:sightingNote a rdf:Property ;
    rdfs:label "sighting note"@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range rdfs:Literal .

mlo:sightingSite a rdf:Property ;
    rdfs:label "sighting site"@en ;
    rdfs:comment "Direct Site link for the site characteristic graph (denormalized from duringActivity/atSite)."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range mlo:Site .

mlo:siteBodyOfWaterName a rdf:Property ;
    rdfs:label "body of water name"@en ;
    rdfs:comment "Alias for bodyOfWater."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range rdfs:Literal ;
    rdfs:subPropertyOf mlo:bodyOfWater .

mlo:siteEntry a rdf:Property ;
    rdfs:label "site entry"@en ;
    rdfs:comment "Alias for entry."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range rdfs:Literal ;
    rdfs:subPropertyOf mlo:entry .

mlo:siteEnvironment a rdf:Property ;
    rdfs:label "site environment"@en ;
    rdfs:comment "Alias for environment."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range rdfs:Literal ;
    rdfs:subPropertyOf mlo:environment .

mlo:siteMaxDepthM a rdf:Property ;
    rdfs:label "site maximum depth (m)"@en ;
    rdfs:comment "GoDive DiveSite.maxDepthMeters."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range xsd:decimal .

mlo:siteMinDepthM a rdf:Property ;
    rdfs:label "site minimum depth (m)"@en ;
    rdfs:comment "Optional extension (not in GoDive DiveSite)."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range xsd:decimal .

mlo:siteName a rdf:Property ;
    rdfs:label "site name"@en ;
    rdfs:comment "GoDive DiveSite.siteName."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range rdfs:Literal .

mlo:siteOwnership a rdf:Property ;
    rdfs:label "site ownership"@en ;
    rdfs:comment "GoDive DiveSite.ownership (catalogReference / userOwned)."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range mlo:SiteOwnership .

<https://www.godiveios.com/marine-life/siteOwnership/CatalogReference> a mlo:SiteOwnership ;
    rdfs:label "catalog reference"@en ;
    rdfs:comment "GoDive: catalogReference (OpenDiveMap / CDN)."@en .

<https://www.godiveios.com/marine-life/siteOwnership/UserOwned> a mlo:SiteOwnership ;
    rdfs:label "user owned"@en ;
    rdfs:comment "GoDive: userOwned."@en .

mlo:siteRating a rdf:Property ;
    rdfs:label "site rating"@en ;
    rdfs:comment "GoDive DiveSite.siteRating."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range xsd:integer .

mlo:siteTag a rdf:Property ;
    rdfs:label "site tag"@en ;
    rdfs:comment "GoDive DiveSite.siteTags entry (repeatable)."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range rdfs:Literal .

mlo:siteTimeZoneOffsetSeconds a rdf:Property ;
    rdfs:label "site timezone offset (seconds)"@en ;
    rdfs:comment "GoDive DiveSite.timeZoneOffsetSeconds (east of UTC)."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range xsd:integer .

mlo:siteWaterType a rdf:Property ;
    rdfs:label "site water type"@en ;
    rdfs:comment "GoDive DiveSite.waterType (saltwater / freshwater)."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range mlo:WaterType .

mlo:sourceSystem a rdf:Property ;
    rdfs:label "source system"@en ;
    rdfs:comment "Import origin (GoDive DiveSource): Garmin MK3, MacDive, Manual, etc."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range rdfs:Literal .

mlo:subcategory a rdf:Property ;
    rdfs:label "subcategory"@en ;
    rdfs:comment "GoDive MarineLife.subcategory (slug or display label)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:surfaceCondition a rdf:Property ;
    rdfs:label "surface condition"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range rdfs:Literal .

mlo:surfaceIntervalSeconds a rdf:Property ;
    rdfs:label "surface interval (seconds)"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range xsd:integer .

mlo:swimDistanceM a rdf:Property ;
    rdfs:label "swim distance (m)"@en ;
    rdfs:comment "GoDive swimDistanceMeters."@en ;
    rdfs:domain mlo:SnorkelActivity ;
    rdfs:range xsd:decimal .

mlo:takenBy a rdf:Property ;
    rdfs:label "taken by"@en ;
    rdfs:domain mlo:MediaAsset ;
    rdfs:range mlo:Observer .

mlo:tankMaterial a rdf:Property ;
    rdfs:label "tank material"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range rdfs:Literal .

mlo:tankPressureEndPSI a rdf:Property ;
    rdfs:label "tank pressure end (psi)"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range xsd:decimal .

mlo:tankPressureStartPSI a rdf:Property ;
    rdfs:label "tank pressure start (psi)"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range xsd:decimal .

<https://www.godiveios.com/marine-life/taxon/Annelida> a mlo:Taxon ;
    rdfs:label "Annelids"@en ;
    rdfs:comment "Segmented worms, including Christmas-tree worms and other tube worms."@en ;
    mlo:broaderTaxon <https://www.godiveios.com/marine-life/taxon/Animalia> ;
    mlo:hasRank <https://www.godiveios.com/marine-life/rank/Phylum> ;
    mlo:scientificName "Annelida" .

<https://www.godiveios.com/marine-life/taxon/Arthropoda> a mlo:Taxon ;
    rdfs:label "Arthropods"@en ;
    rdfs:comment "Shrimps, lobsters, crabs, mantis shrimp."@en ;
    mlo:broaderTaxon <https://www.godiveios.com/marine-life/taxon/Animalia> ;
    mlo:hasRank <https://www.godiveios.com/marine-life/rank/Phylum> ;
    mlo:scientificName "Arthropoda" .

<https://www.godiveios.com/marine-life/taxon/Chordata> a mlo:Taxon ;
    rdfs:label "Chordates"@en ;
    rdfs:comment "Includes fish, sharks, rays, marine mammals, sea turtles — frequent dive sightings."@en ;
    mlo:aphiaId 1821 ;
    mlo:broaderTaxon <https://www.godiveios.com/marine-life/taxon/Animalia> ;
    mlo:hasRank <https://www.godiveios.com/marine-life/rank/Phylum> ;
    mlo:scientificName "Chordata" .

<https://www.godiveios.com/marine-life/taxon/Cnidaria> a mlo:Taxon ;
    rdfs:label "Cnidarians"@en ;
    rdfs:comment "Jellies, corals, anemones, hydroids."@en ;
    mlo:broaderTaxon <https://www.godiveios.com/marine-life/taxon/Animalia> ;
    mlo:hasRank <https://www.godiveios.com/marine-life/rank/Phylum> ;
    mlo:scientificName "Cnidaria" .

<https://www.godiveios.com/marine-life/taxon/Echinodermata> a mlo:Taxon ;
    rdfs:label "Echinoderms"@en ;
    rdfs:comment "Sea stars, urchins, cucumbers, feather stars."@en ;
    mlo:broaderTaxon <https://www.godiveios.com/marine-life/taxon/Animalia> ;
    mlo:hasRank <https://www.godiveios.com/marine-life/rank/Phylum> ;
    mlo:scientificName "Echinodermata" .

<https://www.godiveios.com/marine-life/taxon/Mollusca> a mlo:Taxon ;
    rdfs:label "Molluscs"@en ;
    rdfs:comment "Nudibranchs, octopuses, squids, clams, snails."@en ;
    mlo:broaderTaxon <https://www.godiveios.com/marine-life/taxon/Animalia> ;
    mlo:hasRank <https://www.godiveios.com/marine-life/rank/Phylum> ;
    mlo:scientificName "Mollusca" .

<https://www.godiveios.com/marine-life/taxon/Porifera> a mlo:Taxon ;
    rdfs:label "Sponges"@en ;
    mlo:broaderTaxon <https://www.godiveios.com/marine-life/taxon/Animalia> ;
    mlo:hasRank <https://www.godiveios.com/marine-life/rank/Phylum> ;
    mlo:scientificName "Porifera" .

mlo:timeOfDay a rdf:Property ;
    rdfs:label "time of day"@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range mlo:TimeOfDay .

<https://www.godiveios.com/marine-life/timeOfDay/Dawn> a mlo:TimeOfDay ;
    rdfs:label "dawn"@en .

<https://www.godiveios.com/marine-life/timeOfDay/Day> a mlo:TimeOfDay ;
    rdfs:label "day"@en .

<https://www.godiveios.com/marine-life/timeOfDay/Dusk> a mlo:TimeOfDay ;
    rdfs:label "dusk"@en .

<https://www.godiveios.com/marine-life/timeOfDay/Night> a mlo:TimeOfDay ;
    rdfs:label "night"@en .

mlo:timeZoneIdentifier a rdf:Property ;
    rdfs:label "timezone identifier"@en ;
    rdfs:comment "IANA timezone (GoDive DiveSite.timeZoneIdentifier)."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range xsd:string .

mlo:timeZoneOffsetSeconds a rdf:Property ;
    rdfs:label "timezone offset (seconds)"@en ;
    rdfs:comment "Seconds east of UTC (GoDive timeZoneOffsetSeconds)."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:integer .

mlo:totalCalories a rdf:Property ;
    rdfs:label "total calories"@en ;
    rdfs:domain mlo:SnorkelActivity ;
    rdfs:range xsd:integer .

mlo:traitLabel a rdf:Property ;
    rdfs:label "trait label"@en ;
    rdfs:comment "Short description, e.g. \"vertical tiger stripes\", \"black tip on dorsal fin\"."@en ;
    rdfs:domain mlo:PhysicalTrait ;
    rdfs:range rdfs:Literal .

mlo:typicalDepthM a rdf:Property ;
    rdfs:label "typical depth (m)"@en ;
    rdfs:comment "Alias for avgDepthM."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range xsd:decimal ;
    rdfs:subPropertyOf mlo:avgDepthM .

mlo:typicalLengthCm a rdf:Property ;
    rdfs:label "typical length (cm)"@en ;
    rdfs:comment "Legacy cm helper; GoDive has min/max size in meters only."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range xsd:decimal .

<https://www.godiveios.com/marine-life/visibility/Good> a mlo:VisibilityRating ;
    rdfs:label "good"@en .

<https://www.godiveios.com/marine-life/visibility/Great> a mlo:VisibilityRating ;
    rdfs:label "great"@en .

<https://www.godiveios.com/marine-life/visibility/Poor> a mlo:VisibilityRating ;
    rdfs:label "poor"@en .

mlo:visibilityRating a rdf:Property ;
    rdfs:label "visibility rating"@en ;
    rdfs:comment "Qualitative visibility (GoDive diveVisibility). Prefer alongside waterVisibilityM when both known."@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range mlo:VisibilityRating .

mlo:waterName a rdf:Property ;
    rdfs:label "water body name"@en ;
    rdfs:domain mlo:BodyOfWater ;
    rdfs:range rdfs:Literal .

mlo:waterTempC a rdf:Property ;
    rdfs:label "water temperature (°C)"@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:decimal .

mlo:waterTempMaxC a rdf:Property ;
    rdfs:label "maximum water temperature (°C)"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range xsd:decimal .

mlo:waterTempMinC a rdf:Property ;
    rdfs:label "minimum water temperature (°C)"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range xsd:decimal .

mlo:waterType a rdf:Property ;
    rdfs:label "water type"@en ;
    rdfs:domain mlo:DiveActivity ;
    rdfs:range mlo:WaterType .

<https://www.godiveios.com/marine-life/waterType/Freshwater> a mlo:WaterType ;
    rdfs:label "fresh water"@en .

<https://www.godiveios.com/marine-life/waterType/Saltwater> a mlo:WaterType ;
    rdfs:label "salt water"@en .

mlo:waterVisibilityM a rdf:Property ;
    rdfs:label "water visibility (m)"@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:decimal .

mlo:activityDate a rdf:Property ;
    rdfs:label "activity date"@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:date .

mlo:activityDurationMin a rdf:Property ;
    rdfs:label "activity duration (minutes)"@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:integer .

mlo:activityStartTime a rdf:Property ;
    rdfs:label "activity start time"@en ;
    rdfs:comment "Local start time (optional; use with activityDate)."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:time .

mlo:atSite a rdf:Property ;
    rdfs:label "at site"@en ;
    rdfs:comment "GoDive diveSiteID resolved to a Site."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range mlo:Site .

mlo:avgDepthM a rdf:Property ;
    rdfs:label "average depth (m)"@en ;
    rdfs:comment "GoDive MarineLife.avgDepthMeters."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range xsd:decimal .

mlo:bodyOfWater a rdf:Property ;
    rdfs:label "body of water"@en ;
    rdfs:comment "GoDive DiveSite.bodyOfWater string (sea, strait, reef, bay). Use locatedInWater for a BodyOfWater resource."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range rdfs:Literal .

mlo:classifiedAs a rdf:Property ;
    rdfs:label "classified as"@en ;
    rdfs:comment "Optional structured taxon link (beyond GoDive's flat category/familyName strings)."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range mlo:Taxon .

mlo:distinctiveFeatures a rdf:Property ;
    rdfs:label "distinctive features"@en ;
    rdfs:comment "GoDive MarineLife.distinctiveFeatures."@en ;
    rdfs:domain mlo:OrganismConcept ;
    rdfs:range rdfs:Literal .

mlo:duringDiveActivity a rdf:Property ;
    rdfs:label "during dive activity"@en ;
    rdfs:comment "Sighting logged on a DiveActivity (GoDive SightingInstance.diveActivity)."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range mlo:DiveActivity ;
    rdfs:subPropertyOf mlo:duringActivity .

mlo:entry a rdf:Property ;
    rdfs:label "entry"@en ;
    rdfs:comment "GoDive DiveSite.entry (shore, boat, etc.)."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range rdfs:Literal .

mlo:environment a rdf:Property ;
    rdfs:label "environment"@en ;
    rdfs:comment "GoDive DiveSite.environment (ocean, lake, etc.)."@en ;
    rdfs:domain mlo:Site ;
    rdfs:range rdfs:Literal .

mlo:isNightActivity a rdf:Property ;
    rdfs:label "is night activity"@en ;
    rdfs:comment "True when the activity is conducted primarily in darkness."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:boolean .

mlo:maxActivityDepthM a rdf:Property ;
    rdfs:label "maximum activity depth (m)"@en ;
    rdfs:comment "Deepest depth reached by the observer during the activity (computer/gauge or estimate)."@en ;
    rdfs:domain mlo:InWaterActivity ;
    rdfs:range xsd:decimal .

mlo:observerName a rdf:Property ;
    rdfs:label "observer name"@en ;
    rdfs:domain mlo:Observer ;
    rdfs:range rdfs:Literal .

<https://www.godiveios.com/marine-life/rank/Kingdom> a mlo:TaxonomicRank ;
    rdfs:label "kingdom"@en .

mlo:duringActivity a rdf:Property ;
    rdfs:label "during activity"@en ;
    rdfs:comment "Parent link from a sighting to its scuba or snorkel activity (GoDive: diveActivity / snorkelActivity)."@en ;
    rdfs:domain mlo:Sighting ;
    rdfs:range mlo:InWaterActivity .

mlo:godiveUUID a rdf:Property ;
    rdfs:label "GoDive UUID"@en ;
    rdfs:comment "Stable UUID string from GoDiveMVP SwiftData (activity id, sightingUUID, site id, marineLifeUUID, etc.)."@en ;
    rdfs:range xsd:string .

<https://www.godiveios.com/marine-life/rank/Phylum> a mlo:TaxonomicRank ;
    rdfs:label "phylum"@en .

<https://www.godiveios.com/marine-life/taxon/Animalia> a mlo:Taxon ;
    rdfs:label "Animals"@en ;
    mlo:hasRank <https://www.godiveios.com/marine-life/rank/Kingdom> ;
    mlo:scientificName "Animalia" .

