Skip to content

Technical Implementation

CCO provides a broader and more general ontology for modeling entities, processes, qualities, and relationships, making it suitable for semantic interoperability across domains.

EDR is narrower and focuses specifically on environmental data retrieval through APIs, with concepts.

Table 1 below provides a mapping between CCO and OGC EDR showing the BroaderThan, NarrowerThan and similar concepts

Table 1. Cross-Walk between CCO and OGC EDR

Category CCO Concept/Property EDR Concept/Property Relationship
Core Entities
Object cco:Object No direct correspondence in EDR Broader in CCO
Physical Object cco:PhysicalObject No direct correspondence in EDR Broader in CCO
Process cco:Process No direct correspondence in EDR Broader in CCO
Event cco:Event No direct correspondence in EDR Broader in CCO
Quality cco:Quality No direct correspondence in EDR Broader in CCO
Location cco:Location edr:Location Similar
Spatial Region cco:SpatialRegion edr:SpatialExtent Similar
Temporal Region cco:TemporalRegion edr:TemporalExtent Similar
Parameter cco:Parameter edr:Parameter Similar
Information Object cco:InformationObject No direct correspondence in EDR Broader in CCO
Dataset cco:Dataset edr:Dataset Similar
Measurement cco:Measurement No correspondence in EDR Broader in CCO
Data Query No correspondence in CCO edr:DataQuery Narrower in EDR
Properties/Relationships
hasQuality cco:hasQuality No direct correspondence in EDR Broader in CCO
locatedIn cco:locatedIn edr:hasLocation Similar
participatesIn cco:participatesIn No direct correspondence in EDR Broader in CCO
hasParameter cco:hasParameter edr:hasParameter Similar
hasPart cco:hasPart No direct correspondence in EDR Broader in CCO
hasTemporalRegion cco:hasTemporalRegion edr:hasTemporalExtent Similar
hasValue cco:hasValue edr:hasValue Similar
hasUnit cco:hasUnit edr:hasUnit Similar
hasOutput cco:hasOutput No direct correspondence in EDR Broader in CCO
Spatial/Temporal Types
Point cco:Point edr:Point Similar
Line cco:Line edr:Line Similar
Polygon cco:Polygon edr:Polygon Similar
Instant cco:Instant No direct correspondence in EDR Broader in CCO
Interval cco:Interval No direct correspondence in EDR Broader in CCO
Data and Measurements
Information Object cco:InformationObject No direct correspondence in EDR Broader in CCO
Measurement cco:Measurement No direct correspondence in EDR Broader in CCO
Dataset cco:Dataset edr:Dataset Similar
Data Query No direct correspondence in CCO edr:DataQuery Narrower in EDR
Qualities and Parameters
Quality cco:Quality No direct correspondence in EDR Broader in CCO
Parameter cco:Parameter edr:Parameter Similar

Link/Bridge Concepts

The Link/bridge concepts in the shared ontology are used to align and integrate the Common Core Ontologies (CCO) and the OGC Environmental Data Retrieval (EDR). These bridge concepts ensure that the two ontologies can be interoperable. Table 2 below shows the bridge relationships between CCO and EDR.

Table 2: Bridge concepts between CCO and EDR

Bridge/Link Concept CCO Concept OGC EDR Concept
EnvironmentalData cco:InformationContentEntity edr:EnvironmentalData
Sensor cco:Device edr:Sensor
Observation cco:Process edr:Observation
FeatureOfInterest cco:Object edr:FeatureOfInterest
Measurement cco:QualityValue edr:Measurement
Location cco:SpatialLocation edr:Location
Time cco:TemporalLocation edr:Time
hasLocation cco:hasSpatialLocation edr:hasLocation
hasTime cco:hasTemporalLocation edr:hasTime
observes cco:performs edr:observes

Using the bridge concepts and the concept mappings described above the shared ontology is shown below.

Shared Ontology (ccoedr):

The Shared ontology or reference ontology (ccoedr) serves as the top level ontology that has more expressive terminology. Below is the shared ontology representationin OWL.

<?xml version="1.0"?>  
<rdf:RDF xmlns="http://www.w3.org/2002/07/owl\#"  
     xml:base="http://www.w3.org/2002/07/owl"  
     xmlns:cco="http://www.ontologyrepository.com/CommonCoreOntologies\#"  
     xmlns:edr="http://www.opengis.net/ont/edr\#"  
     xmlns:owl="http://www.w3.org/2002/07/owl\#"  
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns\#"  
     xmlns:xml="http://www.w3.org/XML/1998/namespace"  
     xmlns:xsd="http://www.w3.org/2001/XMLSchema\#"  
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema\#"  
     xmlns:ccoedr="http://www.example.org/ccoedr\#">  
    <Ontology/>  


    <!--   
    ///////////////////////////////////////////////////////////////////////////////////////  
    //  
    // Object Properties  
    //  
    ///////////////////////////////////////////////////////////////////////////////////////  
    -->

    <!-- http://www.example.org/ccoedr\#hasLocation -->
    <ObjectProperty rdf:about="http://www.example.org/ccoedr\#hasLocation">
        <rdfs:subPropertyOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#locatedIn"/>
        <rdfs:subPropertyOf rdf:resource="http://www.opengis.net/ont/edr\#hasLocation"/>
    </ObjectProperty>

    <!-- http://www.example.org/ccoedr\#hasOutput -->
    <ObjectProperty rdf:about="http://www.example.org/ccoedr\#hasOutput">
        <rdfs:subPropertyOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#hasOutput"/>
        <inverseOf rdf:resource="http://www.example.org/ccoedr\#retrieves"/>
        <propertyChainAxiom rdf:parseType="Collection">
            <rdf:Description rdf:about="http://www.example.org/ccoedr\#hasOutput"/>
            <rdf:Description rdf:about="http://www.example.org/ccoedr\#retrieves"/>
        </propertyChainAxiom>
    </ObjectProperty>

    <!-- http://www.example.org/ccoedr\#hasParameter -->

    <ObjectProperty rdf:about="http://www.example.org/ccoedr\#hasParameter">
        <rdfs:subPropertyOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#hasParameter"/>
        <rdfs:subPropertyOf rdf:resource="http://www.opengis.net/ont/edr\#hasParameter"/>
        <inverseOf rdf:resource="http://www.example.org/ccoedr\#measures"/>
        <propertyChainAxiom rdf:parseType="Collection">
            <rdf:Description rdf:about="http://www.example.org/ccoedr\#hasParameter"/>
            <rdf:Description rdf:about="http://www.example.org/ccoedr\#measures"/>
        </propertyChainAxiom>
    </ObjectProperty>

    <!-- http://www.example.org/ccoedr\#hasQuality -->
    <ObjectProperty rdf:about="http://www.example.org/ccoedr\#hasQuality">
        <rdfs:subPropertyOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#hasQuality"/>
    </ObjectProperty>
        <!-- http://www.example.org/ccoedr\#hasTemporalExtent -->

    <ObjectProperty rdf:about="http://www.example.org/ccoedr\#hasTemporalExtent">
        <rdfs:subPropertyOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#hasTemporalRegion"/>
        <rdfs:subPropertyOf rdf:resource="http://www.opengis.net/ont/edr\#hasTemporalExtent"/>
    </ObjectProperty>

    <!-- http://www.example.org/ccoedr\#hasUnit -->

    <ObjectProperty rdf:about="http://www.example.org/ccoedr\#hasUnit">
        <rdfs:subPropertyOf rdf:resource="http://www.opengis.net/ont/edr\#hasUnit"/>
    </ObjectProperty>

    <!-- http://www.example.org/ccoedr\#hasValue -->

    <ObjectProperty rdf:about="http://www.example.org/ccoedr\#hasValue">
        <rdfs:subPropertyOf rdf:resource="http://www.opengis.net/ont/edr\#hasValue"/>
    </ObjectProperty>

    <!-- http://www.example.org/ccoedr\#measures -->

    <ObjectProperty rdf:about="http://www.example.org/ccoedr\#measures"/>

    <!-- http://www.example.org/ccoedr\#participatesIn -->

    <ObjectProperty rdf:about="http://www.example.org/ccoedr\#participatesIn">
        <rdfs:subPropertyOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#participatesIn"/>
    </ObjectProperty>

    <!-- http://www.example.org/ccoedr\#retrieves -->

    <ObjectProperty rdf:about="http://www.example.org/ccoedr\#retrieves"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#hasOutput -->
    <ObjectProperty rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#hasOutput"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#hasParameter -->

    <ObjectProperty rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#hasParameter"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#hasQuality -->

    <ObjectProperty rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#hasQuality"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#hasTemporalRegion -->

    <ObjectProperty rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#hasTemporalRegion"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#locatedIn -->

    <ObjectProperty rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#locatedIn"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#participatesIn -->

    <ObjectProperty rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#participatesIn"/>

    <!-- http://www.opengis.net/ont/edr\#hasLocation -->

    <ObjectProperty rdf:about="http://www.opengis.net/ont/edr\#hasLocation"/>

    <!-- http://www.opengis.net/ont/edr\#hasParameter -->

    <ObjectProperty rdf:about="http://www.opengis.net/ont/edr\#hasParameter"/>

    <!-- http://www.opengis.net/ont/edr\#hasTemporalExtent -->

    <ObjectProperty rdf:about="http://www.opengis.net/ont/edr\#hasTemporalExtent"/>

    <!-- http://www.opengis.net/ont/edr\#hasUnit -->

    <ObjectProperty rdf:about="http://www.opengis.net/ont/edr\#hasUnit"/>

    <!-- http://www.opengis.net/ont/edr\#hasValue -->

    <ObjectProperty rdf:about="http://www.opengis.net/ont/edr\#hasValue"/>


    <!--   
    ///////////////////////////////////////////////////////////////////////////////////////  
    //  
    // Classes  
    //  
    ///////////////////////////////////////////////////////////////////////////////////////  
     -->

    <!-- http://www.example.org/ccoedr\#DataQuery -->

    <Class rdf:about="http://www.example.org/ccoedr\#DataQuery">
        <rdfs:subClassOf rdf:resource="http://www.opengis.net/ont/edr\#DataQuery"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#Dataset -->
    <Class rdf:about="http://www.example.org/ccoedr\#Dataset">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Dataset"/>
        <rdfs:subClassOf rdf:resource="http://www.opengis.net/ont/edr\#Dataset"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#Event -->

    <Class rdf:about="http://www.example.org/ccoedr\#Event">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Event"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#Instant -->

    <Class rdf:about="http://www.example.org/ccoedr\#Instant">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Instant"/>
    </Class>
        <!-- http://www.example.org/ccoedr\#Interval -->

    <Class rdf:about="http://www.example.org/ccoedr\#Interval">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Interval"/>
    </Class>


    <!-- http://www.example.org/ccoedr\#Line -->
    <Class rdf:about="http://www.example.org/ccoedr\#Line">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Line"/>
        <rdfs:subClassOf rdf:resource="http://www.opengis.net/ont/edr\#Line"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#Location -->

    <Class rdf:about="http://www.example.org/ccoedr\#Location">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Location"/>
        <rdfs:subClassOf rdf:resource="http://www.opengis.net/ont/edr\#Location"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#Measurement -->

    <Class rdf:about="http://www.example.org/ccoedr\#Measurement">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Measurement"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#Parameter -->

    <Class rdf:about="http://www.example.org/ccoedr\#Parameter">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Parameter"/>
        <rdfs:subClassOf rdf:resource="http://www.opengis.net/ont/edr\#Parameter"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#Point -->

    <Class rdf:about="http://www.example.org/ccoedr\#Point">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Point"/>
        <rdfs:subClassOf rdf:resource="http://www.opengis.net/ont/edr\#Point"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#Polygon -->

    <Class rdf:about="http://www.example.org/ccoedr\#Polygon">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Polygon"/>
        <rdfs:subClassOf rdf:resource="http://www.opengis.net/ont/edr\#Polygon"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#Process -->

    <Class rdf:about="http://www.example.org/ccoedr\#Process">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Process"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#Quality -->

    <Class rdf:about="http://www.example.org/ccoedr\#Quality">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#Quality"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#SpatialRegion -->

    <Class rdf:about="http://www.example.org/ccoedr\#SpatialRegion">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#SpatialRegion"/>
        <rdfs:subClassOf rdf:resource="http://www.opengis.net/ont/edr\#SpatialExtent"/>
    </Class>

    <!-- http://www.example.org/ccoedr\#TemporalRegion -->

    <Class rdf:about="http://www.example.org/ccoedr\#TemporalRegion">
        <rdfs:subClassOf rdf:resource="http://www.ontologyrepository.com/CommonCoreOntologies\#TemporalRegion"/>
        <rdfs:subClassOf rdf:resource="http://www.opengis.net/ont/edr\#TemporalExtent"/>
    </Class>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Dataset -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Dataset"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Event -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Event"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Instant -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Instant"/>


    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Interval -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Interval"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Line -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Line"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Location -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Location"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Measurement -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Measurement"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Parameter -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Parameter"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Point -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Point"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Polygon -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Polygon"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Process -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Process"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#Quality -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#Quality"/>

    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#SpatialRegion -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#SpatialRegion"/>


    <!-- http://www.ontologyrepository.com/CommonCoreOntologies\#TemporalRegion -->

    <Class rdf:about="http://www.ontologyrepository.com/CommonCoreOntologies\#TemporalRegion"/>

    <!-- http://www.opengis.net/ont/edr\#DataQuery -->

    <Class rdf:about="http://www.opengis.net/ont/edr\#DataQuery"/>

    <!-- http://www.opengis.net/ont/edr\#Dataset -->

    <Class rdf:about="http://www.opengis.net/ont/edr\#Dataset"/>

    <!-- http://www.opengis.net/ont/edr\#Line -->

    <Class rdf:about="http://www.opengis.net/ont/edr\#Line"/>

    <!-- http://www.opengis.net/ont/edr\#Location -->

    <Class rdf:about="http://www.opengis.net/ont/edr\#Location"/>

    <!-- http://www.opengis.net/ont/edr\#Parameter -->

    <Class rdf:about="http://www.opengis.net/ont/edr\#Parameter"/>


    <!-- http://www.opengis.net/ont/edr\#Point -->

    <Class rdf:about="http://www.opengis.net/ont/edr\#Point"/>

    <!-- http://www.opengis.net/ont/edr\#Polygon -->

    <Class rdf:about="http://www.opengis.net/ont/edr\#Polygon"/>

    <!-- http://www.opengis.net/ont/edr\#SpatialExtent -->

    <Class rdf:about="http://www.opengis.net/ont/edr\#SpatialExtent"/>

    <!-- http://www.opengis.net/ont/edr\#TemporalExtent -->

    <Class rdf:about="http://www.opengis.net/ont/edr\#TemporalExtent"/>
</rdf:RDF>
Figure below shows Visualization of the Shared ontology (ccoedr) Visualization of the Shared ontology (ccoedr)


SHACL Schema for the Shared Ontology

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns\#> .  
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema\#> .  
@prefix sh: <http://www.w3.org/ns/shacl\#> .  
@prefix cco: <http://www.ontologyrepository.com/CommonCoreOntologies/> .  
@prefix edr: <http://www.opengis.net/ont/edr\#> .  
@prefix ccoedr: <http://www.example.org/ccoedr\#> .  
@prefix xsd: <http://www.w3.org/2001/XMLSchema\#> .

Shape for Location

ccoedr:LocationShape  
    a sh:NodeShape ;  
    sh:targetClass ccoedr:Location ;  
    sh:property [  
        sh:path rdfs:label ;  
        sh:datatype xsd:string ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:SpatialRegion ;  
        sh:class ccoedr:SpatialRegion ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ]

Shape for Spatial Region

ccoedr:SpatialRegionShape  
    a sh:NodeShape ;  
    sh:targetClass ccoedr:SpatialRegion ;  
    sh:property [  
        sh:path rdfs:label ;  
        sh:datatype xsd:string ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ]

Shape for Temporal Region

ccoedr:TemporalRegionShape  
    a sh:NodeShape ;  
    sh:targetClass ccoedr:TemporalRegion ;  
    sh:property [  
        sh:path rdfs:label ;  
        sh:datatype xsd:string ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasStartTime ;  
        sh:datatype xsd:dateTime ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasEndTime ;  
        sh:datatype xsd:dateTime ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ]

Shape for Parameter

ccoedr:ParameterShape  
    a sh:NodeShape ;  
    sh:targetClass ccoedr:Parameter ;  
    sh:property [  
        sh:path rdfs:label ;  
        sh:datatype xsd:string ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasUnit ;  
        sh:datatype xsd:string ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ]

Shape for Dataset

ccoedr:DatasetShape  
    a sh:NodeShape ;  
    sh:targetClass ccoedr:Dataset ;  
    sh:property [  
        sh:path rdfs:label ;  
        sh:datatype xsd:string ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasParameter ;  
        sh:class ccoedr:Parameter ;  
        sh:minCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasTemporalExtent ;  
        sh:class ccoedr:TemporalRegion ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasLocation ;  
        sh:class ccoedr:Location ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ]

Shape for Process

ccoedr:ProcessShape  
    a sh:NodeShape ;  
    sh:targetClass ccoedr:Process ;  
    sh:property [  
        sh:path rdfs:label ;  
        sh:datatype xsd:string ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasLocation ;  
        sh:class ccoedr:Location ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasTemporalExtent ;  
        sh:class ccoedr:TemporalRegion ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasOutput ;  
        sh:class ccoedr:Dataset ;  
        sh:minCount 1 ;  
    ]

Shape for Sensor (Physical Object)

ccoedr:SensorShape  
    a sh:NodeShape ;  
    sh:targetClass ccoedr:PhysicalObject ;  
    sh:property [  
        sh:path rdfs:label ;  
        sh:datatype xsd:string ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:locatedIn ;  
        sh:class ccoedr:Location ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:measures ;  
        sh:class ccoedr:Parameter ;  
        sh:minCount 1 ;  
    ]

Shape for Data Query

ccoedr:DataQueryShape  
    a sh:NodeShape ;  
    sh:targetClass ccoedr:DataQuery ;  
    sh:property [  
        sh:path rdfs:label ;  
        sh:datatype xsd:string ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasParameter ;  
        sh:class ccoedr:Parameter ;  
        sh:minCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasLocation ;  
        sh:class ccoedr:Location ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:hasTemporalExtent ;  
        sh:class ccoedr:TemporalRegion ;  
        sh:minCount 1 ;  
        sh:maxCount 1 ;  
    ] ;  
    sh:property [  
        sh:path ccoedr:retrieves ;  
        sh:class ccoedr:Dataset ;  
        sh:minCount 1 ;  
    ]

The above SHACL schema defines constraints and validation rules to ensure that the data conforms to the structure and relationships defined in the CCO-EDR shared ontology. The UML representation of the SHACL above is shown in figure below. UML representation of SHACL schema

Semantically Annotated OGC EDR Example Data using the Shared Ontology in JSON-LD

{
  "@context": {
    "id": "@id",
    "type": "@type",
    "graph": "@graph",
    "cco": "http://www.ontologyrepository.com/CommonCoreOntologies/",
    "ccoedr": "http://www.example.org/ccoedr#",
    "edr": "http://www.opengis.net/ont/edr#",
    "rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
    "rdfs": "http://www.w3.org/2000/01/rdf-schema#",
    "sh": "http://www.w3.org/ns/shacl#",
    "xsd": "http://www.w3.org/2001/XMLSchema#",
    "DataQueryShape": "ccoedr:DataQueryShape",
    "DatasetShape": "ccoedr:DatasetShape",
    "FloodEventShape": "ccoedr:FloodEventShape",
    "LocationShape": "ccoedr:LocationShape",
    "ParameterShape": "ccoedr:ParameterShape",
    "SensorShape": "ccoedr:SensorShape",
    "TemporalRegionShape": "ccoedr:TemporalRegionShape",
    "hasEndTime": {
      "@id": "ccoedr:hasEndTime",
      "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
    },
    "hasLocation": {
      "@id": "ccoedr:hasLocation",
      "@type": "@id"
    },
    "hasOutput": {
      "@id": "ccoedr:hasOutput",
      "@type": "@id",
      "@container": "@set"
    },
    "hasParameter": {
      "@id": "ccoedr:hasParameter",
      "@type": "@id",
      "@container": "@set"
    },
    "hasStartTime": {
      "@id": "ccoedr:hasStartTime",
      "@type": "http://www.w3.org/2001/XMLSchema#dateTime"
    },
    "hasTemporalExtent": {
      "@id": "ccoedr:hasTemporalExtent",
      "@type": "@id"
    },
    "hasUnit": {
      "@id": "ccoedr:hasUnit",
      "@type": "http://www.w3.org/2001/XMLSchema#string"
    },
    "label": {
      "@id": "rdfs:label",
      "@type": "http://www.w3.org/2001/XMLSchema#string"
    },
    "locatedIn": {
      "@id": "ccoedr:locatedIn",
      "@type": "@id"
    },
    "measures": {
      "@id": "ccoedr:measures",
      "@type": "@id",
      "@container": "@set"
    },
    "retrieves": {
      "@id": "ccoedr:retrieves",
      "@type": "@id",
      "@container": "@set"
    },
    "SpatialRegion": {
      "@id": "ccoedr:SpatialRegion",
      "@type": "@id"
    }
  }
}

The above JSON-LD document represents a semantically annotated dataset using the Shared Ontology. It includes metadata such as temporal extent, location, and associated parameters while conforming to the OGC Environmental Data Retrieval (EDR) standard.