# TerraFabric Ontology — generated by terrafabric-server
# version 1.0.0

@prefix tf: <https://terrafabric.world/ont#> .
@prefix tfr: <https://terrafabric.world/id/> .
@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 xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix dct: <http://purl.org/dc/terms/> .
@prefix dcat: <http://www.w3.org/ns/dcat#> .
@prefix prov: <http://www.w3.org/ns/prov#> .
@prefix sosa: <http://www.w3.org/ns/sosa/> .
@prefix ssn: <http://www.w3.org/ns/ssn/> .
@prefix geo: <http://www.opengis.net/ont/geosparql#> .
@prefix schema: <https://schema.org/> .
@prefix odrl: <http://www.w3.org/ns/odrl/2/> .

<https://terrafabric.world/ont> a owl:Ontology ;
    dct:title "TerraFabric Ontology" ;
    dct:description "Agentic-first ontology for discovering, evaluating, licensing, purchasing and tasking Earth observation data, and for integrating EO into command-and-control systems." ;
    owl:versionInfo "1.0.0" ;
    dct:license <https://creativecommons.org/licenses/by/4.0/> .

tf:module a owl:AnnotationProperty ;
    rdfs:label "ontology module" .

tf:Provider a owl:Class ;
    rdfs:label "Data provider" ;
    rdfs:comment "An organisation that operates sensors or publishes Earth observation data." ;
    tf:module "actors" ;
    rdfs:subClassOf prov:Organization ;
    rdfs:subClassOf schema:Organization .

tf:SpaceAgency a owl:Class ;
    rdfs:label "Space agency" ;
    rdfs:comment "A governmental or intergovernmental provider, typically with open data policies." ;
    tf:module "actors" ;
    rdfs:subClassOf tf:Provider ;
    rdfs:subClassOf schema:GovernmentOrganization .

tf:CommercialProvider a owl:Class ;
    rdfs:label "Commercial provider" ;
    rdfs:comment "A company selling Earth observation data or tasking under licence." ;
    tf:module "actors" ;
    rdfs:subClassOf tf:Provider ;
    rdfs:subClassOf schema:Corporation .

tf:AcademicProvider a owl:Class ;
    rdfs:label "Academic / NGO provider" ;
    rdfs:comment "A research institution or non-profit publishing derived EO products." ;
    tf:module "actors" ;
    rdfs:subClassOf tf:Provider .

tf:Agent a owl:Class ;
    rdfs:label "Autonomous agent" ;
    rdfs:comment "An AI or software agent acting on behalf of a principal to discover, evaluate and acquire data." ;
    tf:module "actors" ;
    rdfs:subClassOf prov:SoftwareAgent ;
    rdfs:subClassOf schema:SoftwareApplication .

tf:C2System a owl:Class ;
    rdfs:label "Command-and-control system" ;
    rdfs:comment "A C2 system (e.g. OVERMATCH) consuming TerraFabric as a machine-to-machine ISR data backend." ;
    tf:module "actors" ;
    rdfs:subClassOf tf:Agent .

tf:Principal a owl:Class ;
    rdfs:label "Principal" ;
    rdfs:comment "The human or organisation on whose behalf an agent acts and who approves spend." ;
    tf:module "actors" ;
    rdfs:subClassOf prov:Person ;
    rdfs:subClassOf prov:Organization .

tf:Platform a owl:Class ;
    rdfs:label "Platform" ;
    rdfs:comment "A satellite, constellation, space station or aircraft hosting instruments." ;
    tf:module "observation" ;
    rdfs:subClassOf sosa:Platform .

tf:Satellite a owl:Class ;
    rdfs:label "Satellite" ;
    rdfs:comment "A single spacecraft." ;
    tf:module "observation" ;
    rdfs:subClassOf tf:Platform .

tf:Constellation a owl:Class ;
    rdfs:label "Constellation" ;
    rdfs:comment "A coordinated group of spacecraft operated as one system." ;
    tf:module "observation" ;
    rdfs:subClassOf tf:Platform .

tf:AirbornePlatform a owl:Class ;
    rdfs:label "Airborne platform" ;
    rdfs:comment "Crewed or uncrewed aircraft carrying EO sensors." ;
    tf:module "observation" ;
    rdfs:subClassOf tf:Platform .

tf:Instrument a owl:Class ;
    rdfs:label "Instrument" ;
    rdfs:comment "A sensor that produces observations (imager, radar, LiDAR, spectrometer, receiver)." ;
    tf:module "observation" ;
    rdfs:subClassOf sosa:Sensor .

tf:Modality a owl:Class ;
    rdfs:label "Sensing modality" ;
    rdfs:comment "The physical sensing principle or data type (optical, SAR, LiDAR, RF, ...)." ;
    tf:module "observation" ;
    rdfs:subClassOf skos:Concept .

tf:SpectralBand a owl:Class ;
    rdfs:label "Spectral band" ;
    rdfs:comment "A wavelength or frequency interval sampled by an instrument." ;
    tf:module "observation" ;
    rdfs:subClassOf sosa:ObservableProperty .

tf:ProcessingLevel a owl:Class ;
    rdfs:label "Processing level" ;
    rdfs:comment "CEOS/NASA-style processing level from L0 (raw) to L4 (model/analysis output)." ;
    tf:module "observation" ;
    rdfs:subClassOf skos:Concept .

tf:DataTier a owl:Class ;
    rdfs:label "Data tier" ;
    rdfs:comment "Coarse position in the value chain: raw sensor data, pre-processed data or data product." ;
    tf:module "observation" ;
    rdfs:subClassOf skos:Concept .

tf:Collection a owl:Class ;
    rdfs:label "Collection" ;
    rdfs:comment "A STAC-compatible collection of homogeneous EO items from one source and processing chain." ;
    tf:module "data" ;
    rdfs:subClassOf dcat:Dataset ;
    rdfs:subClassOf sosa:ObservationCollection .

tf:RawDataCollection a owl:Class ;
    rdfs:label "Raw data collection" ;
    rdfs:comment "Minimally processed sensor data (L0–L1B, SLC, photon, point cloud, phase history)." ;
    tf:module "data" ;
    rdfs:subClassOf tf:Collection .

tf:PreprocessedCollection a owl:Class ;
    rdfs:label "Pre-processed collection" ;
    rdfs:comment "Calibrated, orthorectified or atmospherically corrected analysis-ready data (L1C–L2)." ;
    tf:module "data" ;
    rdfs:subClassOf tf:Collection .

tf:DataProductCollection a owl:Class ;
    rdfs:label "Data product collection" ;
    rdfs:comment "Derived information products: mosaics, maps, detections, reanalyses (L3–L4)." ;
    tf:module "data" ;
    rdfs:subClassOf tf:Collection .

tf:Item a owl:Class ;
    rdfs:label "Item / scene" ;
    rdfs:comment "A single spatio-temporal acquisition (scene, granule, tile, track)." ;
    tf:module "data" ;
    rdfs:subClassOf dcat:Dataset ;
    rdfs:subClassOf sosa:Observation .

tf:Asset a owl:Class ;
    rdfs:label "Asset" ;
    rdfs:comment "A downloadable file or service endpoint belonging to an item." ;
    tf:module "data" ;
    rdfs:subClassOf dcat:Distribution .

tf:AccessMethod a owl:Class ;
    rdfs:label "Access method" ;
    rdfs:comment "An endpoint through which data can be discovered or retrieved (STAC API, S3, WMTS, broker)." ;
    tf:module "data" ;
    rdfs:subClassOf dcat:DataService .

tf:DataFormat a owl:Class ;
    rdfs:label "Data format" ;
    rdfs:comment "File or encoding format (COG, SAFE, NITF, SICD, HDF5, ...)." ;
    tf:module "data" ;
    rdfs:subClassOf dct:MediaTypeOrExtent .

tf:AreaOfInterest a owl:Class ;
    rdfs:label "Area of interest" ;
    rdfs:comment "A geographic area supplied by a user or agent for search, quote or tasking." ;
    tf:module "data" ;
    rdfs:subClassOf geo:Feature .

tf:SpatialExtent a owl:Class ;
    rdfs:label "Spatial extent" ;
    rdfs:comment "Bounding geometry of a collection or item." ;
    tf:module "data" ;
    rdfs:subClassOf dct:Location ;
    rdfs:subClassOf geo:Geometry .

tf:TemporalExtent a owl:Class ;
    rdfs:label "Temporal extent" ;
    rdfs:comment "Interval over which a collection has data." ;
    tf:module "data" ;
    rdfs:subClassOf dct:PeriodOfTime .

tf:License a owl:Class ;
    rdfs:label "Licence" ;
    rdfs:comment "Terms governing use of data." ;
    tf:module "commerce" ;
    rdfs:subClassOf odrl:Policy ;
    rdfs:subClassOf dct:LicenseDocument .

tf:OpenLicense a owl:Class ;
    rdfs:label "Open licence" ;
    rdfs:comment "A licence permitting free use, possibly with attribution." ;
    tf:module "commerce" ;
    rdfs:subClassOf tf:License .

tf:CommercialLicense a owl:Class ;
    rdfs:label "Commercial licence" ;
    rdfs:comment "A paid end-user licence whose scope is set by a licence tier." ;
    tf:module "commerce" ;
    rdfs:subClassOf tf:License .

tf:LicenseTier a owl:Class ;
    rdfs:label "Licence tier" ;
    rdfs:comment "Scope of permitted sharing for commercial data (single-org → public release)." ;
    tf:module "commerce" ;
    rdfs:subClassOf skos:Concept .

tf:Offer a owl:Class ;
    rdfs:label "Offer" ;
    rdfs:comment "Standing commercial terms for a collection: pricing model, rates, minimums." ;
    tf:module "commerce" ;
    rdfs:subClassOf schema:Offer ;
    rdfs:subClassOf odrl:Offer .

tf:PricingModel a owl:Class ;
    rdfs:label "Pricing model" ;
    rdfs:comment "How price is computed: per km², per scene or subscription." ;
    tf:module "commerce" ;
    rdfs:subClassOf skos:Concept .

tf:Priority a owl:Class ;
    rdfs:label "Tasking priority" ;
    rdfs:comment "Urgency class for tasking with its collection window and price multiplier." ;
    tf:module "commerce" ;
    rdfs:subClassOf skos:Concept .

tf:Quote a owl:Class ;
    rdfs:label "Quote" ;
    rdfs:comment "A binding, time-limited price for a specific collection, AOI, time range, licence tier and priority." ;
    tf:module "commerce" ;
    rdfs:subClassOf schema:Offer .

tf:Order a owl:Class ;
    rdfs:label "Order" ;
    rdfs:comment "An agreement to acquire data, created from a quote." ;
    tf:module "commerce" ;
    rdfs:subClassOf schema:Order ;
    rdfs:subClassOf prov:Activity .

tf:Delivery a owl:Class ;
    rdfs:label "Delivery" ;
    rdfs:comment "Fulfilment of an order: signed URLs, cloud bucket, or streaming endpoint." ;
    tf:module "commerce" ;
    rdfs:subClassOf dcat:Distribution .

tf:SpendingMandate a owl:Class ;
    rdfs:label "Spending mandate" ;
    rdfs:comment "A principal-issued budget policy that bounds what an agent may buy without human approval." ;
    tf:module "commerce" ;
    rdfs:subClassOf odrl:Policy .

tf:AgentAction a owl:Class ;
    rdfs:label "Agent action" ;
    rdfs:comment "An operation an agent can perform against TerraFabric." ;
    tf:module "agentic" ;
    rdfs:subClassOf schema:Action ;
    rdfs:subClassOf prov:Activity .

tf:SearchAction a owl:Class ;
    rdfs:label "Search action" ;
    rdfs:comment "Discover collections or items matching constraints." ;
    tf:module "agentic" ;
    rdfs:subClassOf tf:AgentAction ;
    rdfs:subClassOf schema:SearchAction .

tf:QuoteAction a owl:Class ;
    rdfs:label "Quote action" ;
    rdfs:comment "Request a price for acquiring data." ;
    tf:module "agentic" ;
    rdfs:subClassOf tf:AgentAction .

tf:OrderAction a owl:Class ;
    rdfs:label "Order action" ;
    rdfs:comment "Place an order from a quote." ;
    tf:module "agentic" ;
    rdfs:subClassOf tf:AgentAction ;
    rdfs:subClassOf schema:BuyAction .

tf:ApprovalAction a owl:Class ;
    rdfs:label "Approval action" ;
    rdfs:comment "A principal approving an order that exceeded an agent's mandate." ;
    tf:module "agentic" ;
    rdfs:subClassOf tf:AgentAction ;
    rdfs:subClassOf schema:AuthorizeAction .

tf:TaskAction a owl:Class ;
    rdfs:label "Tasking action" ;
    rdfs:comment "Request a new collection by a taskable sensor." ;
    tf:module "agentic" ;
    rdfs:subClassOf tf:AgentAction .

tf:Tool a owl:Class ;
    rdfs:label "Agent tool" ;
    rdfs:comment "A machine-callable function exposed via MCP and the REST tool manifest." ;
    tf:module "agentic" ;
    rdfs:subClassOf schema:EntryPoint .

tf:CollectionRequirement a owl:Class ;
    rdfs:label "Collection requirement" ;
    rdfs:comment "An information need expressed as AOI, time window and sensing constraints." ;
    tf:module "c2" ;
    rdfs:subClassOf prov:Plan .

tf:TaskingRequest a owl:Class ;
    rdfs:label "Tasking request" ;
    rdfs:comment "A request to task one or more sensors to satisfy a collection requirement." ;
    tf:module "c2" ;
    rdfs:subClassOf prov:Activity .

tf:CoverageAssessment a owl:Class ;
    rdfs:label "Coverage assessment" ;
    rdfs:comment "Ranked evaluation of which sources can satisfy a requirement, with latency, revisit and cost." ;
    tf:module "c2" ;
    rdfs:subClassOf prov:Entity .

tf:AvailabilityEvent a owl:Class ;
    rdfs:label "Availability event" ;
    rdfs:comment "Notification that new data matching a subscription has become available." ;
    tf:module "c2" ;
    rdfs:subClassOf prov:Activity ;
    rdfs:subClassOf schema:Event .

tf:ReleasabilityMarking a owl:Class ;
    rdfs:label "Releasability marking" ;
    rdfs:comment "Dissemination / handling marking attached to data and requests." ;
    tf:module "c2" ;
    rdfs:subClassOf skos:Concept .

tf:providedBy a owl:ObjectProperty ;
    rdfs:label "provided by" ;
    rdfs:comment "The provider publishing the collection." ;
    rdfs:domain tf:Collection ;
    rdfs:range tf:Provider ;
    rdfs:subPropertyOf dct:publisher .

tf:operatedBy a owl:ObjectProperty ;
    rdfs:label "operated by" ;
    rdfs:comment "Operator of the platform." ;
    rdfs:domain tf:Platform ;
    rdfs:range tf:Provider ;
    rdfs:subPropertyOf prov:wasAttributedTo .

tf:hasPlatform a owl:ObjectProperty ;
    rdfs:label "has platform" ;
    rdfs:comment "Platform(s) whose observations feed the collection." ;
    rdfs:domain tf:Collection ;
    rdfs:range tf:Platform ;
    rdfs:subPropertyOf prov:wasGeneratedBy .

tf:hasInstrument a owl:ObjectProperty ;
    rdfs:label "has instrument" ;
    rdfs:comment "Instrument(s) whose observations feed the collection." ;
    rdfs:domain tf:Collection ;
    rdfs:range tf:Instrument .

tf:hosts a owl:ObjectProperty ;
    rdfs:label "hosts" ;
    rdfs:comment "Instrument carried by a platform." ;
    rdfs:domain tf:Platform ;
    rdfs:range tf:Instrument ;
    rdfs:subPropertyOf sosa:hosts .

tf:hasModality a owl:ObjectProperty ;
    rdfs:label "has modality" ;
    rdfs:comment "Sensing modality." ;
    rdfs:domain tf:Collection ;
    rdfs:domain tf:Instrument ;
    rdfs:range tf:Modality ;
    rdfs:subPropertyOf dcat:theme .

tf:processingLevel a owl:ObjectProperty ;
    rdfs:label "processing level" ;
    rdfs:comment "Processing level of the data." ;
    rdfs:domain tf:Collection ;
    rdfs:domain tf:Item ;
    rdfs:range tf:ProcessingLevel .

tf:dataTier a owl:ObjectProperty ;
    rdfs:label "data tier" ;
    rdfs:comment "Value-chain tier (raw, pre-processed, product)." ;
    rdfs:domain tf:Collection ;
    rdfs:range tf:DataTier .

tf:derivedFrom a owl:ObjectProperty ;
    rdfs:label "derived from" ;
    rdfs:comment "Upstream collection this one is produced from." ;
    rdfs:domain tf:Collection ;
    rdfs:range tf:Collection ;
    rdfs:subPropertyOf prov:wasDerivedFrom .

tf:hasItem a owl:ObjectProperty ;
    rdfs:label "has item" ;
    rdfs:comment "Items (scenes) within a collection." ;
    rdfs:domain tf:Collection ;
    rdfs:range tf:Item ;
    rdfs:subPropertyOf dct:hasPart ;
    owl:inverseOf tf:inCollection .

tf:inCollection a owl:ObjectProperty ;
    rdfs:label "in collection" ;
    rdfs:comment "Collection the item belongs to." ;
    rdfs:domain tf:Item ;
    rdfs:range tf:Collection ;
    rdfs:subPropertyOf dct:isPartOf ;
    owl:inverseOf tf:hasItem .

tf:hasAsset a owl:ObjectProperty ;
    rdfs:label "has asset" ;
    rdfs:comment "Files or endpoints for an item." ;
    rdfs:domain tf:Item ;
    rdfs:range tf:Asset ;
    rdfs:subPropertyOf dcat:distribution .

tf:accessibleVia a owl:ObjectProperty ;
    rdfs:label "accessible via" ;
    rdfs:comment "Endpoint for discovery or retrieval." ;
    rdfs:domain tf:Collection ;
    rdfs:range tf:AccessMethod ;
    rdfs:subPropertyOf dcat:accessService .

tf:license a owl:ObjectProperty ;
    rdfs:label "licence" ;
    rdfs:comment "Governing licence." ;
    rdfs:domain tf:Collection ;
    rdfs:domain tf:Order ;
    rdfs:range tf:License ;
    rdfs:subPropertyOf dct:license .

tf:hasOffer a owl:ObjectProperty ;
    rdfs:label "has offer" ;
    rdfs:comment "Standing commercial offer." ;
    rdfs:domain tf:Collection ;
    rdfs:range tf:Offer ;
    rdfs:subPropertyOf schema:offers .

tf:pricingModel a owl:ObjectProperty ;
    rdfs:label "pricing model" ;
    rdfs:comment "How price is computed." ;
    rdfs:domain tf:Offer ;
    rdfs:domain tf:Quote ;
    rdfs:range tf:PricingModel .

tf:format a owl:ObjectProperty ;
    rdfs:label "format" ;
    rdfs:comment "Encoding format." ;
    rdfs:domain tf:Collection ;
    rdfs:domain tf:Asset ;
    rdfs:range tf:DataFormat ;
    rdfs:subPropertyOf dct:format .

tf:spatialExtent a owl:ObjectProperty ;
    rdfs:label "spatial extent" ;
    rdfs:comment "Geographic coverage." ;
    rdfs:domain tf:Collection ;
    rdfs:domain tf:Item ;
    rdfs:range tf:SpatialExtent ;
    rdfs:subPropertyOf dct:spatial .

tf:temporalExtent a owl:ObjectProperty ;
    rdfs:label "temporal extent" ;
    rdfs:comment "Temporal coverage." ;
    rdfs:domain tf:Collection ;
    rdfs:range tf:TemporalExtent ;
    rdfs:subPropertyOf dct:temporal .

tf:aoi a owl:ObjectProperty ;
    rdfs:label "area of interest" ;
    rdfs:comment "Target area." ;
    rdfs:domain tf:Quote ;
    rdfs:domain tf:CollectionRequirement ;
    rdfs:domain tf:TaskingRequest ;
    rdfs:range tf:AreaOfInterest ;
    rdfs:subPropertyOf geo:hasGeometry .

tf:quotesCollection a owl:ObjectProperty ;
    rdfs:label "quotes collection" ;
    rdfs:comment "Collection being priced or tasked." ;
    rdfs:domain tf:Quote ;
    rdfs:domain tf:TaskingRequest ;
    rdfs:range tf:Collection ;
    rdfs:subPropertyOf schema:itemOffered .

tf:licenseTier a owl:ObjectProperty ;
    rdfs:label "licence tier" ;
    rdfs:comment "Scope of the licence purchased." ;
    rdfs:domain tf:Quote ;
    rdfs:domain tf:Order ;
    rdfs:range tf:LicenseTier .

tf:priority a owl:ObjectProperty ;
    rdfs:label "priority" ;
    rdfs:comment "Tasking urgency." ;
    rdfs:domain tf:Quote ;
    rdfs:domain tf:TaskingRequest ;
    rdfs:range tf:Priority .

tf:fulfils a owl:ObjectProperty ;
    rdfs:label "fulfils" ;
    rdfs:comment "Quote accepted by this order." ;
    rdfs:domain tf:Order ;
    rdfs:range tf:Quote ;
    rdfs:subPropertyOf schema:acceptedOffer .

tf:placedBy a owl:ObjectProperty ;
    rdfs:label "placed by" ;
    rdfs:comment "Agent that placed the order." ;
    rdfs:domain tf:Order ;
    rdfs:domain tf:TaskingRequest ;
    rdfs:range tf:Agent ;
    rdfs:subPropertyOf schema:customer ;
    rdfs:subPropertyOf prov:wasAssociatedWith .

tf:onBehalfOf a owl:ObjectProperty ;
    rdfs:label "on behalf of" ;
    rdfs:comment "Principal for whom the agent acts." ;
    rdfs:domain tf:Agent ;
    rdfs:range tf:Principal ;
    rdfs:subPropertyOf prov:actedOnBehalfOf .

tf:governedBy a owl:ObjectProperty ;
    rdfs:label "governed by" ;
    rdfs:comment "Mandate bounding the agent's spend." ;
    rdfs:domain tf:Order ;
    rdfs:domain tf:Agent ;
    rdfs:range tf:SpendingMandate .

tf:hasDelivery a owl:ObjectProperty ;
    rdfs:label "has delivery" ;
    rdfs:comment "Fulfilment of the order." ;
    rdfs:domain tf:Order ;
    rdfs:range tf:Delivery ;
    rdfs:subPropertyOf schema:orderDelivery .

tf:approvedBy a owl:ObjectProperty ;
    rdfs:label "approved by" ;
    rdfs:comment "Principal who approved an over-mandate order." ;
    rdfs:domain tf:Order ;
    rdfs:range tf:Principal ;
    rdfs:subPropertyOf prov:wasAssociatedWith .

tf:satisfiedBy a owl:ObjectProperty ;
    rdfs:label "satisfied by" ;
    rdfs:comment "Collection able to satisfy a requirement." ;
    rdfs:domain tf:CollectionRequirement ;
    rdfs:domain tf:CoverageAssessment ;
    rdfs:range tf:Collection .

tf:addresses a owl:ObjectProperty ;
    rdfs:label "addresses" ;
    rdfs:comment "Requirement addressed by a tasking request." ;
    rdfs:domain tf:TaskingRequest ;
    rdfs:range tf:CollectionRequirement ;
    rdfs:subPropertyOf prov:used .

tf:releasability a owl:ObjectProperty ;
    rdfs:label "releasability" ;
    rdfs:comment "Handling / dissemination marking." ;
    rdfs:domain tf:Collection ;
    rdfs:domain tf:TaskingRequest ;
    rdfs:domain tf:Order ;
    rdfs:range tf:ReleasabilityMarking .

tf:invokesTool a owl:ObjectProperty ;
    rdfs:label "invokes tool" ;
    rdfs:comment "Machine entry point used to perform the action." ;
    rdfs:domain tf:AgentAction ;
    rdfs:range tf:Tool ;
    rdfs:subPropertyOf schema:target .

tf:actsOn a owl:ObjectProperty ;
    rdfs:label "acts on" ;
    rdfs:comment "Entity the action operates on." ;
    rdfs:domain tf:AgentAction ;
    rdfs:range owl:Thing ;
    rdfs:subPropertyOf schema:object .

tf:about a owl:ObjectProperty ;
    rdfs:label "about" ;
    rdfs:comment "Item announced by the event." ;
    rdfs:domain tf:AvailabilityEvent ;
    rdfs:range tf:Item ;
    rdfs:subPropertyOf schema:about .

tf:gsdMeters a owl:DatatypeProperty ;
    rdfs:label "ground sample distance (m)" ;
    rdfs:comment "Best native ground sample distance in metres." ;
    rdfs:domain tf:Collection ;
    rdfs:domain tf:Item ;
    rdfs:range xsd:decimal .

tf:revisitHours a owl:DatatypeProperty ;
    rdfs:label "revisit (h)" ;
    rdfs:comment "Typical revisit interval over a given point, hours." ;
    rdfs:domain tf:Collection ;
    rdfs:range xsd:decimal .

tf:latencyHours a owl:DatatypeProperty ;
    rdfs:label "latency (h)" ;
    rdfs:comment "Typical time from acquisition to availability, hours." ;
    rdfs:domain tf:Collection ;
    rdfs:range xsd:decimal .

tf:bandCount a owl:DatatypeProperty ;
    rdfs:label "band count" ;
    rdfs:comment "Number of spectral bands." ;
    rdfs:domain tf:Collection ;
    rdfs:domain tf:Instrument ;
    rdfs:range xsd:integer .

tf:spectralRange a owl:DatatypeProperty ;
    rdfs:label "spectral range" ;
    rdfs:comment "Covered wavelength range." ;
    rdfs:domain tf:Collection ;
    rdfs:domain tf:Instrument ;
    rdfs:range xsd:string .

tf:sarBand a owl:DatatypeProperty ;
    rdfs:label "SAR frequency band" ;
    rdfs:comment "Radar frequency band (C, X, L, S)." ;
    rdfs:domain tf:Collection ;
    rdfs:range xsd:string .

tf:polarization a owl:DatatypeProperty ;
    rdfs:label "polarisation" ;
    rdfs:comment "Radar polarisation channel." ;
    rdfs:domain tf:Collection ;
    rdfs:range xsd:string .

tf:allWeather a owl:DatatypeProperty ;
    rdfs:label "all-weather" ;
    rdfs:comment "Whether data can be acquired through cloud." ;
    rdfs:domain tf:Collection ;
    rdfs:range xsd:boolean .

tf:nightCapable a owl:DatatypeProperty ;
    rdfs:label "night capable" ;
    rdfs:comment "Whether data can be acquired at night." ;
    rdfs:domain tf:Collection ;
    rdfs:range xsd:boolean .

tf:taskable a owl:DatatypeProperty ;
    rdfs:label "taskable" ;
    rdfs:comment "Whether new acquisitions can be requested." ;
    rdfs:domain tf:Collection ;
    rdfs:range xsd:boolean .

tf:accessClass a owl:DatatypeProperty ;
    rdfs:label "access class" ;
    rdfs:comment "free or commercial." ;
    rdfs:domain tf:Collection ;
    rdfs:range xsd:string .

tf:bbox a owl:DatatypeProperty ;
    rdfs:label "bounding box" ;
    rdfs:comment "West, south, east, north in WGS84 degrees." ;
    rdfs:domain tf:SpatialExtent ;
    rdfs:range xsd:string .

tf:asWKT a owl:DatatypeProperty ;
    rdfs:label "WKT geometry" ;
    rdfs:comment "Geometry as WKT." ;
    rdfs:domain tf:SpatialExtent ;
    rdfs:domain tf:AreaOfInterest ;
    rdfs:range geo:wktLiteral ;
    rdfs:subPropertyOf geo:asWKT .

tf:startDate a owl:DatatypeProperty ;
    rdfs:label "start date" ;
    rdfs:comment "Start of temporal coverage." ;
    rdfs:domain tf:TemporalExtent ;
    rdfs:range xsd:date ;
    rdfs:subPropertyOf dcat:startDate .

tf:endDate a owl:DatatypeProperty ;
    rdfs:label "end date" ;
    rdfs:comment "End of temporal coverage (absent = ongoing)." ;
    rdfs:domain tf:TemporalExtent ;
    rdfs:range xsd:date ;
    rdfs:subPropertyOf dcat:endDate .

tf:endpointURL a owl:DatatypeProperty ;
    rdfs:label "endpoint URL" ;
    rdfs:comment "Service root URL." ;
    rdfs:domain tf:AccessMethod ;
    rdfs:range xsd:anyURI ;
    rdfs:subPropertyOf dcat:endpointURL .

tf:accessKind a owl:DatatypeProperty ;
    rdfs:label "access kind" ;
    rdfs:comment "stac-api, s3, https, wmts, earth-engine or broker." ;
    rdfs:domain tf:AccessMethod ;
    rdfs:range xsd:string .

tf:archiveUsdPerKm2 a owl:DatatypeProperty ;
    rdfs:label "archive price (USD/km²)" ;
    rdfs:comment "Indicative archive list price." ;
    rdfs:domain tf:Offer ;
    rdfs:range xsd:decimal ;
    rdfs:subPropertyOf schema:price .

tf:taskingUsdPerKm2 a owl:DatatypeProperty ;
    rdfs:label "tasking price (USD/km²)" ;
    rdfs:comment "Indicative standard-priority tasking list price." ;
    rdfs:domain tf:Offer ;
    rdfs:range xsd:decimal .

tf:minimumAreaKm2 a owl:DatatypeProperty ;
    rdfs:label "minimum area (km²)" ;
    rdfs:comment "Minimum billable area." ;
    rdfs:domain tf:Offer ;
    rdfs:range xsd:decimal .

tf:subscriptionUsdPerMonth a owl:DatatypeProperty ;
    rdfs:label "subscription (USD/month)" ;
    rdfs:comment "Indicative monthly subscription price." ;
    rdfs:domain tf:Offer ;
    rdfs:range xsd:decimal .

tf:multiplier a owl:DatatypeProperty ;
    rdfs:label "price multiplier" ;
    rdfs:comment "Multiplier applied to the base price." ;
    rdfs:domain tf:LicenseTier ;
    rdfs:domain tf:Priority ;
    rdfs:range xsd:decimal .

tf:windowHours a owl:DatatypeProperty ;
    rdfs:label "collection window (h)" ;
    rdfs:comment "Target collection window for tasking." ;
    rdfs:domain tf:Priority ;
    rdfs:range xsd:decimal .

tf:areaKm2 a owl:DatatypeProperty ;
    rdfs:label "area (km²)" ;
    rdfs:comment "Area in square kilometres." ;
    rdfs:domain tf:AreaOfInterest ;
    rdfs:domain tf:Quote ;
    rdfs:range xsd:decimal .

tf:totalUsd a owl:DatatypeProperty ;
    rdfs:label "total (USD)" ;
    rdfs:comment "Total price in USD." ;
    rdfs:domain tf:Quote ;
    rdfs:domain tf:Order ;
    rdfs:range xsd:decimal ;
    rdfs:subPropertyOf schema:price .

tf:validUntil a owl:DatatypeProperty ;
    rdfs:label "valid until" ;
    rdfs:comment "Quote expiry." ;
    rdfs:domain tf:Quote ;
    rdfs:range xsd:dateTime ;
    rdfs:subPropertyOf schema:validThrough .

tf:status a owl:DatatypeProperty ;
    rdfs:label "status" ;
    rdfs:comment "Lifecycle state." ;
    rdfs:domain tf:Order ;
    rdfs:domain tf:TaskingRequest ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf schema:orderStatus .

tf:maxOrderUsd a owl:DatatypeProperty ;
    rdfs:label "max order (USD)" ;
    rdfs:comment "Largest single order the agent may place autonomously." ;
    rdfs:domain tf:SpendingMandate ;
    rdfs:range xsd:decimal .

tf:acquiredAt a owl:DatatypeProperty ;
    rdfs:label "acquired at" ;
    rdfs:comment "Acquisition time." ;
    rdfs:domain tf:Item ;
    rdfs:range xsd:dateTime ;
    rdfs:subPropertyOf sosa:resultTime .

tf:cloudCover a owl:DatatypeProperty ;
    rdfs:label "cloud cover (%)" ;
    rdfs:comment "Estimated cloud cover for optical items." ;
    rdfs:domain tf:Item ;
    rdfs:range xsd:decimal .

tf:offNadirDeg a owl:DatatypeProperty ;
    rdfs:label "off-nadir (°)" ;
    rdfs:comment "Off-nadir viewing angle." ;
    rdfs:domain tf:Item ;
    rdfs:range xsd:decimal .

tf:isOpen a owl:DatatypeProperty ;
    rdfs:label "is open" ;
    rdfs:comment "Whether the licence is open." ;
    rdfs:domain tf:License ;
    rdfs:range xsd:boolean .

tf:country a owl:DatatypeProperty ;
    rdfs:label "country" ;
    rdfs:comment "ISO country / region code." ;
    rdfs:domain tf:Provider ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf schema:addressCountry .

tf:toolName a owl:DatatypeProperty ;
    rdfs:label "tool name" ;
    rdfs:comment "Callable function name in MCP / tool manifest." ;
    rdfs:domain tf:Tool ;
    rdfs:range xsd:string ;
    rdfs:subPropertyOf schema:name .

tf:modality-optical a tf:Modality ;
    skos:prefLabel "Optical" ;
    skos:definition "Passive imaging of reflected solar radiation in visible and near-infrared." ;
    skos:notation "optical" .

tf:modality-multispectral a tf:Modality ;
    skos:prefLabel "Multispectral" ;
    skos:definition "Imaging in a handful of discrete spectral bands." ;
    skos:notation "multispectral" .

tf:modality-hyperspectral a tf:Modality ;
    skos:prefLabel "Hyperspectral" ;
    skos:definition "Imaging spectroscopy with tens to hundreds of contiguous bands." ;
    skos:notation "hyperspectral" .

tf:modality-thermal a tf:Modality ;
    skos:prefLabel "Thermal infrared" ;
    skos:definition "Emitted radiation used for temperature and heat anomalies." ;
    skos:notation "thermal" .

tf:modality-sar a tf:Modality ;
    skos:prefLabel "Synthetic Aperture Radar" ;
    skos:definition "Active microwave imaging; all-weather, day and night." ;
    skos:notation "sar" .

tf:modality-lidar a tf:Modality ;
    skos:prefLabel "LiDAR" ;
    skos:definition "Active laser ranging producing 3D structure and elevation." ;
    skos:notation "lidar" .

tf:modality-elevation a tf:Modality ;
    skos:prefLabel "Elevation" ;
    skos:definition "Digital elevation, surface and terrain models." ;
    skos:notation "elevation" .

tf:modality-atmospheric a tf:Modality ;
    skos:prefLabel "Atmospheric" ;
    skos:definition "Trace gases, aerosols and meteorological variables." ;
    skos:notation "atmospheric" .

tf:modality-landcover a tf:Modality ;
    skos:prefLabel "Land cover" ;
    skos:definition "Thematic classification of the land surface." ;
    skos:notation "landcover" .

tf:modality-rf a tf:Modality ;
    skos:prefLabel "Radio frequency" ;
    skos:definition "Passive detection and geolocation of RF emitters." ;
    skos:notation "rf" .

tf:modality-ais a tf:Modality ;
    skos:prefLabel "AIS / cooperative tracks" ;
    skos:definition "Self-reported vessel positions received from space." ;
    skos:notation "ais" .

tf:modality-video a tf:Modality ;
    skos:prefLabel "Full-motion video" ;
    skos:definition "Staring video collections from orbit." ;
    skos:notation "video" .

tf:level-L0 a tf:ProcessingLevel ;
    skos:prefLabel "Level 0" ;
    skos:notation "L0" ;
    skos:definition "Unprocessed instrument data at full resolution, time-referenced." ;
    skos:broader tf:tier-raw .

tf:level-L1 a tf:ProcessingLevel ;
    skos:prefLabel "Level 1" ;
    skos:notation "L1" ;
    skos:definition "Calibrated, geolocated sensor data (includes SAR SLC/GRD, L1A/L1B/L1T)." ;
    skos:broader tf:tier-raw .

tf:level-L1A a tf:ProcessingLevel ;
    skos:prefLabel "Level 1A" ;
    skos:notation "L1A" ;
    skos:definition "Reconstructed, unprocessed data with ancillary calibration information appended." ;
    skos:broader tf:tier-raw .

tf:level-L1B a tf:ProcessingLevel ;
    skos:prefLabel "Level 1B" ;
    skos:notation "L1B" ;
    skos:definition "Radiometrically calibrated sensor units." ;
    skos:broader tf:tier-raw .

tf:level-L1C a tf:ProcessingLevel ;
    skos:prefLabel "Level 1C" ;
    skos:notation "L1C" ;
    skos:definition "Orthorectified top-of-atmosphere reflectance on a map grid." ;
    skos:broader tf:tier-preprocessed .

tf:level-L2 a tf:ProcessingLevel ;
    skos:prefLabel "Level 2" ;
    skos:notation "L2" ;
    skos:definition "Derived geophysical variables at the same resolution as the source (e.g. surface reflectance)." ;
    skos:broader tf:tier-preprocessed .

tf:level-L2A a tf:ProcessingLevel ;
    skos:prefLabel "Level 2A" ;
    skos:notation "L2A" ;
    skos:definition "Bottom-of-atmosphere / geolocated derived variables." ;
    skos:broader tf:tier-preprocessed .

tf:level-L3 a tf:ProcessingLevel ;
    skos:prefLabel "Level 3" ;
    skos:notation "L3" ;
    skos:definition "Variables mapped on uniform space-time grids, composited or mosaicked." ;
    skos:broader tf:tier-product .

tf:level-L4 a tf:ProcessingLevel ;
    skos:prefLabel "Level 4" ;
    skos:notation "L4" ;
    skos:definition "Model output or analysis results from lower-level data (maps, reanalyses, detections)." ;
    skos:broader tf:tier-product .

tf:tier-raw a tf:DataTier ;
    skos:prefLabel "Raw sensor data" ;
    skos:definition "Minimally processed instrument output." .

tf:tier-preprocessed a tf:DataTier ;
    skos:prefLabel "Pre-processed data" ;
    skos:definition "Calibrated, corrected, analysis-ready data." .

tf:tier-product a tf:DataTier ;
    skos:prefLabel "Data product" ;
    skos:definition "Derived information products and analyses." .

tf:license-tier-single-org a tf:LicenseTier ;
    skos:prefLabel "Single organisation" ;
    skos:definition "Use within one legal entity." ;
    tf:multiplier "1"^^xsd:decimal .

tf:license-tier-multi-org a tf:LicenseTier ;
    skos:prefLabel "Multi-organisation / coalition" ;
    skos:definition "Sharing across up to 5 named partner organisations or coalition partners." ;
    tf:multiplier "1.6"^^xsd:decimal .

tf:license-tier-government-wide a tf:LicenseTier ;
    skos:prefLabel "Government-wide" ;
    skos:definition "Use across all agencies of one national government, including C2 dissemination." ;
    tf:multiplier "2.2"^^xsd:decimal .

tf:license-tier-public-release a tf:LicenseTier ;
    skos:prefLabel "Public release" ;
    skos:definition "Publication of derived and source imagery to the public." ;
    tf:multiplier "3"^^xsd:decimal .

tf:priority-standard a tf:Priority ;
    skos:prefLabel "standard" ;
    tf:multiplier "1"^^xsd:decimal ;
    tf:windowHours "168"^^xsd:decimal .

tf:priority-priority a tf:Priority ;
    skos:prefLabel "priority" ;
    tf:multiplier "1.5"^^xsd:decimal ;
    tf:windowHours "72"^^xsd:decimal .

tf:priority-urgent a tf:Priority ;
    skos:prefLabel "urgent" ;
    tf:multiplier "2.5"^^xsd:decimal ;
    tf:windowHours "24"^^xsd:decimal .

tf:priority-flash a tf:Priority ;
    skos:prefLabel "flash" ;
    tf:multiplier "4"^^xsd:decimal ;
    tf:windowHours "6"^^xsd:decimal .

tf:pricing-per-km2 a tf:PricingModel ;
    skos:prefLabel "Per square kilometre" .

tf:pricing-subscription a tf:PricingModel ;
    skos:prefLabel "Subscription" .

tf:marking-public a tf:ReleasabilityMarking ;
    skos:prefLabel "UNCLASSIFIED // PUBLIC RELEASE" .

tf:marking-licensed a tf:ReleasabilityMarking ;
    skos:prefLabel "UNCLASSIFIED // COMMERCIAL LICENSED — distribution per licence tier" .

tf:marking-cui a tf:ReleasabilityMarking ;
    skos:prefLabel "CUI // controlled — handle per originating agency guidance" .

<https://terrafabric.world/id/tool/search_collections> a tf:Tool ;
    tf:toolName "search_collections" .

<https://terrafabric.world/id/tool/get_collection> a tf:Tool ;
    tf:toolName "get_collection" .

<https://terrafabric.world/id/tool/search_items> a tf:Tool ;
    tf:toolName "search_items" .

<https://terrafabric.world/id/tool/list_providers> a tf:Tool ;
    tf:toolName "list_providers" .

<https://terrafabric.world/id/tool/describe_ontology> a tf:Tool ;
    tf:toolName "describe_ontology" .

<https://terrafabric.world/id/tool/describe_term> a tf:Tool ;
    tf:toolName "describe_term" .

<https://terrafabric.world/id/tool/query_graph> a tf:Tool ;
    tf:toolName "query_graph" .

<https://terrafabric.world/id/tool/get_quote> a tf:Tool ;
    tf:toolName "get_quote" .

<https://terrafabric.world/id/tool/set_mandate> a tf:Tool ;
    tf:toolName "set_mandate" .

<https://terrafabric.world/id/tool/place_order> a tf:Tool ;
    tf:toolName "place_order" .

<https://terrafabric.world/id/tool/get_order> a tf:Tool ;
    tf:toolName "get_order" .

<https://terrafabric.world/id/tool/approve_order> a tf:Tool ;
    tf:toolName "approve_order" .

<https://terrafabric.world/id/tool/assess_coverage> a tf:Tool ;
    tf:toolName "assess_coverage" .

<https://terrafabric.world/id/tool/submit_tasking> a tf:Tool ;
    tf:toolName "submit_tasking" .

<https://terrafabric.world/id/tool/get_tasking> a tf:Tool ;
    tf:toolName "get_tasking" .

