DRAFT 3/18/2016 Web Service Description Document (WSDD) US Integrated Ocean Observing System Sensor Observation Service (IOOS SOS) DRAFT v0.9 DRAFT 3/18/2016 Web Service Description Document Approval Signatures Name Organization Signature ii Date Signed DRAFT 3/18/2016 Revision History Date Version Description Name 2013-06-24 0.01 Initial draft structure A. Birger 2013-09-05 0.8 First working draft version for group discussion A. Birger 2013-11-05 0.9 Various additions and modifications based on Shane StClair’s feedback A. Birger, S. StClair 2013-11-06 0.91 Maintenance release: some minor errors and omissions fixed. A. Birger, S. StClair iii DRAFT 3/18/2016 Table of Contents 1 2 SCOPE........................................................................................................................................ 6 APPLICABLE DOCUMENTS .......................................................................................................... 6 2.1 2.2 3 DEFINITIONS .............................................................................................................................. 8 3.1 3.2 4 Government Standards .............................................................................................................................. 6 Non-Government Standards ...................................................................................................................... 6 Terms and Definitions ................................................................................................................................ 8 Acronyms ................................................................................................................................................... 9 WEB SERVICE PROPERTIES AND CAPABILITIES............................................................................12 4.1 SERVICE PROFILE ...................................................................................................................................... 12 4.1.1 Service Providers .............................................................................................................................. 12 4.1.1.1 Point of Contact ........................................................................................................................... 12 4.1.2 Service Consumer(s)......................................................................................................................... 13 4.1.3 Service Functionality ........................................................................................................................ 13 4.1.4 Security ............................................................................................................................................ 13 4.1.4.1 Roles ............................................................................................................................................. 13 4.1.4.2 Access Control Mechanisms ........................................................................................................ 14 4.1.4.3 Security Policies ........................................................................................................................... 14 4.1.5 Quality of Service (QoS) ................................................................................................................... 14 4.1.6 WSDL Documents............................................................................................................................. 14 4.2 SERVICE INTERFACES................................................................................................................................ 14 4.2.1 Conformance to Standards and Conventions .................................................................................. 15 4.2.1.1 OGC SOS Implementation Standards ........................................................................................... 15 4.2.1.2 NetCDF Climate and Forecast Metadata Convention .................................................................. 16 4.2.1.3 IOOS Convention and SOS Templates .......................................................................................... 16 4.2.1.4 Coordinate System Axis Order ..................................................................................................... 16 4.2.1.5 Namespaces ................................................................................................................................. 16 4.2.1.6 Notation ....................................................................................................................................... 17 4.2.2 Operations........................................................................................................................................ 17 4.2.2.1 GetCapabilities ............................................................................................................................. 19 4.2.2.1.1 GetCapabilities Request ......................................................................................................... 19 4.2.2.1.2 GetCapabilities Response ...................................................................................................... 21 4.2.2.1.2.1 ServiceIdentification ....................................................................................................... 23 4.2.2.1.2.2 ServiceProvider ............................................................................................................... 23 4.2.2.1.2.3 OperationsMetadata....................................................................................................... 24 4.2.2.1.2.4 Filter_Capabilities ........................................................................................................... 28 4.2.2.1.2.5 Contents .......................................................................................................................... 31 4.2.2.2 DescribeSensor............................................................................................................................. 37 4.2.2.2.1 DescribeSensor Request ........................................................................................................ 37 4.2.2.2.2 DescribeSensor Response ...................................................................................................... 38 4.2.2.2.2.1 Network of platforms/stations ....................................................................................... 41 4.2.2.2.2.2 Platform/Station ............................................................................................................. 46 4.2.2.2.2.3 Sensor.............................................................................................................................. 54 4.2.2.3 GetObservation ............................................................................................................................ 55 4.2.2.3.1 GetObservation Request ........................................................................................................ 56 iv DRAFT 3/18/2016 4.2.2.3.2 GetObservation Response ..................................................................................................... 59 4.2.2.3.2.1 OM-GetObservation Template ....................................................................................... 59 4.2.2.3.2.2 SWE-GetObservation Template ...................................................................................... 65 4.2.2.3.2.2.1 Static Data Block ...................................................................................................... 67 4.2.2.3.2.2.1.1 Common QA/QC information ........................................................................... 71 4.2.2.3.2.2.1.2 Profiling sensor specifics ................................................................................... 71 4.2.2.3.2.2.2 Dynamic Data (Sensor Observations) Block ............................................................. 75 4.2.2.3.2.2.2.1 Observation-specific QA/QC information ......................................................... 80 4.2.2.3.2.2.2.2 Profiling sensor observation-specific report..................................................... 82 4.3 SERVICE IMPLEMENTATION ..................................................................................................................... 84 4.3.1 SOS End Points ................................................................................................................................. 84 4.3.1.1 SOS 52 North End Point ............................................................................................................... 84 4.3.1.1.1 Associated Interface .............................................................................................................. 84 4.3.1.1.2 Communication Protocol ....................................................................................................... 84 4.3.1.1.3 Messaging Protocol................................................................................................................ 84 4.3.1.1.4 Network Address.................................................................................................................... 84 4.3.1.1.5 End Point-Specific Qualities of Service .................................................................................. 84 4.3.1.2 ncSOS End Point ........................................................................................................................... 84 4.3.1.2.1 Associated Interface .............................................................................................................. 84 4.3.1.2.2 Communication Protocol ....................................................................................................... 85 4.3.1.2.3 Messaging Protocol................................................................................................................ 85 4.3.1.2.4 Network Address.................................................................................................................... 85 4.3.1.2.5 End Point-Specific Qualities of Service .................................................................................. 85 5 APPENDIXES .............................................................................................................................85 5.1 SWE Common Templates Milestone 1.0 ................................................................................................. 85 5.1.1 TimeSeries records for single station with a single sensor .............................................................. 85 5.1.2 TimeSeries records for multiple stations ......................................................................................... 89 5.1.3 TimeSeries records for multiple stations with multiple sensors including quality elements for some quantities .......................................................................................................................................... 98 5.1.4 TimeSeriesProfile records for a single station ............................................................................... 109 5.1.5 TimeSeriesProfile records for multiple station with multiple sensors including quality elements for some quantities ........................................................................................................................ 117 v DRAFT 3/18/2016 1 SCOPE 2 APPLICABLE DOCUMENTS 2.1 Government Standards [1] FAA-STD-065, Preparation of Web Service Description Documents, 26 February 2010. http://www.faa.gov/air_traffic/nas/system_standards/ [2] 2.2 Non-Government Standards [3] OpenGIS Filter Encoding 2.0 Encoding Standard Version 2.0.0, Open Geospatial Consortium, International Organization for Standards (ISO) 19143:2010, November 2010. http://www.opengeospatial.org/standards/filter [4] OpenGIS Geography Markup Language (GML) Encoding Standard Version 3.2.1, Open Geospatial Consortium (OGC), August 2007. http://www.opengeospatial.org/standards/gml [5] OpenGIS Sensor Observation Service (SOS) Implementation Standard Version 1.0.0, Open Geospatial Consortium, October 2007, OGC 06-009r6. http://www.opengeospatial.org/standards/sos [6] OpenGIS Sensor Observation Service (SOS) Implementation Standard Version 2.0, Open Geospatial Consortium, April 2012, OGC 12-006. http://www.opengeospatial.org/standards/sos [7] OpenGIS Network Common Data Form (NetCDF) Core Encoding Standard Version 1.0, Open Geospatial Consortium, April 2011. http://www.opengeospatial.org/standards/netcdf [8] OpenGIS Web Services Common Standard Version 2.0, Open Geospatial Consortium, April 2010. http://www.opengeospatial.org/standards/common [9] Web Services Description Language (WSDL) Version 1.1, W3C Note, March 2001 http://www.w3.org/TR/wsdl [10] NetCDF Climate and Forecast (CF) Metadata Conventions Version 1.6, December 2011, http://cf-pcmdi.llnl.gov/documents [11] CF Conventions Standard Name Table, Version 25, July 2013, http://cf-pcmdi.llnl.gov/documents/cf-standard-names/standard-name-table/25/cf-standard- 6 DRAFT 3/18/2016 name-table.html [12] ANSI/INCITS 359-2004 Information Technology - Role Based Access Control International Committee for Information Technology Standards, February 2004 http://www.cs.purdue.edu/homes/ninghui/readings/AccessControl/ANSI+INCITS+359-2004.pdf [13] The Transport Layer Security (TLS) Protocol Version 1.2, Network Working Group, August 2008 http://tools.ietf.org/html/rfc5246 [14] The Secure Hypertext Transfer Protocol, Network Working Group, August 1999 http://tools.ietf.org/html/rfc2660 [15] NetCDF Feature Type Templates, National Oceanographic Data Center (NODC) http://www.nodc.noaa.gov/data/formats/netcdf/#templatesexamples OpenGIS Sensor Model Language (SensorML) Implementation Specification Version 1.0.0, Open Geospatial Consortium (OGC), July 2007 http://www.opengeospatial.org/standards/sensorml OpenGIS SWE Common Data Model Encoding Standard Version 2.0.0, Open Geospatial Consortium (OGC), January 2011 http://www.opengeospatial.org/standards/swecommon OpenGIS Geography Markup Language (GML) Encoding Standard Version 3.1, Open Geospatial Consortium (OGC), February 2004. http://www.opengeospatial.org/standards/gml 7 DRAFT 3/18/2016 3 DEFINITIONS 3.1 Terms and Definitions Broker Consumers Enterprise Architecture Find-Bind-Execute Paradigm Message Publish Queue Queue Manager Retained Messages Selector Service Service Discovery Service Oriented Architecture (SOA) Service Registration Service Registry Takes published messages and puts them on the queues for the subscribers. Adds a layer of indirection so that subscribers do not know publishers and publishers do not know subscribers. Publishers and subscribers only know the common broker. In this document, “Consumers” refer to any systems that need to obtain weather data from SOS and connect via a web service interface. The architecture of the enterprise wide systems. Consumer finds information from the registry; binds between consumer and provider; and executes the SOA request. A data item to be passed between programs through a Message Queue (MQ) containing MQ headers and data. To send data to the Broker on a particular subject or topic. A safe storage location for messages. A process that manages the access to the queues. Messages that have not yet sent out or received and are staying in between the publisher and subscriber. A message filtering paradigm. The IT realization of some self-contained business functionality. An implementation –independent reusable operational function that may be discovered as self-describing interfaces, and invoked using open standard protocols across networks. The processes through which a service consumer may search for and find services, (generally done by providing criteria to search for against a corpus of service metadata which service providers have provided to describe their services). A paradigm for organizing and utilizing distributed capabilities of services to clients that may be under the control of different ownership domains. SOA provides a uniform means to offer, discover, interact with and use capabilities to produce desired effects consistent with measurable preconditions and expectations The registering process for the agreed service. An enabling infrastructure service that uses a formal registration process to store, catalog, and manage metadata relevant to the services. A registry supports the search, identification, and understanding of resources, as well as query capabilities. 8 DRAFT 3/18/2016 Stateful Dialogs Subscribe Taxonomy Topic Observation Procedure Observed Property Feature of Interest Offering Dialogs that have “state” information between participating server and consumer agents to invoke requests and responses. To request data via the Broker from a publisher on a particular subject or topic. A collection of controlled vocabulary terms organized into a hierarchical structure or categorization. Each term in taxonomy is in one or more parent-child relationships to other terms in the taxonomy. A grouping of data of similar type. A value measured at given time instant (e.g. value: 0.2, time: 08-11-2012 12:12), and represented according to the O&M standard data model. A process that indicates who provide the observations. For SOS this is generally the sensor, but may also be a generic process that leads to some observations and is represented as SensorML standard data model. A physical phenomenon that is observed (e.g. phenomenon: water temperature), and is represented with a Uniform Resource Identifier (URI) composed by colon separated text according to the <om:observedProperty> element of the O&M standard. A feature that relates to the observations, and represented according to the <om:featureOfInterest> element of the O&M standard. For in-situ observation, the feature of interest is the instrument (sensor) location, while for remote observation it is the location of the target. A collection of sensors used to conveniently group them up (e.g. network:all, network:all-temperature, sensor:watertemp, etc.) and is represented as <sos:ObservationOffering> element of the SOS standard. 3.2 Acronyms 9 DRAFT 3/18/2016 GML Geography Markup Language HTTPS Hypertext Transfer Protocol Secure NetCDF Network Common Data Format NOAA National Oceanic and Atmospheric Administration NWS National Weather Service OASIS Organization for the Advancement of Structured Information Standards OGC Open Geospatial Consortium OMO One-Minute Observation PSL Product Subscription List QoS Quality of Service RBAC Role-Based Access Control SOA Service-Oriented Architecture SOAP Simple Object Access Protocol TLS Transport Layer Security UML Unified Modeling Language URL Uniform Resource Locator WAN Wide Access Network 10 DRAFT 3/18/2016 WARP Weather and Radar Processor WCS Web Coverage Service WFS Web Feature Service WSDD Web Service Description Document WSDL Web Service Description Language WSN Web Services Notification WSRD Web Service Requirements Document XML eXtensible Markup Language 11 DRAFT 3/18/2016 4 WEB SERVICE PROPERTIES AND CAPABILITIES The following sections describe the details that allow an IOOS consumer to discover and access data via the IOOS SOS web service. This information includes a brief profile of the service, a description of the service interfaces, and the implementation points of the service. 4.1 SERVICE PROFILE Full Name IOOS SOS Milestone 1.0 Namespace: TBD Description: Service that provides non-gridded in-situ observation data to IOOS consumers. Version: 1.0 Service Category: GEOSS Resource Category: [analysisVisualization] Lifecycle Stage: Deployment Level of Criticality: Essential 4.1.1 Service Providers Name: NDBC CO-OPS 11 IOOS Regional Associations Description: The US IOOS Program Office leads the multi-region effort, in collaboration with federal and non-federal partners, to develop and deploy the IOOS SOS in an effort to transform ocean observation data distribution by delivering improved access to such data. Web Page: 4.1.1.1 Point of Contact Full Name: Organization Job Title/Description: Telephone: E-mail: Address: 12 DRAFT 3/18/2016 4.1.2 Service Consumer(s) Organization: Program Any interested government agency, or private company, or members of general public N/A Web Page Service Level Agreement: Agreement Location: N/A TBD TBD 4.1.3 Service Functionality The business functionality of the service is to provide access to non-gridded in-situ observations collected by NOAA federal data providers (NDBC and CO-OPS), and 11 non-federal regional partner associations. To accomplish this, the service provides two interfaces for access to a non-gridded data: one for RDBMS data store, and another - for data stored in netCDF files. Implementation of the service interfaces is based upon standards developed by the OGC SOS specification, providing flexible querying of IOOS data. Other specifications which are leveraged by the implementation include the OGC’s Observation and Measurement (O&M) Model; Geography Markup Language (GML) and Sensor Web Enablement Common (SWECommon) for its XML encodings; and Sensor Markup Language (SensorML) for sensor descriptions. Flexible querying includes the ability to filter data by spatial or temporal properties. Data can be filtered spatially for a rectangular domain or individual platform coordinates. Temporally, the SOS interface allows for retrieval of data before or after a specific date/time as well as over a period of time. Data returned by the IOOS SOS must be encoded in XML; in addition, data may be encoded in many other formats like CSV, TSV, JSON, etc. The XML schema conforms to GML Application Schema conventions, using the emerging Sensor Web Enablement Common Data Model (SWECommon) standard. The resulting “real world effect” of the service is to ensure simple and easy uniform way for timely delivery of the ocean observations information to various data consumers. 4.1.4 Security Generally, IOOS SOS Web server (frontend) does not implement authentication and authorization as it exercises a free public Web access through the Internet. The security protection of the data storage backend is completely at the discretion of each data provider. Despite the public character of the IOOS SOS, the primary security mechanisms can be deployed if required. The UserID/Password credentials may be used for authentication whereas authorization may be ensured by deploying of the role-based access control (RBAC) technology. In case these security mechanisms are implemented, HTTPS needs to be utilized to protect the authentication credentials, since they are presented in plain text in the IOOS SOS request. 4.1.4.1 Roles TBD 13 DRAFT 3/18/2016 4.1.4.2 Access Control Mechanisms Authentication and authorization are the most common mechanisms for web services security development practice. A common mechanism (used in the R&D prototyping effort) relies on X.509 Public Key Infrastructure certificates. It is provided as an example in the table below. Mechanism Authentication Standard Web Services Security: UsernameToken Profile 1.0, OASIS Standard 200401, March 2004. [11] http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile1.0.pdf Authorization ANSI/INCITS 359-2004 Information Technology - Role Based Access Control International Committee for Information Technology Standards: 03-Feb-2004. [12] http://www.cs.purdue.edu/homes/ninghui/readings/AccessControl/ANSI+INCITS+3592004.pdf Internet X.509 Public Key Infrastructure Certificate 4.1.4.3 http://www.ietf.org/rfc/rfc2459.txt Security Policies No common security policies are currently defined for IOOS SOS implementations. 4.1.5 Quality of Service (QoS) For the Milestone 1.0, no QoS parameters are defined for the IOOS SOS. However, it is possible that the QoS will be defined in the future versions of the IOOS SOS. 4.1.6 WSDL Documents A Web Service Description Language (WSDL) document defines a service as a collection of network endpoints operating on messages. The WSDL description specifies the address, allowable communication mechanisms, interface, and message types of a Web service. In short, a WSDL description provides all the information a client needs to use a Web service. For the Milestone 1.0, no WSDL documents have been developed for the IOOS SOS. However, it is possible that WSDL descriptions will be produced for the future versions of the IOOS SOS. 4.2 SERVICE INTERFACES The service interface is a collection of types, messages, operations, and interface descriptions. It provides detail on how the SOS data requests and responses are constructed independent of the messaging transmission technology. The Milestone 1.0 interface is considered a composition of several OGC specifications: in addition to the cornerstone Observations and Measurements standard, elements of the OGC Sensor Web Enablement Suite (SWE) have been identified as useful for the encoding and provision of observational data. While further 14 DRAFT 3/18/2016 SWE specifications may be implemented in the future Milestones, at the present IOOS have used the following: Sensor Observation Service (SOS) as a service for the provision of observational data; SensorML v1.0.0 for the provision of procedural information; and SWE Common Data Model Encoding Standard v1.0 and v2.0 for result encoding options. The interface is comprised of some operations, parameters and attributes, which are considered mandatory by the specifications and others which are not. This information, referred to as a Profile, includes information on specification extensions (operations, parameters and attributes not included in a specification) and exclusions (operations, parameters and attributes that are not implemented). The following sections describe the IOOS SOS Profile for Milestone 1.0 providing additional detail about parts of the OGC specifications supported by the Milestone 1.0 implementation and how they are used. 4.2.1 Conformance to Standards and Conventions 4.2.1.1 OGC SOS Implementation Standards Figure 1 depicts the Unified Modeling Language (UML) diagram for the OGC O&M core model, which specifies the core conformance classes, which are described within the SOS specification. As the SOS 2.0 standard has been approved as an official OGC standard while Milestone 1.0 has already been in development, the use of this new and updated version was postponed to the Milestone 2.0, and at present, the SOS v1.0.0 is used for operations. Core Model Diagram for Observations and Measurements (O&M) 15 DRAFT 3/18/2016 The subsequent sections provide more detail on the service interfaces, including information on data types, messages, operations, and interface descriptions. 4.2.1.2 NetCDF Climate and Forecast Metadata Convention The Climate and Forecast (CF) Conventions introduce the standard ways for naming and description of feature types, data components, dimensions, variables and attributes, coordinate systems definition, axis order, etc. The CF Conventions were originally framed as a standard for data written in netCDF format, with model-generated climate forecast data in mind. However, it turned out to be equally applicable to observational datasets presented in various other formats. The IOOS has adopted the CF 1.6 Conventions for both 52⁰North and ncSOS implementations in order to provide SWE encodings for the feature types that are relevant for the IOOS community. In IOOS SOS implementations, the CF Conventions are used for description of data quantities (such as CF standard names, physical descriptions, code spaces, UoMs, etc.) as well as data location in space and time. 4.2.1.3 IOOS Convention and SOS Templates To facilitate the practical implementation of the OGC SOS, IOOS has started the development of a series of Templates that explicitly define the IOOS SOS operation responses for the CF feature types. Within Milestone 1.0 timeframe, the templates have only been developed for “point”, “timeSeries”, and “timeSeriesProfile” feature types (http://code.google.com/p/ioostech/source/browse/#svn%2Ftrunk%2Ftemplates%2FMilestone1.0); the templates for other feature types are planned for Milestone 2.0. The templates are intended as a mandatory guidance for all developers of IOOS-compliant SOS applications. The Milestone 1.0 templates fully conform to the OGC SOS 1.0.0 Implementation Standard; however, in some “grey areas” where the SOS 1.0.0 is vague and does not provide sufficient guidance, it has been refined with a special IOOS Convention. The Convention contains additional constraints, definitions, requirements and “best practice” sort of recommendations that SOS 1.0.0 lacks; for future transition, the Convention uses SOS 2.0 requirements and definitions wherever they have been considered applicable if they do not contradict the SOS 1.0.0 specification. The provisions of the IOOS Convention are captured in the IOOS SOS Templates, and described further in this document. 4.2.1.4 Coordinate System Axis Order Historically, there was considerable confusion regarding axis order in GML documents, and coordinate reference systems. This confusion started with the introduction of the very first version of theOGC WMS, where axis “x” (longitude) preceeded axis “y” (latitude), while coordinate reference systems defined the opposite order of axis. After some discussion, it was agreed that if CRS is explicitly defined in the service interface or payload, then coordinate values shall be listed in the axis order specified by the referred CRS (OGC 06-135r1 “Specification best practices”). For IOOS SOS implementations, the CRS reference procedure is defined in OGC 06-121r3 “OGC Web Services Common Specification”, and additionally specified by the IOOS Convention. As the EPSG::4326 CRS is required to identify a station horizontal coordinates, the axis order must match the EPSG::4326 definition, i.e. latitude must preceed longitude. The vertical coordinate must always be listed after the horizontal ones, and explicitly follow the definition of the vertical CRS. 4.2.1.5 Namespaces The XML type references in the subsequent sections make use of XML namespace prefixes to fully qualify their namespaces. The map of prefixes to standardized namespaces is: sos – "http://www.opengis.net/sos/1.0" 16 DRAFT 3/18/2016 swe – http://www.opengis.net/swe/1.0.1” (SWE Common v1.0) swe2 – http://www.opengis.net/swe/2.0” (SWE Common v2.0) ows – "http://www.opengis.net/ows/1.1" gml – "http://www.opengis.net/gml" om – "http://www.opengis.net/om/1.0" xlink –”http://www.w3.org/1999/xlink” xsi – "http://www.w3.org/2001/XMLSchema-instance" Note that an IOOS-compliant SOS service shall conform to the following specific patterns for the namespace references in the GetCapabilities and GetObservation response XML headers: In GetCapabilities, and DescribeSensor the <swe:> prefix may be omitted, as only one version of SWE Common is used in these operations (see list above). In GetObservation, the <swe:> and <swe2:> prefixes must present, as both SWE Common v1.0 and v2.0 are used in this operation, and the prefixes refer to different versions of SWE Common (see list above). In both GetCapabilities and GetObservation, the <gml:> prefix may omit reference to a version number, as shown above (because the O&M 1.0 schema already defines GML 3.1.1 as the version used). 4.2.1.6 Notation The OGC Implementation Standards with IOOS Convention define the following use of the upper and lower cases in SOS XML documents, including operation requests: service name must always be in UPPERCASE (i.e. “SOS”); operation names must always be in UpperCamelCase (e.g. GetCapabilities); names of operations like GetCapabilities or DescribeSensor must be in the UpperCamelCase all element and parameter names, titles, gml ids, and attribute values meant as human readable labels must be written in a lowerCamelCase (e.g. “sensorLocation”). Text containing acronyms should treat the acronym component as a normal word for readability (e.g. bprLocation instead of BPRLocation). The IOOS Convention stipulates for the following exceptions: the “network-all” name must always be in lowercase; labels containing the short version of an identifier or definition URI that contains underscores keep their original case (e.g. air_temperature, station_12, etc); identifier values and terms from established vocabularies (e.g. http://mmisw.org/ont/cf/parameter/air_temperature or urn:ioos:station:xoos:the_station). 4.2.2 Operations The OGC SOS interface is based on the OGC Web Service Common specification, thus, it has shares structures and data types of service requests with the other OGC Web Services. In the case of SOS, the operation signature is constrained by the observation schema, as it defines the response model. The SOS v1.0 defines three operational profiles: Core Profile operations (mandatory, within scope of the Milestone 1.0) o GetCapabilities 17 DRAFT 3/18/2016 o DescribeSensor o GetObservation Extended and Transactional Profiles operations (optional, out of scope of the Milestone 1.0) o RegisterSensor o InsertObservation o GetResult o GetFeatureOfInterest o GetFeatureOfInterestTime o DescribeFeatureOfInterest o DescribeObservationType o DescribeResultModel The Core Profile has been identified as relevant to IOOS DMAC; the implementation of the Core Profile operations within the Mileastone 1.0 framework is described hereinafter. The Core Profile operations are based on the stateless HTTP request/response model. A diagram illustrating the basic message sequence is shown below. SOS Server Service Consumer GetCapabilitiesRequest Retrieval of metadata describing supported operations and offerings, which is typically performed at consumer start up. GetCapabilitiesResponse DescribeSensorRequest Retrieval of metadata about a specific station or sensor, which can be repeated whenever consumer needs updated information. Retrieval of a set of SWE-encoded observations based on sensor, spatial, and/or temporal specifications. DescribeSensorResponse GetObservationRequest GetObservationResponse At the start of the interaction, a consumer issues a GetCapabilities request to a server. Returned information includes metadata describing supported interface versions, supported formats, functional extensions, available offerings, etc. The supported SOS versions and features are common IOOS-wide, minimizing differences between deployed server instances based on 52⁰ North and ncSOS solutions, although the available observation data for a particular server will vary from instance to instance. Following a successful GetCapabilties operation, a consumer optionally issues one or more DescribeSensor requests to get more information about stations/platforms and sensors. A consumer than uses the information obtained from GetCapabilities and DescribeSensor responses for a GetObservation request that 18 DRAFT 3/18/2016 specifies an observed property, offering, an optional spatial and/or temporal extent, and other criteria. The server retrieves all matching data and returns it to the consumer in the GetCoverage response. Erroneous requests detected by the server result in a response containing an XML-based exception message rather than an SOS response. Examples of the consumer requests and SOS server responses are shown in subsequent sections. Unless something different is specified, the encoding samples have been taken from the set of IOOS SOS Milestone 1.0 templates. Some of the subsequent sections also contain parts of responses received from an AOOS Test SOS server. That server implementation is considered as reference for the purpose of the IOOS SOS Milestone 1.0 implementation, and as such, its responses contain the same mandatory components as as the Templates. However, keep in mind that the documents produced by the AOOS Test SOS Server may also include some components that are optional from the Milestone 1.0 standpoint. 4.2.2.1 GetCapabilities GetCapabilities operation provides the interface for any client to access metadata about a specific service, which in this case is SOS. This operation allows clients to retrieve service metadata about a specific service instance, including metadata about the tightly-coupled data served. In addition to more generic capabilities response elements such as filter options, the SOS GetCapabilities returns a list of so called Offerings, which are groupings of available observations described by their feature of interest, procedure, observed property, temporal coverage and the like. This allows the user application to clearly identify the types and quality of data that can be requested from this service. Please note, that SOS in version 1.0 does not restrict creation of observation offerings. On the other hand, SOS 2.0 is more specific and defines that each observation offering is limited to be associated with exactly one procedure, which can be a network, station, or sensor. The U.S. IOOS has made a decision to imply that limitation starting at Milestone 1.0 with SOS v1.0; this not only solves the issue of the SOS 1.0 with ambiguous groupings of observations to offerings but also ensures the continuity of the Milestones. 4.2.2.1.1 GetCapabilities Request GetCapabilities request may be sent to the server as HTTP/GET or HTTP/POST. While HTTP/POST request sends an XML document to the server, HTTP/GET request passes parameters to the server in the HTTP URL with a number of key-value pairs (KVP) of input parameters. A request to perform GetCapabilities should follow the structure as described in the Figure and Table below. 19 DRAFT 3/18/2016 Input parameters of the GetCapabilities request are explained in the following table: Input Name Cardinality service request version 1…1 1…1 0…1 for 52N 1…1 for ncSOS acceptVersions 1…1 for 52N 0…1 for ncSOS sections 0…1 acceptFormats 0…1 Description Service name (fixed value “SOS”) Operation name A non-standard parameter indicating the SOS version. For unknown reason is required for ncSOS with the value “1.0.0”. Not used in the 52North implementation. A list of specification versions accepted by client, with preferred versions listed first. Not implemented in the ncSOS server. Required for 52North SOS with the value “1.0.0”; if omitted, the server returns by default the SOS v2.0 GetCapabilities document. When specified, identifies the sections of the GetCapabilities response to be returned to the client. One or more values in a comma-separated list may be specified. If omitted, all sections are returned. Valid values are: - ServiceIdentification - ServiceProvider - OperationsMetadata - Filter_Capabilities - Contents - All A list of zero or more response formats desired by client, with preferred formats listed first. Currently, IOOS Convention supports just one output format: – text/xml;subtype="sensorML/1.0.1/profiles/ioos_sos/1.0" – Note, that although the GetCapabilities operation may support all parameters, just three of them (service, request, and version/acceptVersions) are required by the IOOS Convention. 20 DRAFT 3/18/2016 The following HTTP/GET and HTTP/POST request samples, when issued to the SOS server, will result in all available metadata for SOS v1.0.0 being returned: HTTP/GET to 52North implementation http://SERVERNAME:PORT/SOS_WEBAPP_NAME/sos?SERVICE=SOS&REQUEST=GetCapabilities or http://SERVERNAME:PORT/SOS_WEBAPP_NAME/sos?service=SOS&request=GetCapabilities&Accept Versions=1.0.0 HTTP/GET to ncSOS implementation http://SERVERNAME:PORT/SOS_WEBAPP_NAME/sos?service=SOS&request=GetCapabilities&ver sion=1.0.0 Note, that for the GET request to an ncSOS version of the IOOS SOS, the parameter “version=1.0.0” is required as opposed to a 52North implementation. If that parameter is missing, the ncSOS will return an exception report instead of the GetCapability document. In fact, the enforcement of the “version” instead of “acceptVersions” has been done in violation of the OGC Web Services Common Specification, and as such will be most likely fixed in the future ncSOS releases. The current release of the ncSOS will also accept the request with all parameters missing, i.e. the truncated request http://SERVERNAME:PORT/SOS_WEBAPP_NAME/sos will return the combined GetCapabilities document for both SOS v1.0.0 and v2.0. That ncSOS behavior is not in line with the SOS standard, and is not guaranteed in future releases; therefore, the full version of GET request is strongly recommended. HTTP/POST <sos:GetCapabilities xmlns="http://www.opengis.net/sos/1.0" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosGetCapabilities.xsd" service="SOS" updateSequence=""> <ows:AcceptVersions> <ows:Version>1.0.0</ows:Version> </ows:AcceptVersions> <ows:Sections> <ows:Value>All</ows:Value> </ows:Sections> </sos:GetCapabilities> 4.2.2.1.2 GetCapabilities Response The response to a GetCapabilities request is an XML encoded document that conforms to the SOS 1.0.0 Implementation Specification [OGC 06-009r6], and illustrates the characteristics of the SOS system by providing the whole information about coordinate reference system (CRS), spatial or temporal filtering and 21 DRAFT 3/18/2016 other information about sensors, feature of interest, and response format. The OGC specification is constrained by specific IOOS conventions that on one hand prescribe a certain way of use for some optional components, and on the other hand – facilitate the future acceptance of the SOS 2.0. At any rate, the IOOS conventions do not violate OGC specification’s requirements. The example below shows all five sections depicted in the figure above, and assumes that a GetCapabilities request with no specified subsections was issued, resulting in a response containing all SOS Capabilities metadata: ows:ServiceIdentification ows:ServiceProvider ows:OperationsMetadata sos:Filter_Capabilities sos:Contents The sections are described in more details later. 22 DRAFT 3/18/2016 <sos:Capabilities xmlns:sos="http://www.opengis.net/sos/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ows="http://www.opengis.net/ows/1.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosAll.xsd"> <ows:ServiceIdentification>...</ows:ServiceIdentification> <ows:ServiceProvider>...</ows:ServiceProvider> <ows:OperationsMetadata>...</ows:OperationsMetadata> <sos:Filter_Capabilities>…</sos:Filter_Capabilities> <sos:Contents>...</sos:Contents> </sos:Capabilities> 4.2.2.1.2.1 ServiceIdentification This section contains metadata about this specific server, including the title, abstract, keywords, service type, version, fees, and access constraints if any for using this server. No IOOS-specific guidelines and conventions are applicable to this section; it is fully defined by the SOS 1.0.0 standard. <ows:ServiceIdentification> <ows:Title>TITLE</ows:Title> <ows:Abstract>ABSTRACT</ows:Abstract> <ows:Keywords> <ows:Keyword>KEYWORD 1</ows:Keyword> <ows:Keyword>KEYWORD 2</ows:Keyword> </ows:Keywords> <ows:ServiceType codeSpace="http://opengeospatial.net">OGC:SOS</ows:ServiceType> <ows:ServiceTypeVersion>1.0.0</ows:ServiceTypeVersion> <ows:Fees>NONE</ows:Fees> <ows:AccessConstraints>NONE</ows:AccessConstraints> </ows:ServiceIdentification> 4.2.2.1.2.2 ServiceProvider This section contains metadata about the organization operating this server, including service provider name, site, address, contact information, etc. Similar to the previous section described above, this section does not require following any IOOS-specific conventions; it is fully defined by the SOS 1.0.0 standard. 23 DRAFT 3/18/2016 <ows:ServiceProvider> <ows:ProviderName>IOOS (OR ANY OTHER PROVIDER)</ows:ProviderName> <ows:ProviderSite xlink:href="http://www.ioos.noaa.gov/"/> <ows:ServiceContact> <ows:IndividualName>TBA</ows:IndividualName> <ows:PositionName>TBA</ows:PositionName> <ows:ContactInfo> <ows:Phone> <ows:Voice>1-301-427-2420</ows:Voice> </ows:Phone> <ows:Address> <ows:DeliveryPoint>1100 Wayne Ave., Suite 1225</ows:DeliveryPoint> <ows:City>Silver Spring</ows:City> <ows:AdministrativeArea>MD</ows:AdministrativeArea> <ows:PostalCode>20910</ows:PostalCode> <ows:Country>USA</ows:Country> <ows:ElectronicMailAddress>noaa.ioos.webmaster@noaa.gov</ows:ElectronicMailAddress> </ows:Address> </ows:ContactInfo> </ows:ServiceContact> </ows:ServiceProvider> 4.2.2.1.2.3 OperationsMetadata This section contains metadata about the operations specified by this service and implemented by this server, including the URLs, parameters for operation requests. A corresponding section of the IOOS Milestone 1.0 GetCapabilities template is presented below; the template contains just the bare minimum of the required metadata that describes the server operations capability. The IOOS Convention requires an indication of the current template version; this information is provided in the <ows:ExtendedCapabilities>/<gml:metaDataProperty xlink:title="ioosTemplateVersion"> element. In addition to the template version, the IOOS Convention recommends to provide an indication of the current software version in the <ows:ExtendedCapabilities>/<gml:metaDataProperty xlink:title="softwareVersion"> element. <ows:OperationsMetadata> <ows:Operation name="GetCapabilities"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="SOS_SERVER"/> <ows:Post xlink:href="SOS_SERVER"/> </ows:HTTP> </ows:DCP> <ows:Parameter name="Sections"> <ows:AllowedValues> <ows:Value>ServiceIdentification</ows:Value> <ows:Value>ServiceProvider</ows:Value> <ows:Value>OperationsMetadata</ows:Value> <ows:Value>Contents</ows:Value> <ows:Value>All</ows:Value> </ows:AllowedValues> </ows:Parameter> </ows:Operation> <ows:Operation name="GetObservation"> <ows:DCP> 24 DRAFT 3/18/2016 <ows:HTTP> <ows:Get xlink:href="SOS_SERVER"/> <ows:Post xlink:href="SOS_SERVER"/> </ows:HTTP> </ows:DCP> <ows:Parameter name="observedProperty"> <ows:AllowedValues> <ows:Value>VALUE</ows:Value> <ows:Value>COMPOSITE_VALUE</ows:Value> </ows:AllowedValues> </ows:Parameter> </ows:Operation> <ows:Operation name="DescribeSensor"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="SOS_SERVER"/> <ows:Post xlink:href="SOS_SERVER"/> </ows:HTTP> </ows:DCP> <ows:Parameter name="outputFormat"> <ows:AllowedValues> <ows:Value>text/xml;subtype="sensorML/1.0.1/profiles/ioos_sos/1.0"</ows:Value> </ows:AllowedValues> </ows:Parameter> </ows:Operation> <ows:Parameter name="service"> <ows:AllowedValues> <ows:Value>SOS</ows:Value> </ows:AllowedValues> </ows:Parameter> <ows:Parameter name="version"> <ows:AllowedValues> <ows:Value>1.0.0</ows:Value> </ows:AllowedValues> </ows:Parameter> <ows:ExtendedCapabilities> <gml:metaDataProperty xlink:title="ioosTemplateVersion" xlink:href="http://code.google.com/p/ioostech/source/browse/#svn%2Ftrunk%2Ftemplates%2FMilestone1.0"> <gml:version>1.0</gml:version> </gml:metaDataProperty> <gml:metaDataProperty xlink:title="softwareVersion" xlink:href="http://someURI"> <gml:version>0.9.4.5</gml:version> </gml:metaDataProperty> </ows:ExtendedCapabilities> </ows:OperationsMetadata> The sample below is a real OperationsMetadata part of the AOOS test SOS server GetCapabilities response. The sample is presented just for reference, and may change at any time. The sampled document is much more detailed than the template above as it reports the metadata for both mandatory and optional operations that server is capable of, and list all allowed values for the request parameters, response output format encodings, etc. <ows:OperationsMetadata> <ows:Operation name="DescribeSensor"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/kvp?"> <ows:Constraint name="encoding"> 25 DRAFT 3/18/2016 <ows:AllowedValues> <ows:Value>kvp</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Get> <ows:Post xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/soap"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>soap</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Post> <ows:Post xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/pox"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>pox</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Post> </ows:HTTP> </ows:DCP> <ows:Parameter name="outputFormat"> <ows:AllowedValues> <ows:Value>http://www.opengis.net/sensorML/1.0.1</ows:Value> <ows:Value>text/xml;subtype="sensorML/1.0.1"</ows:Value> <ows:Value>text/xml;subtype="sensorML/1.0.1/profiles/ioos_sos/1.0"</ows:Value> </ows:AllowedValues> </ows:Parameter> </ows:Operation> <ows:Operation name="GetCapabilities"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/kvp?"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>kvp</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Get> <ows:Post xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/soap"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>soap</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Post> <ows:Post xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/pox"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>pox</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Post> </ows:HTTP> </ows:DCP> <ows:Parameter name="Sections"> <ows:AllowedValues> <ows:Value>All</ows:Value> <ows:Value>Contents</ows:Value> <ows:Value>Filter_Capabilities</ows:Value> <ows:Value>OperationsMetadata</ows:Value> 26 DRAFT 3/18/2016 <ows:Value>ServiceIdentification</ows:Value> <ows:Value>ServiceProvider</ows:Value> </ows:AllowedValues> </ows:Parameter> </ows:Operation> <ows:Operation name="GetFeatureOfInterest"> <ows:DCP> <ows:HTTP> <ows:Post xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/soap"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>soap</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Post> <ows:Post xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/pox"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>pox</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Post> </ows:HTTP> </ows:DCP> </ows:Operation> <ows:Operation name="GetObservation"> <ows:DCP> <ows:HTTP> <ows:Get xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/kvp?"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>kvp</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Get> <ows:Post xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/soap"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>soap</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Post> <ows:Post xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/pox"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>pox</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Post> </ows:HTTP> </ows:DCP> </ows:Operation> <ows:Operation name="GetObservationById"> <ows:DCP> <ows:HTTP> <ows:Post xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/soap"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>soap</ows:Value> </ows:AllowedValues> </ows:Constraint> 27 DRAFT 3/18/2016 </ows:Post> <ows:Post xlink:href="http://ioossos.axiomalaska.com/52n-sos-ioos/sos/pox"> <ows:Constraint name="encoding"> <ows:AllowedValues> <ows:Value>pox</ows:Value> </ows:AllowedValues> </ows:Constraint> </ows:Post> </ows:HTTP> </ows:DCP> </ows:Operation> <ows:Parameter name="service"> <ows:AllowedValues> <ows:Value>SOS</ows:Value> </ows:AllowedValues> </ows:Parameter> <ows:Parameter name="version"> <ows:AllowedValues> <ows:Value>1.0.0</ows:Value> <ows:Value>2.0.0</ows:Value> </ows:AllowedValues> </ows:Parameter> <ows:ExtendedCapabilities> <gml:metaDataProperty xlink:title="ioosTemplateVersion" xlink:href="http://code.google.com/p/ioostech/source/browse/#svn%2Ftrunk%2Ftemplates%2FMilestone1.0"> <gml:version>1.0</gml:version> </gml:metaDataProperty> </ows:ExtendedCapabilities> </ows:OperationsMetadata> 4.2.2.1.2.4 Filter_Capabilities This section contains metadata about the sub-setting activities (spatial, temporal, scalar, etc.) that are supported by an SOS server. Since filtering has been out of scope of the Milestone 1.0, the IOOS Convention does not require this section in a GetCapabilities response, and IOOS SOS Milestone 1.0 GetCapabilities template does not prescribe any specific way of implementation; therefore, if SOS developers decide to implement filtering capabilities nevertheless, they should just follow the SOS 1.0.0 Implementation Standard. Just for reference, below is the fragment of the AOOS test SOS server’s GetCapabilities response, which illustrates the Filter_Capabilities encoding in the GetCapabilities document. <sos:Filter_Capabilities> <ogc:Spatial_Capabilities> <ogc:GeometryOperands> <ogc:GeometryOperand>gml:Envelope</ogc:GeometryOperand> <ogc:GeometryOperand>gml:LineString</ogc:GeometryOperand> <ogc:GeometryOperand>gml:Point</ogc:GeometryOperand> <ogc:GeometryOperand>gml:Polygon</ogc:GeometryOperand> </ogc:GeometryOperands> <ogc:SpatialOperators> <ogc:SpatialOperator name="Overlaps"> <ogc:GeometryOperands> <ogc:GeometryOperand>gml:LineString</ogc:GeometryOperand> <ogc:GeometryOperand>gml:Point</ogc:GeometryOperand> <ogc:GeometryOperand>gml:Polygon</ogc:GeometryOperand> </ogc:GeometryOperands> </ogc:SpatialOperator> 28 DRAFT 3/18/2016 <ogc:SpatialOperator name="Intersects"> <ogc:GeometryOperands> <ogc:GeometryOperand>gml:LineString</ogc:GeometryOperand> <ogc:GeometryOperand>gml:Point</ogc:GeometryOperand> <ogc:GeometryOperand>gml:Polygon</ogc:GeometryOperand> </ogc:GeometryOperands> </ogc:SpatialOperator> <ogc:SpatialOperator name="Contains"> <ogc:GeometryOperands> <ogc:GeometryOperand>gml:LineString</ogc:GeometryOperand> <ogc:GeometryOperand>gml:Point</ogc:GeometryOperand> <ogc:GeometryOperand>gml:Polygon</ogc:GeometryOperand> </ogc:GeometryOperands> </ogc:SpatialOperator> <ogc:SpatialOperator name="BBOX"> <ogc:GeometryOperands> <ogc:GeometryOperand>gml:Envelope</ogc:GeometryOperand> </ogc:GeometryOperands> </ogc:SpatialOperator> </ogc:SpatialOperators> </ogc:Spatial_Capabilities> <ogc:Temporal_Capabilities> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> <ogc:TemporalOperators> <ogc:TemporalOperator name="TM_Before"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_After"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_Begins"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_Ends"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_EndedBy"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_BegunBy"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> 29 DRAFT 3/18/2016 </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_During"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_Equals"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_Contains"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_Overlaps"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_Meets"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_MetBy"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> <ogc:TemporalOperator name="TM_OverlappedBy"> <ogc:TemporalOperands> <ogc:TemporalOperand>gml:TimeInstant</ogc:TemporalOperand> <ogc:TemporalOperand>gml:TimePeriod</ogc:TemporalOperand> </ogc:TemporalOperands> </ogc:TemporalOperator> </ogc:TemporalOperators> </ogc:Temporal_Capabilities> <ogc:Scalar_Capabilities> <ogc:ComparisonOperators> <ogc:ComparisonOperator>EqualTo</ogc:ComparisonOperator> <ogc:ComparisonOperator>NotEqualTo</ogc:ComparisonOperator> <ogc:ComparisonOperator>LessThan</ogc:ComparisonOperator> <ogc:ComparisonOperator>GreaterThan</ogc:ComparisonOperator> <ogc:ComparisonOperator>LessThanEqualTo</ogc:ComparisonOperator> <ogc:ComparisonOperator>GreaterThanEqualTo</ogc:ComparisonOperator> <ogc:ComparisonOperator>Like</ogc:ComparisonOperator> <ogc:ComparisonOperator>Between</ogc:ComparisonOperator> </ogc:ComparisonOperators> </ogc:Scalar_Capabilities> <ogc:Id_Capabilities> <ogc:FID/> <ogc:EID/> 30 DRAFT 3/18/2016 </ogc:Id_Capabilities> </sos:Filter_Capabilities> 4.2.2.1.2.5 Contents This section contains the list of all of the observation offerings available from the service, specifically the network offerings and offerings for all affiliated stations/platforms. Each of the <sos:ObservationOffering> elements describes a collection of related sensor system observations. However, in order to restrain the response document size and mitigate scalability problems, the IOOS Convention requires that sensor offerings must not be included in a platform offering description, i.e none of the <sos:ObservationOffering> elements may include a sensor procedure. In order to get a detailed description of the sensors installed on the platform, a DescribeSensor operation should be used. The definition of some metadata elements that appear in the Contents section is further constrained by IOOS Convention. The recommended way of use of these elements along with related IOOS Convention’s requirements and constraints are explained in details below. Other metadata elements that are not subjects of the IOOS Convention, and should be implemented strictly in accord with the relevant OGC Implementation Standards, are not discussed in this document. IOOS Convention’s GetCapabilities General Constraints The IOOS conventions impose certain general constraints on the Content section: Advertizing of the NetworkALL group of platforms is required. Advertizing of logical sub-groups of the Network-ALL group (e.g. by provider, region, measurement type, etc.) is recommended. Advertizing of the individual platforms is not recommended; instead, it is recommended to use a separate DescribeSensor document for that rather than list the individual platforms as offerings. IOOS Convention’s Requirements and Metadata Elements affected The IOOS Convention provides additional qualification to the descriptions of some of the key metadata elements that are in use in the Content section. Note that by no means that refinement steps over the boundaries that are set by the OGC standards, i.e. all elements still conform to the relevant specifications. Input Name gml:id Cardinality 1…1 Description Each observation offering must have a unique ID. It is recommended that “gml:id” values should start with 'station-' for platforms and 'network-' for networks of platforms, and be augmented with the label from the station identifier as defined in IOOS Conventions for Observing Asset Identifiers. Example: station-21401 gml:name 1…1 The IOOS Convention currently requires the “gml:name” value to be a URN that conforms to the IOOS Conventions for Observing Asset Identifiers. Example: urn:ioos:station:wmo:21401 gml:description 0…1 It is recommended that any human-readable name or description of the network or station assigned by a data provider should be parked in this element. Example: 250NM Southeast of Iturup Island. gml:srsName 0…1 This element defines a Coordinate Reference System (CRS) used for observation offering. If the element is provided, the value must be the European Petroleum Survey Group (EPSG) CRS 4326 (WGS84). If no <gml:srsName> is provided, the CRS must be specified in the “srsName” attribute 31 DRAFT 3/18/2016 of the <gml:boundedBy/gml:Envelope> element; this way was recommended as a preferred method for CRS specification. Example: EPSG::4326” srsName 0…1 This attribute define a CRS as a part of the <gml:boundedBy/gml:Envelope> element for a single bounding box. If no “srsName” attribute is provided, the CRS must be specified in the <gml:srsName> element. However, the IOOS Convention recommends to use the “srsName” attribute instead of the <gml:srsName> element. If the attribute is provided, the value must be in a form of OGC-defined URL for the European Petroleum Survey Group (EPSG) CRS 4326 (WGS84). Example: srsName=http://www.opengis.net/def/crs/EPSG/0/4326 sos:time 1…1 Advertizes the overall temporal boundaries for the observationOffering data availability. Time period <beginPosition> and <endPosition> limiters allow a use of fixed values in ISO 8601 format (2009-05-23T00:00:00.000Z)as well as evaluated “indeterminatePosition” attribute with the value ‘now’ if the end time has not yet been. Examples: <sos:time> <gml:TimePeriod> <gml:beginPosition>2010-11-15T18:15:00Z</gml:beginPosition> <gml:endPosition> 2010-11-25T23:15:00Z</gml:endPosition > </gml:TimePeriod> </sos:time> <sos:time> <gml:TimePeriod> <gml:beginPosition>2010-11-15T18:15:00Z</gml:beginPosition> <gml:endPosition indeterminatePosition="now"/> </gml:TimePeriod> </sos:time> Note: The overall start and end times do not indicate whether data gaps exist. If an offering comprises multiple sensors, each with different start or end times (for example, a new sensor was added at a later date), the start and end times indicate the overall period during which at least some data are available. sos:procedure 1…1 This element contains the official IOOS identifier for the platform or network in a form of URN that conforms to the IOOS Conventions for Observing Asset Identifiers. Only one procedure element for a single offering is currently allowed (it is done for future compatibility – although SOS 1.0.0 does not limit that number, the SOS 2.0 only allows a single procedure per offering). Examples: <sos:procedure xlink:href="urn:ioos:network:AUTHORITY:all"/> <sos:procedure xlink:href=" urn:ioos:station:wmo:21401"/> sos:observedProperty 1…* This element advertizes one or more quantities observed by a specific offering. The IOOS convention only requires support of all fully qualified <sos:observedProperty> elements that are advertized in the GetCapabilities document(support of unqualified elements is optional). The element’s value must be a URL corresponding to a Climate and Forecast (CF) Standard Name of the record in one of the the IOOS Vocabularies that are currently hosted by the Marine Metadata Interoperability (MMI) project. It is also required to advertize a vector variable (i.e wind, current, or wave) by reference to it as a composite phenomenon that is defined in the IOOS Parameter Vocabulary (e.g.: http://mmisw.org/ont/ioos/parameter/wave). 32 DRAFT 3/18/2016 The value of the advertized observedProperty identifier must be used in GetObservation requests to obtain the actual data. Example: observedProperty xlink:href=http://mmisw.org/ont/cf/parameter/VALUE observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/COMPOSITE_VALUE" sos:responseMode 0…* This element indicates what modes of response are supported for this offering. The following values are allowed: inline out-of-band attached resultTemplate TBD: The value of external to the observation element (out-of-band) is recommended, if for any reason (sensistivity, legacy formats, etc.) it is desirable to return in GetObservation response a reference (URL) to the data instead of data itself. The reference may also point to the file with the instruction on how to get the real data offline. The application of the IOOS Convention to the SOS 1.0.0 Implementation Standard is illustrated by a sample of the Content section of the IOOS Milestone 1.0 GetCapabilities template below; the template shows just the bare minimum of the required metadata, a real server may advertize more parameters and provide more details. <sos:Contents> <sos:ObservationOfferingList> <sos:ObservationOffering gml:id="network-all"> <gml:description>All stations</gml:description> <gml:name>urn:ioos:network:AUTHORITY:all</gml:name> <gml:srsName>EPSG:4326</gml:srsName> <gml:boundedBy> <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:lowerCorner>-90 -180</gml:lowerCorner> <gml:upperCorner>90 180</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <sos:time> <gml:TimePeriod> <gml:beginPosition>BEGINNING</gml:beginPosition> <gml:endPosition indeterminatePosition="now"/> </gml:TimePeriod> 33 DRAFT 3/18/2016 </sos:time> <sos:procedure xlink:href="urn:ioos:network:AUTHORITY:all"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/VALUE"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/COMPOSITE_VALUE"/> <sos:featureOfInterest xlink:href="FEATURE"/> <sos:responseFormat>text/xml;schema="om/1.0.0/profiles/ioos_sos/1.0"</sos:responseFormat> <sos:resultModel>om:ObservationCollection</sos:resultModel> <sos:responseMode>inline</sos:responseMode> </sos:ObservationOffering> <sos:ObservationOffering gml:id="network-favorites"> <gml:description>All stations</gml:description> <gml:name>urn:ioos:network:AUTHORITY:favorites</gml:name> <gml:srsName>EPSG:4326</gml:srsName> <gml:boundedBy> <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:lowerCorner>30 -130</gml:lowerCorner> <gml:upperCorner>45 -110</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <sos:time> <gml:TimePeriod> <gml:beginPosition>BEGINNING</gml:beginPosition> <gml:endPosition indeterminatePosition="now"/> </gml:TimePeriod> </sos:time> <sos:procedure xlink:href="urn:ioos:network:AUTHORITY:favorites"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/VALUE"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/COMPOSITE_VALUE"/> <sos:featureOfInterest xlink:href="FEATURE"/> <sos:responseFormat>text/xml;schema="om/1.0.0/profiles/ioos_sos/1.0"</sos:responseFormat> <sos:resultModel>om:ObservationCollection</sos:resultModel> <sos:responseMode>inline</sos:responseMode> </sos:ObservationOffering> </sos:ObservationOfferingList> </sos:Contents> More details are provided in a sample below, which presents a Contents part of the AOOS test SOS server GetCapabilities response. The sample is presented just for reference, and may change at any time. The sampled document is much more detailed than the template above as it advertizes more offerings, observed properties, response output format encodings, etc. <sos:Contents> <sos:ObservationOfferingList> <sos:ObservationOffering gml:id="urn_ioos_network_test_all"> <gml:name>urn:ioos:network:test:all</gml:name> <gml:boundedBy> <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:lowerCorner>60.683 -151.398</gml:lowerCorner> <gml:upperCorner>70.4 -146.88</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <sos:time> <gml:TimePeriod xsi:type="gml:TimePeriodType"> <gml:beginPosition>2009-05-23T00:00:00.000Z</gml:beginPosition> <gml:endPosition>2012-08-23T08:00:00.000Z</gml:endPosition> </gml:TimePeriod> </sos:time> <sos:procedure xlink:href="urn:ioos:network:test:all"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/air_temperature"/> 34 DRAFT 3/18/2016 <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/direction_of_sea_water_velocity"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_practical_salinity"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_speed"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/wind_speed"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef-10m-15m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef-15m-20m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef-5m-10m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:nikiski-10m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:nikiski-15m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:nikiski-5m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:prudhoe"/> <sos:responseFormat>application/zip</sos:responseFormat> <sos:responseFormat>text/xml;subtype="om/1.0.0"</sos:responseFormat> <sos:responseFormat>text/xml;subtype="om/1.0.0/profiles/ioos_sos/1.0"</sos:responseFormat> <sos:responseMode>inline</sos:responseMode> <sos:responseMode>resultTemplate</sos:responseMode> </sos:ObservationOffering> <sos:ObservationOffering gml:id="urn_ioos_network_test_all-air-temperature"> <gml:name>urn:ioos:network:test:all-air-temperature</gml:name> <gml:boundedBy> <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:lowerCorner>60.84 -148.527</gml:lowerCorner> <gml:upperCorner>70.4 -146.88</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <sos:time> <gml:TimePeriod xsi:type="gml:TimePeriodType"> <gml:beginPosition>2009-05-23T00:00:00.000Z</gml:beginPosition> <gml:endPosition>2012-08-23T06:42:00.000Z</gml:endPosition> </gml:TimePeriod> </sos:time> <sos:procedure xlink:href="urn:ioos:network:test:all-air-temperature"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/air_temperature"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/direction_of_sea_water_velocity"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_speed"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/wind_speed"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef-10m-15m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef-15m-20m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef-5m-10m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:prudhoe"/> <sos:responseFormat>application/zip</sos:responseFormat> <sos:responseFormat>text/xml;subtype="om/1.0.0"</sos:responseFormat> <sos:responseFormat>text/xml;subtype="om/1.0.0/profiles/ioos_sos/1.0"</sos:responseFormat> <sos:responseMode>inline</sos:responseMode> <sos:responseMode>resultTemplate</sos:responseMode> </sos:ObservationOffering> <sos:ObservationOffering gml:id="urn_ioos_station_test_blighreef"> <gml:name>urn:ioos:station:test:blighreef</gml:name> <gml:boundedBy> <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:lowerCorner>60.84 -146.88</gml:lowerCorner> <gml:upperCorner>60.84 -146.88</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <sos:time> <gml:TimePeriod xsi:type="gml:TimePeriodType"> <gml:beginPosition>2009-05-23T00:00:00.000Z</gml:beginPosition> 35 DRAFT 3/18/2016 <gml:endPosition>2012-08-23T06:30:00.000Z</gml:endPosition> </gml:TimePeriod> </sos:time> <sos:procedure xlink:href="urn:ioos:station:test:blighreef"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/air_temperature"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/direction_of_sea_water_velocity"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_speed"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/wind_speed"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef-10m-15m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef-15m-20m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:blighreef-5m-10m"/> <sos:responseFormat>application/zip</sos:responseFormat> <sos:responseFormat>text/xml;subtype="om/1.0.0"</sos:responseFormat> <sos:responseFormat>text/xml;subtype="om/1.0.0/profiles/ioos_sos/1.0"</sos:responseFormat> <sos:responseMode>inline</sos:responseMode> <sos:responseMode>resultTemplate</sos:responseMode> </sos:ObservationOffering> <sos:ObservationOffering gml:id="urn_ioos_station_test_nikiski"> <gml:name>urn:ioos:station:test:nikiski</gml:name> <gml:boundedBy> <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:lowerCorner>60.683 -151.398</gml:lowerCorner> <gml:upperCorner>60.683 -151.398</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <sos:time> <gml:TimePeriod xsi:type="gml:TimePeriodType"> <gml:beginPosition>2012-08-23T06:00:00.000Z</gml:beginPosition> <gml:endPosition>2012-08-23T08:00:00.000Z</gml:endPosition> </gml:TimePeriod> </sos:time> <sos:procedure xlink:href="urn:ioos:station:test:nikiski"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_practical_salinity"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:nikiski-10m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:nikiski-15m"/> <sos:featureOfInterest xlink:href="urn:ioos:station:test:nikiski-5m"/> <sos:responseFormat>application/zip</sos:responseFormat> <sos:responseFormat>text/xml;subtype="om/1.0.0"</sos:responseFormat> <sos:responseFormat>text/xml;subtype="om/1.0.0/profiles/ioos_sos/1.0"</sos:responseFormat> <sos:responseMode>inline</sos:responseMode> <sos:responseMode>resultTemplate</sos:responseMode> </sos:ObservationOffering> <sos:ObservationOffering gml:id="urn_ioos_station_test_prudhoe"> <gml:name>urn:ioos:station:test:prudhoe</gml:name> <gml:boundedBy> <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:lowerCorner>70.4 -148.527</gml:lowerCorner> <gml:upperCorner>70.4 -148.527</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <sos:time> <gml:TimePeriod xsi:type="gml:TimePeriodType"> <gml:beginPosition>2012-08-23T06:00:00.000Z</gml:beginPosition> <gml:endPosition>2012-08-23T06:42:00.000Z</gml:endPosition> </gml:TimePeriod> </sos:time> <sos:procedure xlink:href="urn:ioos:station:test:prudhoe"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/air_temperature"/> <sos:observedProperty xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/> 36 DRAFT 3/18/2016 <sos:featureOfInterest xlink:href="urn:ioos:station:test:prudhoe"/> <sos:responseFormat>application/zip</sos:responseFormat> <sos:responseFormat>text/xml;subtype="om/1.0.0"</sos:responseFormat> <sos:responseFormat>text/xml;subtype="om/1.0.0/profiles/ioos_sos/1.0"</sos:responseFormat> <sos:responseMode>inline</sos:responseMode> <sos:responseMode>resultTemplate</sos:responseMode> </sos:ObservationOffering> </sos:ObservationOfferingList> </sos:Contents> 4.2.2.2 DescribeSensor DescribeSensor is a simple core SOS operation that returns an XML Document associated with one or more sensors, platforms or networks. It provides metadata about sensors and the observation collected by these sensors. All the information of sensor characteristics is encoded into the SensorML standard. With some sophisticated sensors or sensor-reach platforms and networks, the metadata may be quite voluminous. Although GetCapabilities operation could provide a list of sensors and some sensor-related metadata, it is meant for delivery of only high-level information about the observable properties, locations, contact information, etc. On the contrary, DescribeSensor operation is designed to request detailed sensor metadata, and supports retrieval of the highest level of detail about the platforms and sensors associated with an SOS. The sensor characteristics can include lists and definitions of observables supported by the sensor [OGC 06-009r6]. The following sections illustrate DescribeSensor HTTP/GET and HTTP/POST requests, provides the list of the request’s parameters and description for the DescribeSensor operation response. 4.2.2.2.1 DescribeSensor Request DescribeSensor request may be sent to the server as HTTP/GET or HTTP/POST. While HTTP/POST request sends an XML document to the server, HTTP/GET request passes parameters to the server in the HTTP URL with a number of key-value pairs (KVP) of input parameters. A request to perform DescribeSensor operation should follow the structure as described in this section. The UML diagram of the DescribeSensor request is presented in the figure below. The input parameters of the DescribeSensor request are explained in the following table: Input Name service version Cardinality 1…1 1…1 Description Service name (always SOS) Service version (always 1.0.0 for Milestone 1.0) 37 DRAFT 3/18/2016 request outputFormat 1…1 1…1 procedure 1…1 Operation name (always DescribeSensor) The desired output format of the DescribeSensor operation; for Milestone 1.0 must always be considered as text/xml;subtype="sensorML/1.0.1/profiles/ioos_sos/1.0". Defines the sensor, platform or network for which the description is to be returned. The type is “anyURI”, and it must match the value of the “xlink:href=” attribute in an <sos:procedure> element advertized in GetCapabilities response . Examples: Network urn:ioos:network:test:all Station/Platform urn:ioos:station:test:station_name Sensor urn:ioos:sensor:test:station_name:sensor_name The following examples illustrate HTTP/GET and HTTP/POST DescribeSensor requests. Note that in HTTP/GET (KVP) request, the parameter names are case insensitive. The following example shows equivalent terms for a parameter “outputFormat”: outputFormat, outputformat, OUTPUTFORMAT, or OUTPUTfORMAT. As a guideline, it is suggested that lowercase names be used for ease-of-reading and consistency. On the contrary, it is recommended to use the UpperCamelCase for the parameter values like GetCapabilities or DescribeSensor, as they are case sensitive: HTTP/GET: http://SERVERNAME:PORT/SOS_WEBAPP_NAME/sos?request=DescribeSensor&service=SOS&version=1.0.0&procedure=[anyURI] &outputformat=text/xml;subtype="sensorML/1.0.1/profiles/ioos_sos/1.0" HTTP/POST: <sos:DescribeSensor version="1.0.0" service="SOS" xmlns="http://www.opengis.net/sos/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosDescribeSensor.xsd" outputFormat="text/xml;subtype=&quot;sensorML/1.0.1/profiles/ioos_sos/1.0&quot;"> <procedure>urn:ioos:network:test:all</procedure> </sos:DescribeSensor> 4.2.2.2.2 DescribeSensor Response The response to a DescribeSensor request is a Sensor Model Language (SensorML) document that describes the sensor system. In some cases, a DescribeSensor response may be quite voluminous; for example, if description of the network has been requested, and the response returns the document that contains detailed information not just about the network itself, but all network platforms and all sensors installed on each platform. An outline of such an all-inclusive DescribeSensor document is presented below. 38 DRAFT 3/18/2016 39 DRAFT 3/18/2016 <sml:SensorML> <sml:capabilities name="ioosServiceMetadata"> Version of the IOOS Template used in this document </sml:capabilities> <sml:member> <sml:System> <gml:description> Collection of all station assets available via the RA’s network SOS service </gml:description> <gml:name> urn:ioos:network:ra_name:all </gml:name> <gml:boundedBy> Spatial bounds of the content described by this network </gml:boundedBy> <sml:identification> networkID, shortName and longName </sml:identification> <sml:classification> All classifiers that apply to this network offering </sml:classification> <sml:validTime> Represents the date range of the validity of this document </sml:validTime> <sml:capabilities name="observationTimeRange"> TimeRange element describes the valid time range over which observations from a sensor or station exist </sml:capabilities> <sml:contact> List all publisher and operator contacts that apply to this network </sml:contact> <sml:components> <sml:ComponentList> List all platforms in the network offering <sml:component name='platform_#01_name'> <sml:System> <sml:identification> The names of the platform #01 (stationID, shortName and longName) <sml:capabilities name="observationTimeRange"> TimeRange element describes the valid time range over which observations from platform #01 exist <sml:location> Platform #01 geographic location (lat & lon only, no z) <sml:outputs> A list of the observed properties assotiated with the platform #01 <sml:components> <sml:ComponentList> List of sensors in the platform #01 <sml:component name='sensor_A_name'> <sml:System> <gml:description> Description of sensor A </gml:description> <gml:name> urn:ioos:sensor:platform_name:sensor_name </gml:name> <sml:identification> Names of the sensor A (sationID, shortName and longName) </sml:identification> <sml:capabilities name="featureOfInterest"> Feature of interest that sensor A belongs to </sml:capabilities> <sml:capabilities name="offerings"> 40 DRAFT 3/18/2016 List of all offerings associated with the sensor A </sml:capabilities> <sml:capabilities name="stationProcedure"> The ID of the platform (procedure), on which sensor A is installed </sml:capabilities> <sml:capabilities name="observationTimeRange"> The valid time range over which observations from sensor A exist </sml:capabilities> <sml:inputs> Observation phenomena associated with the sensor A </sml:inputs> <sml:outputs> A list of the outputs assotiated with the sensor A </sml:outputs> </sml:System> </sml:component> […] <sml:component name='sensor_K_name'> Description of sensor K […] </sml:component> <sml:component name='sensor_T_name'> Description of sensor T </sml:component> </sml:ComponentList> </sml:components> </sml:System> </sml:component> […] <sml:component name='platform_#NN_name'> Description of the platform #NN […] </sml:component> <sml:component name='platform_#ZZ_name'> Description of the platform #ZZ […] </sml:component> </sml:ComponentList> </sml:components> </sml:System> </sml:member> </sml:SensorML> In order to decrease the size of the DescribeSensor document, and limit the volume of the detailed information returned, IOOS recognizes 3 separate types of the DescribeSensor documents. For Milestone 1.0, the IOOS SOS is required to provide documents describing network and individual platform, while the description of individual sensor is optional. 4.2.2.2.2.1 Network of platforms/stations A mandatory DescribeSensor response for a network of platforms/stations shall return: information on the IOOS Template version network description search keywords network identifiers, such as 41 DRAFT 3/18/2016 o networkID o short name o long name (optional) relevant contact information for this specific network list of platforms of the network list of offerings for the network time range for observations list of observed properties for the network The template for a generic DescribeSensor document for network is shown below. The template is independent of feature types, and presents just enough metadata to determine what additional descriptions are needed. The specifics of some elements’ use in the network template are discussed in details later. <sml:SensorML xmlns:sml="http://www.opengis.net/sensorML/1.0.1" xmlns:gml="http://www.opengis.net/gml" xmlns:swe="http://www.opengis.net/swe/1.0.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sensorML/1.0.1 http://schemas.opengis.net/sensorML/1.0.1/sensorML.xsd" version="1.0.1"> <sml:capabilities name="ioosServiceMetadata"> <swe:SimpleDataRecord> <swe:field name="ioosTemplateVersion"> <swe:Text definition=http://code.google.com/p/ioostech/source/browse/#svn%2Ftrunk%2Ftemplates%2FMilestone1.0/> <swe:value>1.0</swe:value> </swe:Text> </swe:field> </swe:SimpleDataRecord> </sml:capabilities> <sml:member> <sml:System> <gml:description>Collection of all station assets available via the NANOOS SOS service</gml:description> <gml:name>urn:ioos:network:nanoos:all</gml:name> <gml:boundedBy> <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:lowerCorner>32.7 -75.0</gml:lowerCorner> <gml:upperCorner>34.7 -72.0</gml:upperCorner> </gml:Envelope> </gml:boundedBy> <sml:identification> <sml:IdentifierList> <sml:identifier name="networkID"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/networkID"> <sml:value>urn:ioos:network:nanoos:all</sml:value> </sml:Term> </sml:identifier> <sml:identifier name="shortName"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/shortName"> <sml:value>NANOOS SOS station assets collection</sml:value> </sml:Term> </sml:identifier> <sml:identifier name="longName"> 42 DRAFT 3/18/2016 <sml:Term definition="http://mmisw.org/ont/ioos/definition/longName"> <sml:value>Collection of all station assets available via the NANOOS SOS service</sml:value> </sml:Term> </sml:identifier> </sml:IdentifierList> </sml:identification> <sml:classification> <sml:ClassifierList> <sml:classifier name="publisher"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/publisher"> <sml:codeSpace xlink:href="http://mmisw.org/ont/ioos/organization"/> <sml:value>NANOOS</sml:value> </sml:Term> </sml:classifier> <sml:classifier name="parentNetwork"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/parentNetwork"> <sml:codeSpace xlink:href="http://mmisw.org/ont/ioos/organization"/> <sml:value>NANOOS</sml:value> </sml:Term> </sml:classifier> </sml:ClassifierList> </sml:classification> <sml:capabilities name="observationTimeRange"> <swe:DataRecord> <swe:field name="observationTimeRange"> <swe:TimeRange definition="http://mmisw.org/ont/ioos/swe_element_type/observationTimeRange"> <swe:value>2008-04-28T08:00:00.000Z 2012-12-27T19:00:00.000Z</swe:value> </swe:TimeRange> </swe:field> </swe:DataRecord> </sml:capabilities> <sml:contact> <sml:ContactList> <sml:member xlink:role="http://mmisw.org/ont/ioos/definition/operator"> <sml:ResponsibleParty> <sml:organizationName>PNW Buoys</sml:organizationName> <sml:contactInfo> <sml:address> <sml:deliveryPoint>1007 Balch Blvd.</sml:deliveryPoint> <sml:city>Fremont</sml:city> <sml:administrativeArea>WA</sml:administrativeArea> <sml:postalCode>98195</sml:postalCode> <sml:country>USA</sml:country> <sml:electronicMailAddress>contact@buoys.com</sml:electronicMailAddress> </sml:address> <sml:onlineResource xlink:href="http://pnw.buoyoperator.org"/> </sml:contactInfo> </sml:ResponsibleParty> </sml:member> <sml:member xlink:role="http://mmisw.org/ont/ioos/definition/publisher"> <sml:ResponsibleParty> <sml:organizationName>NANOOS</sml:organizationName> <sml:contactInfo> <sml:address> <sml:country>USA</sml:country> <sml:electronicMailAddress>mayorga@apl.washington.edu</sml:electronicMailAddress> </sml:address> <sml:onlineResource xlink:href="http://nanoos.org"/> </sml:contactInfo> </sml:ResponsibleParty> </sml:member> 43 DRAFT 3/18/2016 </sml:ContactList> </sml:contact> <sml:components> <sml:ComponentList> <sml:component name="wmo_41001"> <sml:System> <sml:identification> <sml:IdentifierList> <sml:identifier name="stationID"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/stationID"> <sml:value>urn:ioos:station:wmo:41001</sml:value> </sml:Term> </sml:identifier> <sml:identifier name="shortName"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/shortName"> <sml:value>WMO 41001 Buoy, Cape Hatteras</sml:value> <sml:identifier name="longName"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/longName"> <sml:value>urn:ioos:station:wmo:41001 buoy station, 150 NM East of Cape Hatteras</sml:value> </sml:Term> </sml:identifier> </sml:IdentifierList> </sml:identification> <sml:capabilities name="observationTimeRange"> <swe:DataRecord> <swe:field name="observationTimeRange"> <swe:TimeRange definition="http://mmisw.org/ont/ioos/swe_element_type/observationTimeRange"> <swe:value>2006-02-12T00:00:00.000Z 2013-04-21T00:00:00.000Z</swe:value> </swe:TimeRange> </swe:field> </swe:DataRecord> </sml:capabilities> <sml:location> <gml:Point srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:pos>34.7 -72.73</gml:pos> </gml:Point> </sml:location> <sml:outputs> <sml:OutputList> <sml:output name="Sea Water Temperature"> <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"/> </sml:output> <sml:output name="Dissolved Oxygen"> <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/dissolved_oxygen"/> </sml:output> </sml:OutputList> </sml:outputs> </sml:System> </sml:component> </sml:ComponentList> </sml:components> </sml:System> </sml:member> </sml:SensorML> The IOOS Convention provides more detailed guidance to some SensorML elements’ implementation in the template; such elements are listed in the table below, and their specifics are explained as well: 44 DRAFT 3/18/2016 Input Name sml:capabilities Cardinality Description 1…1 Provides information of the IOOS template version. 1…1 The element that bounds the description of the network of platforms that is specified in the “procedure” element of the DescribeSensor request. Sensor ML document contains only one <member> element because only one “procedure” parameter is allowed in SOS DescribeSensor request. Member system description generally includes the following sections: Name & Description Temporal & Spatial Bounds Identifiers Classifiers Contacts Components (platforms/stations that belong to the network) Depicts spatial bounds of the network segment that is described in the document. All platforms that are located within the bounded segment must be listed in the <sml:components> section of the document. name="ioosServiceMetadata" sml:member Note: For the elements hereinafter in this table, the cardinality is for each <sml:member> gml:boundedBy 1…1 sml:identification 1…1 In this template provides identity and alias information for the network itself (in <sml:member/System> section), and for all component platforms (in <sml:component/System> sections). The networkID, shortName and longName are required for the network, and for the platform, stationID, shortName and longName are mandatory. The other appropriate identification information is optional but its presentation is strongly encouraged. A WMO ID is an optional identifier for now but it is recommended to specify it for each platform when it is available. sml:classification 1…1 In this template specifies classification values that describe the content of the network offering with terms defined in external vocabularies. The reference to at least one parent network with IOOS codespace and RA Acronym value is required, e.g.: <sml:classifier name="parentNetwork"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/parentNetwork"> <sml:codeSpace xlink:href="http://mmisw.org/ont/ioos/organization"/> <sml:value>NANOOS</sml:value> </sml:Term> </sml:classifier> sml:capabilities 1…1 Describes the valid time range over which observations from a whole network or a component platform exist, as opposed to the <sml:validTyme>. 0…1 Lists all relevant contacts for the network. The mandatory contacts are Publisher and Operator but any other relevant contact may be described here. name="observationTimeRange" sml:contact It is strongly recommended to represent any reference to external resource using an “xlink:href” attribute in the following manner: <sml:contact xlink:href="http://sdf.ndbc.noaa.gov"/>, or <sml:onlineResource xlink:href="http://pnw.buoyoperator.org"/> IOOS Convention requires only <sml:country> and <sml:electronicMailAddress> for the contact address. However, it is strongly recommended to provide as detailed contact information as possible, e.g. <sml:address> <sml:deliveryPoint/>> <sml:city/> <sml:administrativeArea/> <sml:postalCode/> <sml:country/> <sml:electronicMailAddress/> </sml:address> 45 DRAFT 3/18/2016 sml:components 1…1 Lists all platforms in the network offering that are located within the spatial segment defined in the <gml:boundedBy> element. sml:component 1…* Describes each individual platform from the list. The following elements and associated attributes are required for each platform: <sml:identification> to indicate stationID, shortName and longName for the specific platform; if available, a WMO ID may be indicate as well; <sml:capabilities name="observationTimeRange"> to indicate observation time range; <sml:location/gml:Point> to specify the 2D geographic location of the fixed platform(always in EPSG::4326 CRS); <sml:outputs> to specify the quantities observed by the platform 4.2.2.2.2.2 Platform/Station A mandatory DescribeSensor response for a specific platform/station shall return: information on the IOOS Template version platform description search keywords relevant contacts about this specific platform mandatory platform identifiers, such as o platformID o short name o long name mandatory platform classifiers, such as o platformType 46 DRAFT 3/18/2016 o operatorSector o publisher o parentNetwork mandatory platform geographic location (always in EPSG::4326) time range for observations optional documentation (external human-readable resources about the platform) list of observed properties at platform including relevant sensor information <!-- Template document for a generic (independant of feature type) Describe Sensor Station --> <sml:SensorML xmlns:sml="http://www.opengis.net/sensorML/1.0.1" xmlns:gml="http://www.opengis.net/gml" xmlns:swe="http://www.opengis.net/swe/1.0.1" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sensorML/1.0.1 http://schemas.opengis.net/sensorML/1.0.1/sensorML.xsd" version="1.0.1"> <sml:capabilities name="ioosServiceMetadata"> <swe:SimpleDataRecord> <swe:field name="ioosTemplateVersion"> <swe:Text definition="http://code.google.com/p/ioostech/source/browse/#svn%2Ftrunk%2Ftemplates%2FMilestone1.0"> <swe:value>1.0</swe:value> </swe:Text> </swe:field> </swe:SimpleDataRecord> </sml:capabilities> <sml:member> <sml:System> <gml:description>Observations at urn:ioos:station:wmo:41001 buoy station, 150 NM East of Cape HATTERAS</gml:description> <gml:name>urn:ioos:station:wmo:41001</gml:name> <sml:identification> <sml:IdentifierList> <sml:identifier name="stationID"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/stationID"> <sml:value>urn:ioos:station:wmo:41001</sml:value> </sml:Term> </sml:identifier> <sml:identifier name="shortName"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/shortName"> <sml:value>WMO 41001 Buoy, Cape Hatteras</sml:value> </sml:Term> </sml:identifier> <sml:identifier name="longName"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/longName"> <sml:value>urn:ioos:station:wmo:41001 buoy station, 150 NM East of Cape HATTERAS</sml:value> </sml:Term> </sml:identifier> <sml:identifier name="wmoID"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/wmoID"> <sml:value>41001</sml:value> </sml:Term> </sml:identifier> </sml:IdentifierList> </sml:identification> 47 DRAFT 3/18/2016 <sml:classification> <sml:ClassifierList> <sml:classifier name="parentNetwork"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/parentNetwork"> <sml:codeSpace xlink:href="http://mmisw.org/ont/ioos/organization"/> <sml:value>NANOOS</sml:value> </sml:Term> </sml:classifier> <sml:classifier name="platformType"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/platformType"> <sml:codeSpace xlink:href="http://mmisw.org/ont/ioos/platform"/> <sml:value>buoy</sml:value> </sml:Term> </sml:classifier> <sml:classifier name="operatorSector"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/operatorSector"> <sml:codeSpace xlink:href="http://mmisw.org/ont/ioos/sector"/> <sml:value>academic</sml:value> </sml:Term> </sml:classifier> <sml:classifier name="publisher"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/publisher"> <sml:codeSpace xlink:href="http://mmisw.org/ont/ioos/organization"/> <sml:value>NANOOS</sml:value> </sml:Term> </sml:classifier> <sml:classifier name="sponsor"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/sponsor"> <sml:codeSpace xlink:href="http://mmisw.org/ont/ioos/organization"/> <sml:value>ACE</sml:value> </sml:Term> </sml:classifier> </sml:ClassifierList> </sml:classification> <sml:validTime> <gml:TimePeriod> <gml:beginPosition>2002-05-04T00:00:00Z</gml:beginPosition> <gml:endPosition indeterminatePosition="now"/> </gml:TimePeriod> </sml:validTime> <sml:capabilities name="observationTimeRange"> <swe:DataRecord> <swe:field name="observationTimeRange"> <swe:TimeRange definition="http://mmisw.org/ont/ioos/swe_element_type/observationTimeRange"> <swe:value>2008-04-28T08:00:00.000Z 2012-12-27T19:00:00.000Z</swe:value> </swe:TimeRange> </swe:field> </swe:DataRecord> </sml:capabilities> <sml:capabilities name="networkProcedures"> <swe:SimpleDataRecord> <swe:field name="network1"> <swe:Text definition="http://mmsiw.org/ont/ioos/definition/networkID"> <swe:value>urn:ioos:network:nanoos:all</swe:value> </swe:Text> </swe:field> <swe:field name="network2"> <swe:Text definition="http://mmsiw.org/ont/ioos/definition/networkID"> <swe:value>urn:ioos:network:nanoos:network1</swe:value> </swe:Text> </swe:field> 48 DRAFT 3/18/2016 <swe:field name="network3"> <swe:Text definition="http://mmsiw.org/ont/ioos/definition/networkID"> <swe:value>urn:ioos:network:nanoos:network2</swe:value> </swe:Text> </swe:field> </swe:SimpleDataRecord> </sml:capabilities> <sml:contact> <sml:ContactList> <sml:member xlink:role="http://mmisw.org/ont/ioos/definition/operator"> <sml:ResponsibleParty> <sml:organizationName>PNW Buoys</sml:organizationName> <sml:contactInfo> <sml:address> <sml:deliveryPoint>1007 Balch Blvd.</sml:deliveryPoint> <sml:city>Fremont</sml:city> <sml:administrativeArea>WA</sml:administrativeArea> <sml:postalCode>98195</sml:postalCode> <sml:country>USA</sml:country> <sml:electronicMailAddress>contact@buoys.com</sml:electronicMailAddress> </sml:address> <sml:onlineResource xlink:href="http://pnw.buoyoperator.org"/> </sml:contactInfo> </sml:ResponsibleParty> </sml:member> <sml:member xlink:role="http://mmisw.org/ont/ioos/definition/publisher"> <sml:ResponsibleParty> <sml:organizationName>NANOOS</sml:organizationName> <sml:contactInfo> <sml:address> <sml:country>USA</sml:country> <sml:electronicMailAddress>mayorga@apl.washington.edu</sml:electronicMailAddress> </sml:address> <sml:onlineResource xlink:href="http://nanoos.org"/> </sml:contactInfo> </sml:ResponsibleParty> </sml:member> </sml:ContactList> </sml:contact> <sml:documentation> <sml:DocumentList> <sml:member name="qc" xlink:arcrole="qualityControlDocument"> <sml:Document> <gml:description>Handbook of Automated Data Quality Control Checks and Procedures, National Data Buoy Center, August 2009</gml:description> <sml:format>pdf</sml:format> <sml:onlineResource xlink:href="http://www.ndbc.noaa.gov/NDBCHandbookofAutomatedDataQualityControl2009.pdf"/> </sml:Document> </sml:member> <sml:member name="wp1" xlink:arcrole="urn:ogc:def:role:webPage"> <sml:Document> <gml:description>Station web page from provider</gml:description> <sml:format>text/html</sml:format> <sml:onlineResource xlink:href="STATION_WEBPAGE"/> </sml:Document> </sml:member> <sml:member name="wp2" xlink:arcrole="urn:ogc:def:role:webPage"> <sml:Document> <gml:description>Station web page from operator</gml:description> <sml:format>text/html</sml:format> <sml:onlineResource xlink:href="STATION_WEBPAGE"/> 49 DRAFT 3/18/2016 </sml:Document> </sml:member> </sml:DocumentList> </sml:documentation> <sml:history> <sml:EventList> <sml:member name="deployment_start"> <sml:Event> <sml:date>2010-01-12</sml:date> <gml:description>Deployment start event</gml:description> <sml:documentation xlink:href="http://sdftest.ndbc.noaa.gov/sos/server.php?service=SOS&amp;request=DescribeSensor&amp;version=1.0.0&amp;out putformat=text/xml;subtype=&quot;sensorML/1.0.1&quot;&amp;procedure=urn:ioos:station:wmo:41001:20100112"/> </sml:Event> </sml:member> <sml:member name="deployment_stop"> <sml:Event> <sml:date>2011-02-06</sml:date> <gml:description>Deployment stop event</gml:description> <sml:documentation xlink:href="http://sdftest.ndbc.noaa.gov/sos/server.php?service=SOS&amp;request=DescribeSensor&amp;version=1.0.0&amp;out putformat=text/xml;subtype=&quot;sensorML/1.0.1&quot;&amp;procedure=urn:ioos:station:wmo:41001:20100112"/> </sml:Event> </sml:member> <sml:member name="deployment_start"> <sml:Event> <sml:date>2011-02-07</sml:date> <gml:description>Deployment start event</gml:description> <sml:documentation xlink:href="http://sdftest.ndbc.noaa.gov/sos/server.php?service=SOS&amp;request=DescribeSensor&amp;version=1.0.0&amp;out putformat=text/xml;subtype=&quot;sensorML/1.0.1&quot;&amp;procedure=urn:ioos:station:wmo:41001:20110207"/> </sml:Event> </sml:member> </sml:EventList> </sml:history> <sml:location> <gml:Point srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:pos>34.7 -72.73</gml:pos> </gml:Point> </sml:location> <sml:components> <sml:ComponentList> <sml:component name="WatertempSensor1"> <sml:System > <gml:description>Surface water temperature sensor on WMO platform 41001</gml:description> <sml:identification xlink:href="urn:ioos:sensor:wmo:41001:watertemp1"/> <sml:documentation xlink:href="http://sdftest.ndbc.noaa.gov/sos/server.php?service=SOS&amp;request=DescribeSensor&amp;version=1.0.0&amp;out putformat=text/xml;subtype=&quot;sensorML/1.0.1&quot;&amp;procedure=urn:ioos:sensor:wmo:41001:watertemp1"/> <sml:outputs> <sml:OutputList> <sml:output name="Water Temperature"> <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"> <swe:uom code="degC" /> </swe:Quantity> </sml:output> </sml:OutputList> </sml:outputs> </sml:System> </sml:component> <sml:component name="Sensor ct1"> 50 DRAFT 3/18/2016 <sml:System gml:id="sensor-ct1"> <gml:description/> <sml:identification xlink:href="urn:ioos:sensor:wmo:41001:ct1"/> <sml:documentation xlink:href="http://sdftest.ndbc.noaa.gov/sos/server.php?service=SOS&amp;request=DescribeSensor&amp;version=1.0.0&amp;out putformat=text/xml;subtype=&quot;sensorML/1.0.1&quot;&amp;procedure=urn:ioos:sensor:wmo:41001:ct1"/> <sml:outputs> <sml:OutputList> <sml:output name="Water Temperature"> <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"> <swe:uom code="degC" /> </swe:Quantity> </sml:output> <sml:output name="Salinity"> <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_salinity"> <swe:uom code="PSU" /> </swe:Quantity> </sml:output> </sml:OutputList> </sml:outputs> </sml:System> </sml:component> <sml:component name="Sensor baro1"> <sml:System> <gml:description/> <sml:identification xlink:href="urn:ioos:sensor:wmo:41001:baro1"/> <sml:documentation xlink:href="http://sdftest.ndbc.noaa.gov/sos/server.php?service=SOS&amp;request=DescribeSensor&amp;version=1.0.0&amp;out putformat=text/xml;subtype=&quot;sensorML/1.0.1&quot;&amp;procedure=urn:ioos:sensor:wmo:41001:baro1"/> <sml:outputs> <sml:OutputList> <sml:output name="Barometric Pressure"> <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_pressure"> <swe:uom code="mb" /> </swe:Quantity> </sml:output> </sml:OutputList> </sml:outputs> </sml:System> </sml:component> <sml:component name="Sensor airtemp1"> <sml:System gml:id="sensor-airtemp1"> <gml:description/> <sml:identification xlink:href="urn:ioos:sensor:wmo:41001:airtemp1"/> <sml:outputs> <sml:OutputList> <sml:output name="Air Temperature"> <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <swe:uom code="degC" /> </swe:Quantity> </sml:output> </sml:OutputList> </sml:outputs> </sml:System> </sml:component> </sml:ComponentList> </sml:components> </sml:System> </sml:member> </sml:SensorML> 51 DRAFT 3/18/2016 The IOOS Convention provides more specific guidance to some SensorML elements’ implementation in the DescribeSensor template for platform/station; such elements are listed in the table below, and their specifics are explained as well: Input Name sml:capabilities Cardinality Description 1…1 Provides information of the IOOS template version. 1…1 The element that bounds the description of the platform specified in the “procedure” element of the DescribeSensor request. Sensor ML document contains only one <member> element because SOS DescribeSensor request only allows single “procedure”. Member system description must include the following sections: Platform Name & Description Platform Identifiers Platform Classifiers Temporal Bounds for observations List of the networks the platform belongs to Contacts Components (all sensors located on the platform) name="ioosServiceMetadata" sml:member Note: For the elements hereinafter in this table, the cardinality is for each <sml:member> sml:identification 1…1 In this template provides identity and alias information for the platform (in <sml:member/System> section), and for all component sensors (in <sml:component/System> sections). For the platform, the stationID, shortName and longName are required; however, only sensorID is mandatory for component sensors. In both cases, other appropriate identification information is encouraged. A WMO ID is an optional identifier for now but is strongly recommended for each platform when it is available. The wmoID should be specified as a separate identifier even if the main stationID URN uses the WMO authority: <sml:identifier name="wmoID"> <sml:Term definition="http://mmisw.org/ont/ioos/definition/wmoID"> <sml:value>41001</sml:value> </sml:Term> </sml:identifier> sml:classification 1…1 In this template specifies classification values that describe the content of the network offering with terms defined in external vocabularies. The following classifiers are mandatory for all platforms: sml:validTime 0…1 parentNetwork (e.g. “NANOOS”) (Note that at least one parent network must reference an IOOS codespace and list the RA Acronym) platformType (e.g. “buoy”) operatorSector (e.g. “academic”) publisher (e.g. “NANOOS”) sponsor (e.g. “ACE”) The <sml:validTime> is used only to specify a time period, in which this specific DescribeSensor document is valid. The validity period usually goes from the platform deployment date to today (indicated by 'now' in the example above) or the end of the life of the platform. The validity period may be different, however, if any of the sensors installed on the platform had limited functionality due to some incident, got replaced or removed. When such incident occurs, a new DescribeSensor document shall be created with a validity period going from the date of that incident to the date of the next one (or "now" if there were no more incidents), while the old document shall be archived with a validity period ending at the date of the 52 DRAFT 3/18/2016 incident. sml:capabilities 1…1 Describes the valid time range over which observations from a whole network or a component platform exist. 1…1 A mandatory list of all the networks to which this platform/station belongs. In a similar manner, the DescribeSensor document for sensor indicates the parent station. 0…1 Lists all relevant contacts for the platform specified. The mandatory contacts are Publisher and Operator but any other relevant contact may be described here. name="observationTimeRange" sml:capabilities name="networkProcedures" sml:contact It is strongly recommended to represent any reference to external resource using an “xlink:href” attribute in the following manner: <sml:contact xlink:href="http://sdf.ndbc.noaa.gov"/>, or <sml:onlineResource xlink:href="http://pnw.buoyoperator.org"/> IOOS Convention requires only <sml:country> and <sml:electronicMailAddress> for the contact address. However, it is strongly recommended to provide as detailed contact information as possible, e.g. for the address: <sml:address> <sml:deliveryPoint/>> <sml:city/> <sml:administrativeArea/> <sml:postalCode/> <sml:country/> <sml:electronicMailAddress/> </sml:address> sml:documentation 0…1 Specifes the external resources for human consumption about this platform and the observation data it produces. sml:history 0…1 Lists events and status changes of the platform such as deployment and recovery. sml:location 1…1 Specifes the geographic location of the platform in EPSG::4326 (lat, lon) sml:components 1…1 Lists all sensors installed on the described platform. sml:component 1…* Describes each individual sensor from the component list. The sensor name should be a human readable label. The following 2 elements are mandatory for each sensor: <sml:identification> to indicate sensorID for the specific sensor; <sml:outputs> to specify the list of all quantities observed by the sensor. The other 2 elements are optional but strongly recommended for each sensor: <sml:description> to briefly describe the sensor in a human-readable form; <sml:documentation> to specify the external resources for human consumption about this sensor and the observation data it produces. 53 DRAFT 3/18/2016 4.2.2.2.2.3 Sensor The IOOS SOS Milestone 1.0 does not require a provision of DescribeSensor documents for individual sensors. However, if an SOS server offers these documents nevertheless, the corresponding DescribeSensor response should return: information on the IOOS Template version sensor description search keywords mandatory sensor identifiers, such as o sensorID o short name o long name platform identifier for the platform, on which the sensor is located time range for observations list of all offerings associated with the sensor list of all observed properties associated with the sensor If the DescribeSensor document for individual sensor is provided, the IOOS Convention encourages to keep its content in line with the required network and station/platform documents. Recommended use of some SensorML elements in the DescribeSensor response for individual sensor is described in the table below: Input Name sml:capabilities Cardinality Description 1…1 Provides information of the IOOS template version. 1…1 The element that bounds the description of the sensor specified in the “procedure” element of the DescribeSensor request. Sensor ML document contains only one <member> element because SOS DescribeSensor request only allows single “procedure”. Member system description must include the following sections: Sensor Name & Description Sensor Identifiers Sensor Capabilities Observed properties associated with the sensor In this template provides identity and alias information for the sensor. The name="ioosServiceMetadata" sml:member Note: For the elements hereinafter in this table, the cardinality is for each <sml:member> sml:identification 1…1 54 DRAFT 3/18/2016 sensorID and shortName are required; however, other appropriate identification information may also be presented. sml:validTime 0…1 The <sml:validTime> is used only to specify a time period, in which this specific DescribeSensor document is valid. The validity period usually goes from the sensor deployment date to today (indicated by 'now' in the example above), unless the sensor had an incident that resulted in a limited functionality or complete replacement. When such incident occurs, a new DescribeSensor document shall be created with a validity period going from the date of that incident to the date of the next one (or "now" if there were no more incidents), while the old document shall be archived with a validity period ending at the date of the incident. sml:capabilities 1…1 Describes geo-object, which is a subject to the measured values and is measured by sensor, i.e. the platform, which the sensor is installed on. 1…1 A list of all offerings associated with the sensor. 1…1 A parent station, which the sensor installed on; in this context, it is similar to the “featureOfInterest”. 1…1 Describes the valid time range over which observations from the sensor exist, as opposed to the <sml:validTime>. sml:inputs 1…* Describes the generic observed property, i.e. physical phenomena that are measured by the sensor, e.g. Wind, Current, etc. sml:outputs 1…* Describes the specific results of the measurement of the input physical phenomena, e.g. Wind speed, Wind direction, etc. name="featuresOfInterest" sml:capabilities name="offerings" sml:capabilities name="stationProcedure" sml:capabilities name="observationTimeRange" 4.2.2.3 GetObservation The GetObservation operation queries SOS to retrieve observation data structured according to the Observation and Measurement specification. Upon receiving a GetObservation request, a SOS shall either satisfy the request or return an exception report. The GetObservation operations provides observations based on the setting of filters that includes timing, processes, phenomena, feature of interest, and other parameters of the O&M model. 55 DRAFT 3/18/2016 4.2.2.3.1 GetObservation Request A GetObservation request contains one or more elements that constrain the observations to be retrieved from a Sensor Observation Service. Each GetObservation query element has mandatory attributes of service and version. The mandatory version element attribute must correspond to the specific service interface version negotiated between the service and client during the service binding process. The required service attribute explicitly must be “SOS”. The UML diagram of the DescribeSensor request is presented in the figure below. The required input parameters of the GetObservation request are explained in the following table: Input Name Cardinality service version request 1…1 1…1 1…1 offering 1…1 observedProperty 1…* Description Service name (always SOS) Service version Operation name Specifies the offering URN advertised in the GetCapabilities document. GetObservation request to IOOS-compliant SOS server shall include ONLY one offering, but may include multiple procedures instead (see below). Specifies the phenomenon for which observations are requested as a URL of a corresponding vocabulary record, e.g. http://mmisw.org/ont/cf/parameter/air_temperature 56 DRAFT 3/18/2016 responseFormat 1…1 The desired output format of the GetObservation operation; must always be considered as one of the supported output formats listed in <sos:responseFormat> element in GetCapabilities document. The OGC SOS v1.0 Implementation Standard defines a number of other parameters that must be supported by the server but are not required in a GetObservation request. Although the use of these parameters is optional, they may significantly refine the query result: procedure 0…* eventTime 0…1 featureOfInterest 0…* resultModel 0…* srsName 0…1 result 0…1 responseMode 0…1 Specifies the sensor system(s) for which observations are requested; defines a filter for the procedure property of the observations. The type is “anyURI”, and it must match the value of the “xlink:href=” attribute in an <sos:procedure> element advertized in GetCapabilities response . Examples: Network urn:ioos:network:test:all Station/Platform urn:ioos:station:test:station_name Sensor urn:ioos:sensor:test:station_name:sensor_name Specifies the time period(s) for which observations are requested. The time should conform to ISO format: YYYY-MM-DDTHH:mm:ss±HH. Time instance is given as one time value. Periods of time (start and end) are separated by "/". For example: 2009-06-26T10:00:00+01/2009-06-26T11:00:00+01. Although SOS v1.0 specification allows requests with no temporal boundaries, the SOS v1.0 fails to properly describe the server response to such request. For that specific case, the IOOS Convention requires SOS server to follow the SOS v2.0 specification, and return all records matching a user’s request. However, as a result limit may be employed by the SOS server, a ResponseExceedsSizeLimit exception code will be returned instead if that limit is exceeded. Specifies the feature for which observations are requested. This should be presented in a form of comma-separated URIs advertised in the GetCapabilities document or a bounding box for requested data, i.e. featureOfInterest=BBOX:min_lon,min_lat,max_lon,max_lat Specifies the name of the root element of a GetObservation response. The IOOS Convention requires resultModel to be “om:ObservationCollection”. Attribute that defines the spatial reference system that should be used for any geometry that is returned in the response. If present, it must be one of the advertised CRS values specified in <gml:srsName> element or “srsName” attribute of the <gml:boundedBy/gml:Envelope> element in the GetCapabilities document. If omitted, it's assumed that the CRS is WGS 84 identified as urn:ogc:def:crs:EPSG::4326 Instructs the SOS to only return observations where the result matches the expression or value. For example, CO-OPS supports a long list of constraints such as IGLD (urn:ioos:def:datum:noaa::IGLD), MHHW (urn:ioos:def:datum:noaa::MHHW), NAVD (urn:ogc:def:datum:epsg::5103), and so forth. Specifies whether results are requested in-line, out-of-band, as an attachment or resultTemplate. In addition to the standard set of parameters, some of the IOOS data providers have implemented various unique non-standard parameters. Although the use of such parameters may be advantageous, certain caution should be exercised because the support of these parameters is provider-specific; for example, some of the non-standard request parameters supported by CO-OPS are described in the table below: 57 DRAFT 3/18/2016 unit 0…1 timeZone 0…1 epoch 0…1 dataType 0…1 Specifies units for requested water level predictions, harmonic constituents or datums data. Valid values are Meters Feet If no unit is specified, the data in meters is retrieved. Specifies a time zone for requested harmonic constituents data only. Valid values are GMT LST If no time zone is specified, the data in GMT is retrieved. Specifies the epoch for requested datums data only. Valid values are Current Superseded If no epoch is specified, the accepted data (Current) is retrieved. Specifies the data type for requested water level data or tide predictions. Valid values are PreliminarySixMinute PreliminaryOneMinute VerifiedSixMinute VerifiedHourlyHeight VerifiedHighLow VerifiedDailyMean SixMinuteTidePredictions HourlyTidePredictions HighLowTidePredictions If no data type is specified, preliminary six minute data type is retrieved for water level, six minute data type is retrieved for tide predictions. The following examples illustrate HTTP/GET and HTTP/POST GetObservation requests. Note that in HTTP/GET (KVP) request, the parameter names are case insensitive. The following example shows equivalent terms for a parameter “outputFormat”: outputFormat, outputformat, OUTPUTFORMAT, or OUTPUTfORMAT. As a guideline, it is suggested that lowercase names be used for ease-of-reading and consistency. On the contrary, it is recommended to use the UpperCamelCase for the parameter values like GetCapabilities or DescribeSensor, as they are case sensitive: HTTP/GET: http://SERVERNAME:PORT/SOS_WEBAPP_NAME/sos?service=SOS&version=1.0.0&request=GetObservation&offering=urn:ioos:ne twork:test:all&observedProperty=http://mmisw.org/Font/cf/parameter/wind_speed&procedure=urn:ioos”station:test:blighreef& responseFormat=text/xml;subtype="om/1.0.0" HTTP/POST: <sos:GetObservation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sos/1.0 http://schemas.opengis.net/sos/1.0.0/sosAll.xsd" xmlns:sos="http://www.opengis.net/sos/1.0" xmlns:om="http://www.opengis.net/om/1.0" service="SOS" version="1.0.0" srsName="EPSG:4326"> <sos:offering>urn:ioos:network:test:all</sos:offering> <sos:observedProperty>http://mmisw.org/Font/cf/parameter/wind_speed</sos:observedProperty> <sos:responseFormat>text/xml; subtype=’om/1.0.0’</sos:responseFormat> <sos:resultModel>om:Observation</sos:resultModel> <sos:responseMode>inline</sos:responseMode> </sos:GetObservation> 58 DRAFT 3/18/2016 4.2.2.3.2 GetObservation Response GetObservation returns a collection of observations. Each observation is composed of metadata, description of the phenomena being returned (parameter names, units of measure, reference systems) and values. IOOS has developed a series of templates for GetObservation response. In general, IOOS considers GetObservation response as consisted of common generic metadata part and result block. The former contains generic, independent of feature type, metadata that describes features and observations, whereas the result block is a SWE Data Record construct that contains the values defined in the first part of the response. Since the common metadata parts of any GetObservation response are practically the same, IOOS has developed a single OM-GetObservation template for that part of the response. However, the result block is noticeably different depending on the feature type, and therefore IOOS has developed five individual SWEGetObservation templates for various combinations of Milestone 1.0 feature types (i.e. TimeSeries and TimeSeriesProfile), single and multiple stations, and availability of information about data quality (QC): SWE-MultiStation-TimeSeries SWE-MultiStation-TimeSeries_QC SWE-SingleStation-SingleProperty-TimeSeries SWE-SingleStation-TimeSeriesProfile SWE-SingleStation-TimeSeriesProfile_QC All these templates may be found at ioostech Wiki whereas only critical templates’ components are discussed hereinafter just in order to limit the size of the document; however, all nesessary measures were taken to ensure that template description completeness has not suffered. At any rate, the templates are well commented, and can provide a lot of needed information themselves. 4.2.2.3.2.1 OM-GetObservation Template The outline of the OM-GetObservation template is presented below: <om:ObservationCollection> <gml:metaDataProperty xlink:title="disclaimer"> A human-readable disclaimer if considered useful </gml:metaDataProperty> <gml:metaDataProperty xlink:title="ioosTemplateVersion" Version of the IOOS Template used in this document </gml:metaDataProperty> <om:member> Contains all observation offerings for the same feature type (e.g. timeSeries) <om:Observation> <gml:description> A human-readable description of the observation. Should include station(s) name and location as well as sensor or procedure information if possible </gml:description> <om:samplingTime> Descrition of the time range over which the reported observations from a sensor or station exist </om:samplingTime> <om:procedure> List of all stations (sensor systems) for which observations are reported </om:procedure> <om:observedProperty> List of the phenomena for which observations are reported </om:observedProperty> <om:featureOfInterest> <gml:metaDataProperty> 59 DRAFT 3/18/2016 Description of the CF Feature Type (discrete-sampling-geometry), e.g. timeSeries </gml:metaDataProperty> <gml:boundedBy> Description of the geographic (lat/ lon) Bounding Box of the feature </gml:boundedBy> <gml:location> List of geographical positions of the stations that fall inside the Bounding Box </gml:location> </om:featureOfInterest> <om:result> SWE document conforming to one of the Milestone 1.0 SWE-GetObservation templates <om:result> </om:Observation> </om:member> […] <om:member> Contains all observation offerings for another feature type (e.g. timeSeriesProfile) </om:member> </om:ObservationCollection> 60 DRAFT 3/18/2016 OM-GetObservation template in more details: <om:ObservationCollection xmlns:om="http://www.opengis.net/om/1.0" xmlns:gml="http://www.opengis.net/gml" xmlns:swe="http://www.opengis.net/swe/1.0.1" xmlns:swe2="http://www.opengis.net/swe/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/om/1.0 http://schemas.opengis.net/om/1.0.0/om.xsd"> <gml:metaDataProperty xlink:title="disclaimer"> <gml:GenericMetaData> <gml:description>DISCLAIMER</gml:description> </gml:GenericMetaData> </gml:metaDataProperty> <gml:metaDataProperty xlink:title="ioosTemplateVersion" xlink:href="http://code.google.com/p/ioostech/source/browse/#svn%2Ftrunk%2Ftemplates%2FMilestone1.0"> <gml:version>1.0</gml:version> </gml:metaDataProperty> <om:member> <om:Observation> <gml:description> Observations at point station urn:ioos:station:wmo:41001, 150 NM East of Cape HATTERAS. Observations at point station urn:ioos:station:wmo:41002, S HATTERAS - 250 NM East of Charleston, SC </gml:description> <om:samplingTime> <gml:TimePeriod> <gml:beginPosition>2009-05-23T00:00:00Z</gml:beginPosition> <gml:endPosition>2009-05-23T02:00:00Z</gml:endPosition> </gml:TimePeriod> </om:samplingTime> <om:procedure> <om:Process> <gml:member xlink:href="urn:ioos:station:wmo:41001" /> <gml:member xlink:href="urn:ioos:station:wmo:41002" /> </om:Process> </om:procedure> <om:observedProperty> <swe:CompositePhenomenon dimension="5" gml:id="observedproperties1"> <gml:name>Response Observed Properties</gml:name> <swe:component xlink:href="http://mmisw.org/ont/cf/parameter/air_temperature" /> <swe:component xlink:href="http://mmisw.org/ont/cf/parameter/wind_speed" /> <swe:component xlink:href="http://mmisw.org/ont/cf/parameter/wind_direction" /> <swe:component xlink:href="http://mmisw.org/ont/cf/parameter/sea_water_temperature" /> <swe:component xlink:href="http://mmisw.org/ont/ioos/parameter/dissolved_oxygen" /> </swe:CompositePhenomenon> </om:observedProperty> <om:featureOfInterest> <gml:FeatureCollection> <gml:metaDataProperty> <gml:name codeSpace="http://cf-pcmdi.llnl.gov/documents/cf-conventions/1.6/cf-conventions.html#discretesampling-geometries">timeSeries</gml:name> </gml:metaDataProperty> <gml:boundedBy> <gml:Envelope srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:lowerCorner>32.38 -75.42</gml:lowerCorner> <gml:upperCorner>34.7 -72.73</gml:upperCorner> 61 DRAFT 3/18/2016 </gml:Envelope> </gml:boundedBy> <gml:location> <gml:MultiPoint srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:pointMembers> <gml:Point> <gml:name>urn:ioos:station:wmo:41001</gml:name> <gml:pos>34.7 -72.73</gml:pos> </gml:Point> <gml:Point> <gml:name>urn:ioos:station:wmo:41002</gml:name> <gml:pos>32.382 -75.415</gml:pos> </gml:Point> </gml:pointMembers> </gml:MultiPoint> </gml:location> </gml:FeatureCollection> </om:featureOfInterest> <om:result> <!-- This block contains a SWE DataRecord conforming to the --> <!-- appropriate SWE-GetObservation template in Milestone 1.0. --> </om:result> </om:Observation> </om:member> <om:member> <!-- A different feature type may be returned in this member observation --> </om:member> </om:ObservationCollection> Input Name gml:metaDataProperty Cardinality 0…1 Provides a human-readable disclaimer (if required) bounded by <gml:description>. 1…1 Provides information of the IOOS template version. 1…* A GetObservation response shall contain at least one member observation that reports offerings. All stations corresponding to the same CF feature type (discrete-sampling-geometries) shall be reported in a single <om:member > block. Conversely, if the GetObservation request contains more than one feature type, then each feature type shall be reported in a separate member observation block. Member system description generally includes the following sections: Observation description Temporal bounds for observations List of stations reporting observations List of the observed phenomena Spatial bounds and other feature-type metadata Observation result block Single result block may contain values from multiple stations and multiple sensors of the same feature type. A recommended fairly free-form human-readable text that describes observations, including station(s) name and location as well as sensor or procedure information. xlink:title="disclaimer" gml:metaDataProperty Description xlink:title="ioosTemplateVersion" om:member Note: For the elements hereinafter in this table, the cardinality is for each <om:member> gml:description 0…1 om:samplingTime 1…1 The samplingTime bounds the time when the result applies to the feature-ofinterest, encoded as a TimeInstant or TimePeriod ISO8601 string or using the indeterminatePosition attribute (e.g. 'now'). Currently only UTC (Z) is 62 DRAFT 3/18/2016 supported. This time usually required for geospatial analysis of the result. om:procedure 1…1 This element contains the official IOOS identifiers for the platforms in a form of URN that conforms to the IOOS Conventions for Observing Asset Identifiers. The IOOS Convention requires that multiple platforms/stations are listed as members of a single process, e.g.: <om:procedure> <om:Process> <gml:member xlink:href="urn:ioos:station:wmo:41001" /> <gml:member xlink:href="urn:ioos:station:wmo:41002" /> </om:Process> </om:procedure> om:observedProperty 1…1 A description of the phenomena that are being estimated through observation, e.g. "wave", "temperature", "wind", etc. The IOOS Convention requires that This element has a value of a URL corresponding to a Climate and Forecast (CF) Standard Name of the record in one of the IOOS Vocabularies that are currently hosted by the Marine Metadata Interoperability (MMI) project. Both vector (namely winds, currents and waves), and scalar variables are described as composite phenomena using <swe:CompositePhenomenon> element, even when the response returns a single observed property. The supported true composite (vector) phenomena are defined in the IOOS Parameter Vocabulary (e.g.: http://mmisw.org/ont/ioos/parameter/wave). Each <swe:CompositePhenomenon> must have a document-wide unique <gml:id> attribute (it is recommended to use just a simple integer counter next to a fixed string). Each <swe:CompositePhenomenon> must have a child element <gml:name> with a value of any human-readable text string. Each <swe:CompositePhenomenon> must always be expanded to the list of the constituent scalar properties. The exact collection of individual scalar properties that is used by a service provider to form a certain composite phenomenon shall be a subset of the properties defined in the IOOS Parameter Vocabulary for that composite phenomenon. EXAMPLE 1 (multiple scalar properties): <om:observedProperty> <swe:CompositePhenomenon dimension="4" gml:id="observedproperties1"> <gml:name>Response Observed Properties</gml:name> <swe:component xlink:href="http://mmisw.org/ont/cf/parameter/air_temperature"/> <swe:component xlink:href="http://mmisw.org/ont/cf/parameter/wind_speed"/> <swe:component xlink:href="http://mmisw.org/ont/cf/parameter/wind_gust"/> <swe:component xlink:href="http://mmisw.org/ont/ioos/parameter/dissolved_oxygen"/> </swe:CompositePhenomenon> </om:observedProperty> EXAMPLE 2 (single scalar property): <om:observedProperty> <swe:CompositePhenomenon dimension="1" gml:id="observedproperties1"> <gml:name>Response Observed Properties</gml:name> 63 DRAFT 3/18/2016 <swe:component xlink:href="http://mmisw.org/ont/cf/parameter/wind_speed"/> </swe:CompositePhenomenon> </om:observedProperty> om:featureOfInterest 1…1 Encompasses all spatial and feature-type response metadata assotiated with the CF Feature Type (e.g., timeSeries, timeSeriesProfile, etc). IOOS Convention requires that the GetObservation response keeps the SWE elements the same between all FeatureTypes within <gml:FeatureCollection>: <om:featureOfInterest> <gml:FeatureCollection> <gml:metaDataProperty/> <gml:boundedBy/> <gml:location/> </gml:FeatureCollection> </om:featureOfInterest> gml:metaDataProperty 1…1 Contains the name and codeSpace values for the CF Feature Type: <gml:metaDataProperty> <gml:name codeSpace="http://cf-pcmdi.llnl.gov/documents/cfconventions/1.6/cf-conventions.html#discrete-samplinggeometries">timeSeries</gml:name> </gml:metaDataProperty> gml:boundedBy 1…1 Defines a geographic (lat/lon) Bounding Box of the featureOfInterest. gml:location 1…1 Describes the individual platform/station geographical location information (2D only, always in EPSG::4326). Despite having been “deprecated” (i.e., "not recommended to use") by OGC since GML 3.1.0, the IOOS Convention requires <gml:location> as the least complex and all-sufficient structure among many options of reporting station position. For uniformity, the IOOS Conventions imposes certain constraints on the geospatial metadata representation: both single- and multi-station response must report locations using the same <gml:MultiPoint> structure, i.e. - for single station: <gml:location> <gml:MultiPoint srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:pointMembers> <gml:Point> <gml:name>urn:ioos:station:wmo:41001</gml:name> <gml:pos>34.7 -72.73</gml:pos> </gml:Point> </gml:pointMembers> </gml:MultiPoint> </gml:location> - for multiple stations: <gml:location> <gml:MultiPoint srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> <gml:pointMembers> <gml:Point> <gml:name>urn:ioos:station:wmo:41001</gml:name> <gml:pos>34.7 -72.73</gml:pos> </gml:Point> 64 DRAFT 3/18/2016 <gml:Point> <gml:name>urn:ioos:station:wmo:41004</gml:name> <gml:pos>32.5 -79.09</gml:pos> </gml:Point> <gml:Point> <gml:name>urn:ioos:station:wmo:41008</gml:name> <gml:pos>31.4 -80.87</gml:pos> </gml:Point> </gml:pointMembers> </gml:MultiPoint> </gml:location> om:result 1…1 <gml:name> element shall be used to associate the stationID with the station coordinates in both multi- and single-station responses. This block contains a SWE Data Record for a specific feature type conforming to the corresponding SWE-GetObservation template in Milestone 1.0. 4.2.2.3.2.2 SWE-GetObservation Template The OGC SWE Common Data Model Encoding Standard v2.0 allows data components to be used as a data container as well as a data descriptor, where container defines metadata of a data set and includes the actual property values (“inline” values), while data descriptor defines metadata of a data set but does not include the actual data values. However, the Standard prohibits mixing of both guises in a single data component entity. For example, a single DataArray cannot contain both inline values and block-encoded values. Therefore, the IOOS Convention requires a Result block to include a root DataRecord composed of two basic fields – “stations” and “observationData”. The field "stations" forms a “static” part of the GetObservation response Result block that encompasses all invariable data for all stations and sensors, whereas the field “observationData” draws up a “dynamic” part that encloses observation values varying from sensor to sensor. All data components in the static block must be used as data containers and encoded inline, while the data components in the dynamic block must be used only as data descriptors, and contain a DataArray with block-encoded values: 65 DRAFT 3/18/2016 <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/observationRecord"> <swe2:field name="stations"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/stations"> [ STATIC DATA ] </swe2:DataRecord> </swe2:field> <swe2:field name="observationData"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservationCollection"> [ DYNAMIC DATA (SENSOR OBSERVATIONS) ] </swe2:DataArray> </swe2:field> </swe2:DataRecord> The IOOS Convention requires that each of the following elements in the Result block is provided with a corresponding “definition” attribute: <swe2:DataRecord> <swe2:DataArray> <swe2:DataChoice> <swe2:Text> <swe2:Vector> <swe2:Quantity> <swe2:QuantityRange> <swe2:Time> The “definition” attribute identifies the observed property that the data component represents by using a name. The OGC SWE Common Data Model Encoding Standard v2.0 requires it to map to a controlled term defined in a web accessible dictionary, registry or ontology. The IOOS Convention defines the following vocabularies that have to be used in the “definition” attribute: OGC Definition Service – an OGC register of potentially observable property types and names that is controlled and maintained by the OGC Naming Authority; IOOS Vocabulary and Category Definitions – an MMI vocabulary used for clarifying the meaning of roles, classifiers and other general terms used throughout the SOS web services; IOOS SOS SWE Element Definitions Vocabulary – a narrower MMI vocabulary of definitions that reflect the IOOS Convention for use in standard SOS SWE elements. The value of the “definition” attribute of the same type of element may vary depending on the observed property. The IOOS SWE Templates for Milestone 1.0 along with the MMI vocabularies provide a comprehensive guidance for a use of definitions in IOOS SOS GetObservations document; some examples are shown below: <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/stations"> <swe2:DataRecord id="stationID" definition="http://mmisw.org/ont/ioos/swe_element_type/station"> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:Vector definition=”http://www.opengis.net/def/property/OGC/0/PlatformLocation”> <swe2:Quantity definition=”http://mmisw.org/ont/cf/parameter/latitude”> <swe2:Quantity definition=”http://mmisw.org/ont/cf/parameter/height”> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <swe2:DataRecord id="s" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> 66 DRAFT 3/18/2016 <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservationCollection"> <swe2:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/SensorOrientation"> <swe2:QuantityRange axisID="Z" definition="http://mmisw.org/ont/ioos/swe_element_type/profileBinEdges"> <swe2:Quantity definition=”http://mmisw.org/ont/cf/parameter/height”> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservations"> <swe2:DataChoice definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/profileBins"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/profileHeights"> To ensure the proper linkage between the static and dynamic data, the IOOS Convention requires that each sensor’s ID in the static portion of the result block is linked to sensor observation values (i.e., dynamic data) via an abbreviated sensor URN. That abbreviated URN is composed of the authority, label and component parts of a full sensor’s ID (see the IOOS Conventions for Observing Asset Identifiers) connected with underscores instead of the colons, e.g. sensorID urn:ioos:sensor:wmo:41001:sensor1 transformes into wmo_41001_sensor1. These abbreviated sensor URNs are used as the sensor's DataRecord ID in the static block and the DataChoice item name in the dynamic block. Consequently they also appears in the dynamic <swe:values> encoding, and may thus be used as a look up for the metadata of a given row of the data block. In a similar manner, an abbreviated station ID is composed of the authority and label parts of a full station ID, i.e. the station ID urn:ioos:sensor:wmo:41001 transforms into wmo_41001. The abbreviated station IDs have to be used as the station’s DataRecord ID and correspondent field names. 4.2.2.3.2.2.1 Static Data Block The static information for all stations and sensors in GetObservation response is encompassed within the field “stations” of the root DataRecord element. Each DataRecord’s field may recursively enclose an unlimited number of DataRecords, which makes the static data block a pretty complex structure of nested DataRecords in case of multiple stations and/or sensors, as shown below: 67 DRAFT 3/18/2016 <swe2:DataRecord> <swe2:field name="stations"> <swe2:DataRecord> <swe2:field name="wmo_489"> <swe2:DataRecord id="wmo_489" [ STATION 1 DATA ] <swe2:field name="sensors"> <swe2:DataRecord> <swe2:field name="wmo_489_sensor1"> <swe2:DataRecord id="wmo_489_sensor1" [ STATION 1/SENSOR 1 DATA ] </swe2:DataRecord id="wmo_489_sensor1" </swe2:field name="wmo_489_sensor1"> SENSOR 1 ALL SENSORS FOR STATION 1 […] <swe2:field name="wmo_489_sensorX"> <swe2:DataRecord id="wmo_489_sensorX" [ STATION 1/SENSOR X DATA ] </swe2:DataRecord id="wmo_489_sensorX" </swe2:field name="wmo_489_sensorX"> </swe2:DataRecord> </swe2:field name="sensors"> </swe2:DataRecord id="wmo_489" </swe2:field name="wmo_489"> STATION 1 SENSOR X […] <swe2:field name="wmo_523"> <swe2:DataRecord id="wmo_523" [ STATION N DATA ] <swe2:field name="sensors"> <swe2:DataRecord> <swe2:field name="wmo_523_sensor1"> <swe2:DataRecord id="wmo_523_sensor1" [ STATION N/SENSOR 1 DATA ] </swe2:DataRecord id="wmo_523_sensor1" </swe2:field name="wmo_523_sensor1"> SENSOR 1 ALL SENSORS FOR STATION N […] <swe2:field name="wmo_523_sensorY"> <swe2:DataRecord id="wmo_523_sensorY" [ STATION N/SENSOR Y DATA ] </swe2:DataRecord id="wmo_523_sensorY" </swe2:field name="wmo_523_sensorY"> </swe2:DataRecord> </swe2:field name="sensors"> </swe2:DataRecord id="wmo_523" </swe2:field name="wmo_523"> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> STATION N SENSOR Y Although the IOOS Convention does not prescribe in general how data should be allocated to the static and dynamic parts, i.e. almost any element may be considered as static or dynamic. However, the static part must include stationID, platformLocation, and sensors description fields for each station: <swe2:field name="stations"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/stations"> <swe2:field name="wmo_41001"> <swe2:DataRecord id="wmo_41001" definition="http://mmisw.org/ont/ioos/definition/station"> <swe2:field name="stationID"> An identifier for the platform in a form of URN that conforms to 68 DRAFT 3/18/2016 the IOOS Conventions for Observing Asset Identifiers . </swe2:field> <swe2:field name="platformLocation"> The three-dimensional description of the platform’s location, expressed in latitude, longitude and altitude (height). It may also be described in a dynamic part, if varies from observation to observation. </swe2:field> <swe2:field name="sensors"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensors"> <swe2:field name="wmo_41001_sensor1"> <swe2:DataRecord id="wmo_41001_sensor1" definition="http://mmisw.org/ont/ioos/definition/sensor"> <swe2:field name="sensorID"> An identifier for the sensor in a form of URN that conforms to the IOOS Conventions for Observing Asset Identifiers. It may either use a meaningful name (e.g. "sbe16") or be just a simple, constant string followed by an integer counter such as "sensor1", "sensor2", "salt1", etc. </swe2:field> <swe2:field name="height"> The vertical position of the non-profiling sensor relative to the platformLocation. It may also be described in a dynamic part, if varies among observations. </swe2:field> <swe2:field name="sensorOrientation"> Optional vector parameter, recommended for a profiling sensor such as an ADCP. Indicates the values of sensor’s yaw, pitch, and roll angles. The angles can also be described in a dynamic part, if they vary among observations. </swe2:field> <swe2:field name="sensorLocation"> Describes a profiling sensor position relative to the CRS instead of the platform local frame. </swe2:field> <swe2:field name="profileBins"> Specifies vertical positions of the center and edges for each bin of the binned profile. </swe2:field> <swe2:field name="profileHeights"> Specifies fixed vertical observation positions for a non-binned profile. </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> The IOOS Convention requires that stationID or sensorID is described in the <swe2:Text> element rather than in <swe2:Category>. The value of the <swe2:Text> must be a full station URN as defined in the IOOS Conventions for Observing Asset Identifiers, as shown in the examples below: <swe2:field name="stationID"> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:value>urn:ioos:station:wmo:41001</swe2:value> </swe2:Text> </swe2:field> 69 DRAFT 3/18/2016 <swe2:field name="sensorID"> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:value>urn:ioos:sensor:wmo:41001:sensor1</swe2:value> </swe2:Text> </swe2:field> The platformLocation includes three-dimensional definition of the platform geo-spatial position. The platform’s position has to be described as a vector that specifies a platform referenceFrame, and associates it with the platform’s unique localFrame for sensors’ positioning. The referenceFrame is defined by the pair of the platform’s coordinates (latitude and longitude), and the platform height relative to some datum level. For the referenceFrame definition, the IOOS Convention has developed a new compound CRS that combines the EPSG::4326 (WGS84) for horizontal coordinates, and a vertical CRS for the platform’s vertical position, which uses height as a datum. The Convention requires that for floating surface buoys, this compound CRS includes the EPSG::5829 vertical CRS, which uses height above the Instantanious Water Level as a datum. For a tide gauge or a platform at a fixed location relative to the Geoid (MSL), the vertical CRS must be EPSG::4979 (referenceFrame="http://www.opengis.net/def/crs-compound?1=http://www.opengis.net/def/crs/EPSG/0/4326& 2=http://www.opengis.net/def/crs/EPSG/0/4979). The following fragment of the IOOS Milestone 1.0 Template illustrates the platform’s location description: <swe2:field name="platformLocation"> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/PlatformLocation" referenceFrame="http://www.opengis.net/def/crs-compound?1=http://www.opengis.net/def/crs/EPSG/0/4326& 2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41001_frame"> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg"/> <swe2:value>32.382</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg"/> <swe2:value>-75.415</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m"/> <swe2:value>0.5</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> In regard to the position of the sensors located at the platform, the IOOS Convention only requires that sensor height relative to the platform’s localFrame is specified for a non-profiling sensor. The following fragment of the IOOS Milestone 1.0 Template illustrates just that simplified approach to sensors’ location description; if more information about sensor orientation and relative position is available, then it must be recorded in accordance with the SWE Common v2.0 specification: 70 DRAFT 3/18/2016 <swe2:field name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z" referenceFrame="#wmo_41001_frame"> <swe2:uom code="m" /> <swe2:value>5</swe2:value> </swe2:Quantity> </swe2:field> 4.2.2.3.2.2.1.1 Common QA/QC information It has been a long-standing IOOS’ goal to implement the principles of Quality Assurance of Real Time Ocean Data (QARTOD) in the IOOS SOS, and the IOOS Convention has taken a first step in that direction by providing a guidance (based on the best practices of the IOOS data providers like NDBC) of reporting QA/QC information in the Milestone 1.0 templates. However, since the QARTOD has yet to develop the authoritative QA/QC procedures for all IOOS observed properties and feature types, the IOOS Convention provisions are not mandatory at the moment, and Milestone 1.0 templates should be considered as sort of “best practices” recommendations, mostly based on the NDBC’s system of pre-defined QA/QC flags (tockens). The static data block in GetObservations document may include any common QA/QC information on the station or sensor that is invariable among the observations: <swe2:field name="stationID"> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:quality> Any valid static quality information about this station can be placed here. </swe2:quality> <swe2:value>urn:ioos:station:wmo:41001</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="sensorID"> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:quality> Any valid static quality information about this sensor can be placed here. </swe2:quality> <swe2:value>urn:ioos:station:wmo:41001:sensor2</swe2:value> </swe2:Text> </swe2:field> 4.2.2.3.2.2.1.2 Profiling sensor specifics For profiling sensor, just the indication of the sensor’s upward or downward shift relative to the platform position is not sufficient, and the IOOS Convention provides for more precise description of sensor’s position and orientation, including description of bins and depths for binned profile sensors. Although the Convention does not require a full description of a sensor’s orientation, the Convention strongly encourages the indication of this information for all vertical profiling sensors (e.g. ADCP). 71 DRAFT 3/18/2016 The IOOS Convention specifies a position of a profiling sensor in reference to a CRS rather than to the platform itself, just because the relative sensor’s position in the platform local frame is likely to vary from observation to observation, whereas the absolute coordinates (i.e. latitude, longitude, and height) may be approximated as static. The sensor local frame is referenced to the CRS in the same manner as the station’s one: <swe2:field name="sensorLocation"> <swe2:Vector definition=http://www.opengis.net/def/property/OGC/0/SensorLocation referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41001_sensor1_profile_frame"> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg" /> <swe2:value>32.382</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg" /> <swe2:value>-75.415</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m" /> <swe2:value>0.0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> The sensor’s orientation has to be reported in terms of the yaw, pitch and roll angles using the CF Conventions standard name parameters: platform_orientation (i.e. yaw angle), platform_pitch_angle, and platform_roll_angle. Just for reference, the figure below depicts a relation of those angles: The following fragment of the IOOS Milestone 1.0 GetObservations Template for timeSeriesProfile provides more detailed guidance for the sensor orientation description: <swe2:field name="sensorOrientation"> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/SensorOrientation" 72 DRAFT 3/18/2016 referenceFrame="http://www.opengis.net/def/crs/OGC/0/ENU"> <swe2:coordinate name="platform_orientation"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/platform_orientation" axisID="Z"> <swe2:uom code="deg" /> <swe2:value>0</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="platform_pitch_angle"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/platform_pitch_angle" axisID="X"> <swe2:uom code="deg" /> <swe2:value>90</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="platform_roll_angle"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/platform_roll_angle" axisID="Y"> <swe2:uom code="deg" /> <swe2:value>0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> If sensor position or orientation is not stable in time, and differs with each individual observation, it has to be described in the dynamic data block of the GetObservations document instead of the static data block. In such case, the orientation parameter values must be block-encoded along with other observations data (details of the block-encoded data representation in GetObservations document are provided in section 4.2.2.3.2.2.2). For binned profiling sensors, the IOOS Convention specifies bins and depths through the description of the vertical positions of each bin center with corresponding top and bottom edges. Despite the fact that the binned profile description is located in the static data block, the bins’ and depths’ values must not be encoded inline but shall be encoded as a data array (i.e. block-encoded) instead (details of the blockencoded data representation in GetObservations document are provided in section 4.2.2.3.2.2.2). To allow for ragged arrays of data from upward looking ADCP sensors, the dimension of the array shall correspond to the number of binned observations for this sensor reported in the dynamic data section: <swe2:field name="profileBins"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/profileBins"> <swe2:description>Array of synchronous observation locations in a profile</swe2:description> <swe2:elementCount> <swe2:Count> <swe2:value>5</swe2:value> </swe2:Count> </swe2:elementCount> <swe2:elementType name="profileBinDescription"> <swe2:DataRecord> <swe2:field name="binCenter"> <swe2:Quantity axisID="Z" definition="http://mmisw.org/ont/cf/parameter/height" referenceFrame="#wmo_41001_sensor1_frame"> <swe2:uom code="m" /> </swe2:Quantity> </swe2:field> <swe2:field name="binEdges"> 73 DRAFT 3/18/2016 <swe2:QuantityRange axisID="Z" definition="http://mmisw.org/ont/ioos/swe_element_type/profileBinEdges" referenceFrame="#wmo_41001_sensor1_frame"> <swe2:uom code="m" /> </swe2:QuantityRange> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:encoding> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;" /> </swe2:encoding> <swe2:values> -10.0,-5.0 -15.0 -20.0,-15.0 -25.0 -30.0,-25.0 -35.0 -40.0,-35.0 -45.0 -50.0,-45.0 -55.0 </swe2:values> </swe2:DataArray> </swe2:field> Similar to the description of binned sensors, the IOOS Convention requires a description of the fixed vertical observation positions in a form of data array with the dimension that shall correspond to the number of observations for this sensor reported in the dynamic data section: 74 DRAFT 3/18/2016 <swe2:field name="profileHeights"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/definition/profileHeights"> <swe2:elementCount> <swe2:Count> <swe2:value>3</swe2:value> </swe2:Count> </swe2:elementCount> <swe2:elementType name="profileDefinition"> <swe2:DataRecord> <swe2:field name="height"> <swe2:Quantity axisID="Z" definition="http://mmisw.org/ont/cf/parameter/height" referenceFrame="#wmo_41001_sensor2_profile_frame"> <swe2:uom code="m" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:encoding> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;" /> </swe2:encoding> <swe2:values> -5.0 -10.0 -20.0 </swe2:values> </swe2:DataArray> </swe2:field> 4.2.2.3.2.2.2 Dynamic Data (Sensor Observations) Block The dynamic data block contains all measurements made by sensors and any other dynamic data (e.g. location for mobile sensors) from each sensor requested in GetObservation operation. In conformity with the OGC SWE Common Data Model Encoding Standard v2.0, the dynamic block must not contain any inline encoded data. The simplified outline of the dynamic data block is presented below. The outline contains all the required elements with a brief description; the detailed description of the critical elements follows: 75 DRAFT 3/18/2016 <swe2:field name="observationData"> <swe2: DataArray definition="http://mmisw.org/ont/ioos/definition/sensorObservationCollection"> <swe2:elementCount> Defines the number of array components, i.e. the number of records in <swe2:values> below. </swe2:elementCount> <swe2:elementType name="observations"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensorObservations"> The root dynamic data record that contains all dynamic observation descriptors for each sensor. <swe2:field name="time"> The samplingTime, which defines the instants of time when observations were taken. </swe2:field> <swe2:field name="sensor"> Defines the dynamic data for all reported sensors via DataChoice element. <swe2:DataChoice definition="http://mmisw.org/ont/ioos/definition/sensors"> <swe2:item name="wmo_41001_sensor1"> Defines observedProperties for the “sensor1” located at the station “wmo_41001” <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> <swe2:field name="air_temperature"/> <swe2:field name="wind_speed"/> <swe2:field name="wind_to_direction"/> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41001_sensor2"> Defines observedProperties for the “adcpProfile_sensor2” located at the station “wmo_41001” <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> <swe2:field name="adcpProfile"> Contains nested DataArray for profile dynamic data to encode observations at multiple heights in one record <swe2:DataArray definition="http://mmisw.org/ont/ioos/definition/profile"> <swe2:description>Array of synchronous observations in a Profile</swe2:description> </swe2:DataArray definition="http://mmisw.org/ont/ioos/definition/profile"> <swe2:field name="adcpProfile"> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41002_sensor1"> Defines observedProperties for the “sensor1” located at the station “wmo_41002” <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> <swe2:field name="air_temperature"/> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41002_sensor2"> Defines observedProperties for the “sensor2” located at the station “wmo_41002” <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> <swe2:field name="sea_water_temperature"/> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41003_sensor1"> Defines observedProperties for the “sensor1” located at the station “wmo_41003” <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> <swe2:field name="air_temperature"/> </swe2:DataRecord> </swe2:item> </swe2:DataChoice> </swe2:field> 76 DRAFT 3/18/2016 </swe2:DataRecord> <swe2:encoding> Defines used SWE Common encodings, including data value separators </swe2:encoding> <swe2:values> Encompasses data values from all sensors for all sampling time instances. </swe2:values> <swe2: DataArray> <swe2:field> The “time” field of the observations DataRecord is listed outside of DataChoice construct as far as sampling time is related to all sensors; however, if sampling time is defined differently for some sensors it should be be reported inside the respective DataChoice <swe2:item> element. The sampling time must be encoded as an ISO8601 UTC (Z) TimeInstant string: <swe2:field name="time"> <swe2:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> <swe2:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" /> </swe2:Time> <swe2:field> As each sensor may perform various set of observations, and thus has to be reported in a separate manner, the IOOS Convention requires that DataChoice structure is used to select a sensor and the set of observation fields to be reported in each record from that sensor in the <swe2:values> element of the DataArray. To ensure the proper linkage to the static data block, the item names must correspond to the sensor names in the static sensors’ DataRecord; the same names are then repeated in the sensor records in the <swe2:values> block. Although specifying the missing or out of range values is completely optional, it shall follow the SWECommon standard requirements, if implemented. In general, a <swe2:Quantity> may contain any number of <swe:nilValue> elements for any nilValue reason, for example: <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> ... <swe2:nilValues> <swe2:NilValues> <swe2:nilValue reason="http://www.opengis.net/def/nil/OGC/0/BelowDetectionRange">-9999</swe2:nilValue> <swe2:nilValue reason="http://www.opengis.net/def/nil/OGC/0/AboveDetectionRange">9999</swe2:nilValue> <swe2:nilValue reason="http://www.opengis.net/def/nil/OGC/0/OutOfService">-1</swe2:nilValue> <swe2:nilValue reason="http://www.opengis.net/def/nil/OGC/0/missing">8888</swe2:nilValue> </swe2:NilValues> </swe2:nilValues> ... </swe2:Quantity> Each DataChoice item contains a separate DataRecord that describes the dynamic sensor features such as observedProperty, units of measure, etc.: <swe2:field name=”sensor”> <swe2:DataChoice definition="http://mmisw.org/ont/ioos/definition/sensors"> <swe2:item name="wmo_41001_sensor1"> 77 DRAFT 3/18/2016 <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> <swe2:field name="air_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> <swe2:field name="wind_speed"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_speed"> <swe2:uom code="m/s" /> </swe2:Quantity> </swe2:field> <swe2:field name="wind_to_direction"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_to_direction"> <swe2:uom code="degrees" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41001_sensor2"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> <swe2:field name="sea_water_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"> <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> <swe2:field name="dissolved_oxygen"> <swe2:Quantity definition="http://mmisw.org/ont/ioos/parameter/dissolved_oxygen"> <swe2:uom code="mg/L" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41002_sensor1"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> <swe2:field name="air_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41002_sensor2"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> <swe2:field name="sea_water_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"> <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41003_sensor1"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> 78 DRAFT 3/18/2016 <swe2:field name="air_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> </swe2:DataChoice> </swe2:field> The <swe2:encoding> element defines all kinds of separators for records and values in the <swe2:values> block. To facilitate the development of the SOS client applications, the IOOS Convention requires that the <swe2:encoding> element has always be included into GetObservation response, and strongly recommends to use the standard CSV separators, such as "." for decimal separation, "," for tockens, and LF (Line Feed) – for blocks separation. At that, the special ASCII symbols used in the capacity of separators must be encoded with the corresponding standard HTML Escape Sequences; for example, LF (Line Feed) separator must be replaced with “&#10;”: <swe2:encoding> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;" /> </swe2:encoding> The <swe2:values> block reports the observation values as they were defined in the previous sections of the dynamic data block. The number of records matches the <swe2:elementCount> value; each record contains the observation sampling time, name of the sensor, and the observed values as defined in the DataChoice <swe2:item> element associated with that sensor. The IOOS Convention requires that, in contrast to the <swe2:TextEncoding> element above, the special characters used as separators stay unencoded in the <swe2:values> block, e.g. Line Feed must not be converted into”&#10;” but must be used as-is instead. The IOOS Convention also requires that the sensor names unambiguously correspond to the DataChoice item names: <swe2:values> 2009-05-23T00:00:00Z,wmo_41001_sensor1,15.4,2.0,280 2009-05-23T01:00:00Z,wmo_41001_sensor1,15.8,1.8,121 2009-05-23T02:00:00Z,wmo_41001_sensor1,15.6,1.0,142 2009-05-23T00:00:00Z,wmo_41001_sensor2,5.6,8.0 2009-05-23T01:00:00Z,wmo_41001_sensor2,5.8,8.2 2009-05-23T02:00:00Z,wmo_41001_sensor2,5.7,8.5 2009-05-23T00:00:00Z,wmo_41002_sensor1,16.2 2009-05-23T01:00:00Z,wmo_41002_sensor1,16.4 2009-05-23T02:00:00Z,wmo_41002_sensor1,16.5 2009-05-23T00:00:00Z,wmo_41002_sensor2,6.1 2009-05-23T01:00:00Z,wmo_41002_sensor2,6.3 2009-05-23T02:00:00Z,wmo_41002_sensor2,6.5 2009-05-23T01:00:00Z,wmo_41003_sensor1,15.8 </swe2:values> 79 DRAFT 3/18/2016 4.2.2.3.2.2.2.1 Observation-specific QA/QC information The dynamic data block of GetObservation response may contain observation specific QA/QC information, encoded in the same DataArray with other observation values. The QA/QC flags pertaining to all observed properties for a certain sensor may be described in <swe2:elementCount> element of the DataArray definition before description of observations: <swe2:DataArray definition="http://mmisw.org/ont/ioos/definition/sensorObservationCollection"> <swe2:elementCount> <swe2:Count> <swe2:quality> <swe2:Category> <swe2:constraint> <swe2:AllowedTokens> <swe2:value>a</swe2:value> <swe2:value>b</swe2:value> <swe2:value>c</swe2:value> </swe2:AllowedTokens> </swe2:constraint> </swe2:Category> </swe2:quality> <swe2:value>13</swe2:value> </swe2:Count> </swe2:elementCount> <swe2:elementType name="observations"> […] </swe2:elementType> […] </swe2:DataArray> The QA/QC flags pertaining to a specific observed property may be described in a similar manner in the corresponding part of the dynamic data block of the GetObservation response. Just like the observed property values, the QA/QC flag definitions must only contain data descriptors, and the flag values must be block-encoded. In order to define a composite flag that may have several components with various values, multiple <swe2:quality> elements have to be used inside a corresponding <swe2:Quantity> element instead of a single multi-dimensional DataArray as the SWE Common data model prohibits the use of embedded DataArrays inside in <swe2:Quantity>. The fragment of the Milestone1.0 template below illustrates that concept for a 2-component DQA flag; to simplify the description, the second DQA component just references the values defined in the description of the first component: <swe2:DataArray definition="http://mmisw.org/ont/ioos/definition/sensorObservationCollection"> […] <swe2:elementType name="observations"> […] <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensorObservations"> <swe2:field name="sensor"> <swe2:DataChoice definition="http://mmisw.org/ont/ioos/definition/sensors"> <swe2:item name="wmo_41001_sensor1"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> 80 DRAFT 3/18/2016 <swe2:field name="air_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <swe2:quality> <swe2:Category definition="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"> <swe2:label>EQC Flag</swe2:label> <swe2:codeSpace xlink:href="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"/> <swe2:constraint> <swe2:AllowedTokens id="ndbcEqcFlags"> <swe2:value>T</swe2:value> <swe2:value>M</swe2:value> <swe2:value>W</swe2:value> <swe2:value>D</swe2:value> <swe2:value>S</swe2:value> <swe2:value>V</swe2:value> <swe2:value>L</swe2:value> <swe2:value>H</swe2:value> <swe2:value>R</swe2:value> </swe2:AllowedTokens> </swe2:constraint> </swe2:Category> </swe2:quality> <swe2:quality> <swe2:Category definition="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"> <swe2:label>DQA Flag 1</swe2:label> <swe2:codeSpace xlink:href="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"/> <swe2:constraint> <swe2:AllowedTokens id="ndbcDqaFlags"> <swe2:value>a</swe2:value> <swe2:value>b</swe2:value> <swe2:value>d</swe2:value> <swe2:value>f</swe2:value> <swe2:value>g</swe2:value> <swe2:value>i</swe2:value> <swe2:value>j</swe2:value> <swe2:value>k</swe2:value> <swe2:value>m</swe2:value> <swe2:value>n</swe2:value> <swe2:value>p</swe2:value> <swe2:value>q</swe2:value> <swe2:value>r</swe2:value> <swe2:value>s</swe2:value> <swe2:value>t</swe2:value> <swe2:value>v</swe2:value> <swe2:value>w</swe2:value> <swe2:value>x</swe2:value> <swe2:value>y</swe2:value> <swe2:value>z</swe2:value> </swe2:AllowedTokens> </swe2:constraint> </swe2:Category> </swe2:quality> <swe2:quality> <swe2:Category definition="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"> <swe2:label>DQA Flag 2</swe2:label> <swe2:codeSpace xlink:href="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"/> <swe2:constraint xlink:href="#ndbcDqaFlags"/> </swe2:Category> </swe2:quality> 81 DRAFT 3/18/2016 <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> […] </swe2:DataChoice> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:values> 2009-05-23T00:00:00Z,a,wmo_41001_sensor1,15.4,T,a,r,2.0,280 2009-05-23T01:00:00Z,b,wmo_41001_sensor1,15.8,M,j,j,1.8,121 2009-05-23T02:00:00Z,c,wmo_41001_sensor1,15.6,M,,,1.0,142 2009-05-23T00:00:00Z,a,wmo_41001_sensor2,5.6,8.0 2009-05-23T01:00:00Z,b,wmo_41001_sensor2,5.8,8.2 2009-05-23T02:00:00Z,c,wmo_41001_sensor2,5.7,8.5 2009-05-23T00:00:00Z,a,wmo_41002_sensor1,16.2 2009-05-23T01:00:00Z,b,wmo_41002_sensor1,16.4 2009-05-23T02:00:00Z,c,wmo_41002_sensor1,16.5 2009-05-23T00:00:00Z,a,wmo_41002_sensor2,6.1 2009-05-23T01:00:00Z,b,wmo_41002_sensor2,6.3 2009-05-23T02:00:00Z,c,wmo_41002_sensor2,6.5 2009-05-23T01:00:00Z,a,wmo_41003_sensor1,15.8 </swe2:values> </swe2:DataArray> 4.2.2.3.2.2.2.2 Profiling sensor observation-specific report The dynamic data block for profiling sensor has several important specifics that are stipulated by the ability of the sensor to perform a number of simultaneous observations at multiple points of the vertical axis. The IOOS Convention requires that a nested DataArray element is used for each profiling sensor description in a DataChoice structure in order to provide for encoding of multiple simultaneous observations in one record. The value that specifies the dimension of that inner DataArray must always be omitted in the inline <swe2:elementCount>; instead, it must be specified in each of the <swe2:values> block-encoded records to allow indication of the number of heights being encoded in this record. Another <swe2:Count> element in a profileIndex or binIndex field that preceeds each set of observation values is required by the IOOS Convention to indicate which height/bin is being reported (binIndex and profileIndex correspond respectively to profileBins or profileHeights in the static data block). Similar to the non-profiling sensors, the names of the DataChoice items must correspond to the sensor names in the static sensors’ DataRecord in order to ensure the proper linkage to the static data block; the same names shall then be repeated in the sensor records in the <swe2:values> block: <swe2:DataChoice definition="http://mmisw.org/ont/ioos/definition/sensors"> <swe2:item name="wmo_41001_sensor1"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/sensor"> <swe2:field name="adcpProfile"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/definition/profile"> <swe2:description>Array of synchronous observations in a Profile</swe2:description> <swe2:elementCount> <swe2:Count /> 82 DRAFT 3/18/2016 </swe2:elementCount> <swe2:elementType name="profileObservation"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/profileObservation"> <swe2:field name="profileIndex"> <swe2:Count definition="http://mmisw.org/ont/ioos/definition/profileIndex"> <swe2:constraint> <swe2:AllowedValues> <swe2:interval>0 4</swe2:interval> </swe2:AllowedValues> </swe2:constraint> </swe2:Count> </swe2:field> <swe2:field name="direction_of_sea_water_velocity"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/direction_of_sea_water_velocity"> <swe2:uom code="deg" /> </swe2:Quantity> </swe2:field> <swe2:field name="sea_water_speed"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_speed"> <swe2:uom code="cm/s" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:elementType> </swe2:DataArray> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41001_sensor2"> <swe2:DataRecord> <swe2:field name="thermisterProfile"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/definition/profile"> <swe2:elementCount> <swe2:Count /> </swe2:elementCount> <swe2:elementType name="profileObservation"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/definition/profileObservation"> <swe2:field name="binIndex"> <swe2:Count definition="http://mmisw.org/ont/ioos/definition/profileIndex"> <swe2:constraint> <swe2:AllowedValues> <swe2:interval>0 2</swe2:interval> </swe2:AllowedValues> </swe2:constraint> </swe2:Count> </swe2:field> <swe2:field name="sea_water_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"> <swe2:uom code="Cel" /> </swe2:Quantity> 83 DRAFT 3/18/2016 </swe2:field> </swe2:DataRecord> </swe2:elementType> </swe2:DataArray> </swe2:field> </swe2:DataRecord> </swe2:item> </swe2:DataChoice> 4.3 SERVICE IMPLEMENTATION 4.3.1 SOS End Points 4.3.1.1 SOS 52 North End Point 4.3.1.1.1 Associated Interface Interface Name Description SOS 52N 4.3.1.1.2 Communication Protocol Name Description Version Location HTTP Hypertext Transfer Protocol 1.1 http://www.w3.org/Protocols/ 4.3.1.1.3 Messaging Protocol Name Description Version Location 4.3.1.1.4 Network Address IP Address TBD 4.3.1.1.5 End Point-Specific Qualities of Service Qualities of Service identified for the web service in Section 4.1.5 also apply to the end point. No end pointspecific qualities have been identified. 4.3.1.2 ncSOS End Point 4.3.1.2.1 Associated Interface Interface Name ncSOS 84 DRAFT 3/18/2016 Description This service provides SOS access to data in netCDF files. 4.3.1.2.2 Communication Protocol Name Description Version Location HTTP Hypertext Transfer Protocol 1.1 http://www.w3.org/Protocols/ 4.3.1.2.3 Messaging Protocol Name Description Version Location 4.3.1.2.4 Network Address IP Address TBD 4.3.1.2.5 End Point-Specific Qualities of Service Qualities of Service identified for the web service in Section 4.1.5 also apply to the end point. No end pointspecific qualities have been identified. 5 APPENDIXES 5.1 SWE Common Templates Milestone 1.0 5.1.1 TimeSeries records for single station with a single sensor <!-- This template is an example of a SWE Data Record composed of static and dynamic fields for --> <!-- a single station with a single sensor. It is a degenerate case of the multi station, multi --> <!-- sensor template.--> <!-- --> <!-- Most any element may be static or dynamic, but the static fields must be encoded inline, while --> <!-- The dyamic elements must be block encoded in the data array. --> <!-- --> <!-- Description of data --> <!-- SWE DataRecord containing 1 Station: --> <!-- Station 1 has 1 sensors --> <!-- This is an example of a degenerate case which requires a dummy item in the data choice since --> <!-- data choice must have 2 or more items. --> <swe2:DataRecord xmlns:swe2="http://www.opengis.net/swe/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/swe/2.0 http://schemas.opengis.net/sweCommon/2.0/swe.xsd" definition="http://mmisw.org/ont/ioos/swe_element_type/observationRecord"> 85 DRAFT 3/18/2016 <!-- STATIC DATA --> <!-- This field "stations" contains static data for all stations and sensors in the response --> <!-- Static data is linked to dynamic data (sensor observation values) via an abbreviated, --> <!-- underscored sensor URN. For example, urn:ioos:sensor:wmo:41001:sensor1 becomes --> <!-- wmo_41001_sensor1 --> <!-- This abbreviated URN is used as the sensor's DataRecord id in the static block and the --> <!-- DataChoice item name in the dynamic block. Consequently it also appears in the dynamic --> <!-- swe:values encoding. And may thus be used as a look up for the metadata of a given row --> <!-- of the data block --> <!-- All fields in the static block must include inline values. --> <!-- All fields in the dynamic block must not include inline values. --> <swe2:field name="stations"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each station shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/stations"> <!-- Static data for the first station, urn:ioos:station:wmo:41001 --> <!-- Required elements include for each station: stationID, platformLocation, sensors --> <swe2:field name="wmo_41001"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a station shall be defined --> <swe2:DataRecord id="wmo_41001" definition="http://mmisw.org/ont/ioos/swe_element_type/station"> <swe2:field name="stationID"> <!-- IoosTech Convention: --> <!-- The text element containing the station id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:value>urn:ioos:station:wmo:41001</swe2:value> </swe2:Text> </swe2:field> <!-- The platformLocation may be defined here, statically, or specified in the dynamic --> <!-- section. In either case, all coordinates must be specified inline or block encoded. --> <!-- They encoding can not be split to save bandwidth in the response. --> <swe2:field name="platformLocation"> <!-- Field: platformLocation; --> <!-- The location of the platform relative to WGS 84 (Horizontal) and Instantaneous Water Level (Vertical). --> <!-- Each sensor will specify a height relative to the platform location. If complete orientation and --> <!-- relative position are available for a sensor, SWE 2.0 clearly defines how to record it. Generally, --> <!-- for IOOS buoy instruments we believe just specifying the height is the appropriate solution. --> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/PlatformLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41001_frame"> <!-- Vector: --> <!-- The coordinate vector defining the station location in the specified reference frame. --> <!-- --> <!-- For floating, surface buoys a new compound coordinate reference system has been developed --> <!-- which combines the WGS84 for horizontal (GPS) latitude and longitude CRS with a vertical CRS --> <!-- which uses height in above the Instantanious Water Level as a datum. --> <!-- --> <!-- For a tide gauge or a station at a fixed location relative to the Geoid (MSL), the CRS should be: --> <!-- EPSG::4979 referenceFrame="http://www.opengis.net/def/crs/EPSG/0/4979" --> <!-- --> <!-- Each stations localFrame must be unique. --> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg" /> <swe2:value>32.382</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> 86 DRAFT 3/18/2016 <swe2:uom code="deg" /> <swe2:value>-75.415</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m" /> <swe2:value>0.5</swe2:value> <!-- Zero height is at water level in the IOOS Buoy CRS. All sensors locations should be a height --> <!-- (vertical upward) relative to this reference frame --> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <!-- Static data for all sensors on this station --> <swe2:field name="sensors"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <swe2:field name="wmo_41001_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41001_sensor1" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- Field: sensorID --> <!-- The sensorID urn may use a meaningful "component" name (eg, "sbe16"); or, --> <!-- if not available, a simple, constant string followed by an integer counter --> <!-- such as "sensor1", "sensor2", "salt1", etc. --> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:value>urn:ioos:sensor:wmo:41001:sensor1</swe2:value> </swe2:Text> </swe2:field> <!-- Height is generally a static field so we demonstrate its use here. It can be --> <!-- defined statically or dynamically. --> <swe2:field name="height"> <!-- The location of the sensor relative to the platform --> <!-- We don't currently have enough information about orientation and relative position --> <!-- of sensors on a platform to define a sensor reference frame, but it is certainly --> <!-- possible to do if and when that is needed. --> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z" referenceFrame="#wmo_41001_frame"> <swe2:uom code="m" /> <swe2:value>5</swe2:value> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> 87 DRAFT 3/18/2016 <!-- DYNAMIC DATA (SENSOR OBSERVATIONS) --> <!-- All measurements made by sensors and any other dynamic data (e.g. location for mobile sensors) --> <!-- are encoded in a DataArray. Again, sensor field name in the static DataRecord above corresponds to --> <!-- DataChoice item name in the dynamic DataArray --> <swe2:field name="observationData"> <!-- IoosTech Convention: --> <!-- The field containing the dynamic data from each sensor shall contain a DataArray defined as such--> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservationCollection"> <!-- Count of records in swe:values --> <swe2:elementCount> <swe2:Count> <swe2:value>3</swe2:value> </swe2:Count> </swe2:elementCount> <!-- Definition of fields in the DataArray --> <swe2:elementType name="observations"> <!-- IoosTech Convention: --> <!-- The data record containing the dynamic observation descriptors for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservations"> <!-- Time is included for all sensor so it is listed first and is outside of DataChoice. --> <!-- If time is defined differently for some sensors it could be moved inside the data --> <!-- but this is uncommon. --> <swe2:field name="time"> <swe2:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> <swe2:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" /> </swe2:Time> </swe2:field> <!-- Since different observations are made by each sensor, DataChoice is used to select --> <!-- a sensor and the set of observation fields for each record from that sensor in the --> <!-- block encoded values of the data array. --> <swe2:field name="sensor"> <!-- IoosTech Convention: --> <!-- The data array shall contain one field with a DataChoice defined as sensor records --> <swe2:DataChoice definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <!-- DataChoice for wmo 41001's sensor1 --> <!-- Dynamic sensor observations are linked to static data using the DataChoice --> <!-- item name: wmo_41001_sensor1 --> <swe2:item name="wmo_41001_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the dynamic observation descriptors for a sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <!-- wmo_41001_sensor1's observed properties --> <swe2:field name="air_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> <swe2:field name="wind_speed"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_speed"> <swe2:uom code="m/s" /> </swe2:Quantity> </swe2:field> <swe2:field name="wind_to_direction"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_to_direction"> <swe2:uom code="degrees" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> 88 DRAFT 3/18/2016 </swe2:item> <swe2:item name="dummy_item"/> <!-- Since DataChoice must contain 2 or more items add a dummy item which is never --> <!-- Used in the actual encoding block. We view this as a mistake in the SWE specification --> </swe2:DataChoice> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:encoding> <!-- SWE encoding and data values --> <!-- IoosTech Convention: --> <!-- swe:encoding *must* be always specified exactly as described below, --> <!-- to avoid the need to have fully general parsers that interpret --> <!-- swe:TextEncoding. That is, parsers may hard-code this particular --> <!-- swe:TextEncoding specification. --> <!-- --> <!-- About DataChoice from SWE Common 2.0: --> <!-- 9.2.5 Rules for DataChoice --> <!-- A “DataChoice” is encoded with the text method by providing the name of the selected item --> <!-- before the item values themselves. The name used shall correspond to the “name” attribute --> <!-- of the “item” property element that describes the structure of the selected item. --> <!-- --> <!-- IoosTech Convention: --> <!-- The name encoded for by data choice must match both the static sensor field name --> <!-- as well as the name attribute of the data choice item in the dynamic data. --> <!-- --> <!-- This data stream interleaves different types of messages separated by the block separator --> <!-- character. The element type is a “DataChoice” which means that each block is composed of --> <!-- the item name, followed by values of the item. This example also demonstrates that items --> <!-- of a choice can be of different types and length. --> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;" /> </swe2:encoding> <swe2:values> 2009-05-23T00:00:00Z,wmo_41001_sensor1,15.4,2.0,280 2009-05-23T01:00:00Z,wmo_41001_sensor1,15.8,1.8,121 2009-05-23T02:00:00Z,wmo_41001_sensor1,15.6,1.0,142 </swe2:values> </swe2:DataArray> </swe2:field> </swe2:DataRecord> 5.1.2 TimeSeries records for multiple stations <!-- This template is an example of a SWE Data Record composed of static and dynamic fields for --> <!-- multiple stations with multiple sensors --> <!-- --> <!-- Most any element may be static or dynamic, but the static fields must be encoded inline, while --> <!-- The dyamic elements must be block encoded in the data array. --> <!-- --> <!-- Description of data --> <!-- SWE DataRecord containing 3 Stations: --> <!-- Station 1 has 2 sensors --> 89 DRAFT 3/18/2016 <!-- Station 2 has 2 sensors --> <!-- Station 3 has 1 sensors --> <swe2:DataRecord xmlns:swe2="http://www.opengis.net/swe/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/swe/2.0 http://schemas.opengis.net/sweCommon/2.0/swe.xsd" definition="http://mmisw.org/ont/ioos/swe_element_type/observationRecord"> <!-- STATIC DATA --> <!-- This field "stations" contains static data for all stations and sensors in the response --> <!-- Static data is linked to dynamic data (sensor observation values) via an abbreviated, --> <!-- underscored sensor URN. For example, urn:ioos:sensor:wmo:41001:sensor1 becomes --> <!-- wmo_41001_sensor1 --> <!-- This abbreviated URN is used as the sensor's DataRecord id in the static block and the --> <!-- DataChoice item name in the dynamic block. Consequently it also appears in the dynamic --> <!-- swe:values encoding. And may thus be used as a look up for the metadata of a given row --> <!-- of the data block --> <!-- All fields in the static block must include inline values. --> <!-- All fields in the dynamic block must not include inline values. --> <swe2:field name="stations"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each station shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/stations"> <!-- Static data for the first station, urn:ioos:station:wmo:41001 --> <!-- Required elements include for each station: stationID, platformLocation, sensors --> <swe2:field name="wmo_41001"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a station shall be defined --> <swe2:DataRecord id="wmo_41001" definition="http://mmisw.org/ont/ioos/swe_element_type/station"> <swe2:field name="stationID"> <!-- IoosTech Convention: --> <!-- The text element containing the station id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:value>urn:ioos:station:wmo:41001</swe2:value> </swe2:Text> </swe2:field> <!-- The platformLocation may be defined here, statically, or specified in the dynamic --> <!-- section. In either case, all coordinates must be specified inline or block encoded. --> <!-- They encoding can not be split to save bandwidth in the response. --> <swe2:field name="platformLocation"> <!-- Field: platformLocation; --> <!-- The location of the platform relative to WGS 84 (Horizontal) and Instantaneous Water Level (Vertical). --> <!-- Each sensor will specify a height relative to the platform location. If complete orientation and --> <!-- relative position are available for a sensor, SWE 2.0 clearly defines how to record it. Generally, --> <!-- for IOOS buoy instruments we believe just specifying the height is the appropriate solution. --> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/PlatformLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41001_frame"> <!-- Vector: --> <!-- The coordinate vector defining the station location in the specified reference frame. --> <!-- --> <!-- For floating, surface buoys a new compound coordinate reference system has been developed --> <!-- which combines the WGS84 for horizontal (GPS) latitude and longitude CRS with a vertical CRS --> <!-- which uses height in above the Instantanious Water Level as a datum. --> <!-- --> <!-- For a tide gauge or a station at a fixed location relative to the Geoid (MSL), the CRS should be: --> <!-- EPSG::4979 referenceFrame="http://www.opengis.net/def/crs/EPSG/0/4979" --> 90 DRAFT 3/18/2016 <!-- --> <!-- Each stations localFrame must be unique. --> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg" /> <swe2:value>32.382</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg" /> <swe2:value>-75.415</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m" /> <swe2:value>0.5</swe2:value> <!-- Zero height is at water level in the IOOS Buoy CRS. All sensors locations should be a height --> <!-- (vertical upward) relative to this reference frame --> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <!-- Static data for all sensors on this station --> <swe2:field name="sensors"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <swe2:field name="wmo_41001_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41001_sensor1" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- Field: sensorID --> <!-- The sensorID urn may use a meaningful "component" name (eg, "sbe16"); or, --> <!-- if not available, a simple, constant string followed by an integer counter --> <!-- such as "sensor1", "sensor2", "salt1", etc. --> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:value>urn:ioos:sensor:wmo:41001:sensor1</swe2:value> </swe2:Text> </swe2:field> <!-- Height is generally a static field so we demonstrate its use here. It can be --> <!-- defined statically or dynamically. --> <swe2:field name="height"> <!-- The location of the sensor relative to the platform --> <!-- We don't currently have enough information about orientation and relative position --> <!-- of sensors on a platform to define a sensor reference frame, but it is certainly --> <!-- possible to do if and when that is needed. --> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z" referenceFrame="#wmo_41001_frame"> <swe2:uom code="m" /> <swe2:value>5</swe2:value> </swe2:Quantity> 91 DRAFT 3/18/2016 </swe2:field> </swe2:DataRecord> </swe2:field> <swe2:field name="wmo_41001_sensor2"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41001_sensor2" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:value>urn:ioos:sensor:wmo:41001:sensor2</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z" referenceFrame="#wmo_41001_frame"> <swe2:uom code="m" /> <swe2:value>-2</swe2:value> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> <!-- Station 2 static data --> <swe2:field name="wmo_41002"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a station shall be defined --> <swe2:DataRecord id="wmo_41002" definition="http://mmisw.org/ont/ioos/swe_element_type/station"> <swe2:field name="stationID"> <!-- IoosTech Convention: --> <!-- The text element containing the station id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:value>urn:ioos:station:wmo:41002</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="platformLocation"> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/PlatformLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41002_frame"> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg" /> <swe2:value>32.5</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg" /> 92 DRAFT 3/18/2016 <swe2:value>-78.5</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m" /> <swe2:value>0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <swe2:field name="sensors"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <swe2:field name="wmo_41002_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41002_sensor1" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:value>urn:ioos:sensor:wmo:41002:sensor1</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z" referenceFrame="#wmo_41002_frame"> <swe2:uom code="m" /> <swe2:value>3</swe2:value> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:field> <swe2:field name="wmo_41002_sensor2"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <swe2:DataRecord id="wmo_41002_sensor2" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:value>urn:ioos:sensor:wmo:41002:sensor2</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z" referenceFrame="#wmo_41002_frame"> <swe2:uom code="m" /> <swe2:value>-5</swe2:value> </swe2:Quantity> </swe2:field> 93 DRAFT 3/18/2016 </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> <!-- Station 3 static data --> <swe2:field name="wmo_41003"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a station shall be defined --> <swe2:DataRecord id="wmo_41003" definition="http://mmisw.org/ont/ioos/swe_element_type/station"> <swe2:field name="stationID"> <!-- IoosTech Convention: --> <!-- The text element containing the station id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:value>urn:ioos:station:wmo:41003</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="platformLocation"> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/PlatformLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41003_frame"> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg" /> <swe2:value>33.5</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg" /> <swe2:value>-79.5</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m" /> <swe2:value>0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <swe2:field name="sensors"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <swe2:field name="wmo_41003_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41003_sensor1" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> 94 DRAFT 3/18/2016 <swe2:value>urn:ioos:sensor:wmo:41003:sensor1</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z" referenceFrame="#wmo_41003_frame"> <swe2:uom code="m" /> <swe2:value>3</swe2:value> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> <!-- DYNAMIC DATA (SENSOR OBSERVATIONS) --> <!-- All measurements made by sensors and any other dynamic data (e.g. location for mobile sensors) --> <!-- are encoded in a DataArray. Again, sensor field name in the static DataRecord above corresponds to --> <!-- DataChoice item name in the dynamic DataArray --> <swe2:field name="observationData"> <!-- IoosTech Convention: --> <!-- The field containing the dynamic data from each sensor shall contain a DataArray defined as such--> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservationCollection"> <!-- Count of records in swe:values --> <swe2:elementCount> <swe2:Count> <swe2:value>13</swe2:value> </swe2:Count> </swe2:elementCount> <!-- Definition of fields in the DataArray --> <swe2:elementType name="observations"> <!-- IoosTech Convention: --> <!-- The data record containing the dynamic observation descriptors for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservations"> <!-- Time is included for all sensor so it is listed first and is outside of DataChoice. --> <!-- If time is defined differently for some sensors it could be moved inside the data --> <!-- but this is uncommon. --> <swe2:field name="time"> <swe2:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> <swe2:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" /> </swe2:Time> </swe2:field> <!-- Since different observations are made by each sensor, DataChoice is used to select --> <!-- a sensor and the set of observation fields for each record from that sensor in the --> <!-- block encoded values of the data array. --> <swe2:field name="sensor"> <!-- IoosTech Convention: --> <!-- The data array shall contain one field with a DataChoice defined as sensor records --> <swe2:DataChoice definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <!-- DataChoice for wmo 41001's sensor1 --> <!-- Dynamic sensor observations are linked to static data using the DataChoice --> <!-- item name: wmo_41001_sensor1 --> <swe2:item name="wmo_41001_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the dynamic observation descriptors for a sensor shall be defined --> 95 DRAFT 3/18/2016 <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <!-- wmo_41001_sensor1's observed properties --> <swe2:field name="air_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> <swe2:field name="wind_speed"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_speed"> <swe2:uom code="m/s" /> </swe2:Quantity> </swe2:field> <swe2:field name="wind_to_direction"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_to_direction"> <swe2:uom code="degrees" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41001_sensor2"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sea_water_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"> <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> <swe2:field name="dissolved_oxygen"> <swe2:Quantity definition="http://mmisw.org/ont/ioos/parameter/dissolved_oxygen"> <swe2:uom code="mg/L" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41002_sensor1"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="air_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41002_sensor2"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sea_water_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"> <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41003_sensor1"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="air_temperature"> 96 DRAFT 3/18/2016 <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <swe2:uom code="Celsius" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> </swe2:DataChoice> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:encoding> <!-- SWE encoding and data values --> <!-- IoosTech Convention: --> <!-- swe:encoding *must* be always specified exactly as described below, --> <!-- to avoid the need to have fully general parsers that interpret --> <!-- swe:TextEncoding. That is, parsers may hard-code this particular --> <!-- swe:TextEncoding specification. --> <!-- --> <!-- About DataChoice from SWE Common 2.0: --> <!-- 9.2.5 Rules for DataChoice --> <!-- A “DataChoice” is encoded with the text method by providing the name of the selected item --> <!-- before the item values themselves. The name used shall correspond to the “name” attribute --> <!-- of the “item” property element that describes the structure of the selected item. --> <!-- --> <!-- IoosTech Convention: --> <!-- The name encoded for by data choice must match both the static sensor field name --> <!-- as well as the name attribute of the data choice item in the dynamic data. --> <!-- --> <!-- This data stream interleaves different types of messages separated by the block separator --> <!-- character. The element type is a “DataChoice” which means that each block is composed of --> <!-- the item name, followed by values of the item. This example also demonstrates that items --> <!-- of a choice can be of different types and length. --> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;" /> </swe2:encoding> <swe2:values> 2009-05-23T00:00:00Z,wmo_41001_sensor1,15.4,2.0,280 2009-05-23T01:00:00Z,wmo_41001_sensor1,15.8,1.8,121 2009-05-23T02:00:00Z,wmo_41001_sensor1,15.6,1.0,142 2009-05-23T00:00:00Z,wmo_41001_sensor2,5.6,8.0 2009-05-23T01:00:00Z,wmo_41001_sensor2,5.8,8.2 2009-05-23T02:00:00Z,wmo_41001_sensor2,5.7,8.5 2009-05-23T00:00:00Z,wmo_41002_sensor1,16.2 2009-05-23T01:00:00Z,wmo_41002_sensor1,16.4 2009-05-23T02:00:00Z,wmo_41002_sensor1,16.5 2009-05-23T00:00:00Z,wmo_41002_sensor2,6.1 2009-05-23T01:00:00Z,wmo_41002_sensor2,6.3 2009-05-23T02:00:00Z,wmo_41002_sensor2,6.5 2009-05-23T01:00:00Z,wmo_41003_sensor1,15.8 </swe2:values> </swe2:DataArray> </swe2:field> </swe2:DataRecord> 97 DRAFT 3/18/2016 5.1.3 TimeSeries records for multiple stations with multiple sensors including quality elements for some quantities <!-- This template is an example of a SWE Data Record composed of static and dynamic fields for --> <!-- multiple stations with multiple sensors including quality elements for some quantities. --> <!-- --> <!-- This template is almost identical to the SWE-Multisation-TimeSeries with the addition of some --> <!-- quality elements. Quality flags for static and dynamic data are included for station1 sensor 1.--> <!-- An example of NilValue is also provided for wind speed in station 1 sensor 1 --> <!-- --> <!-- Most any element may be static or dynamic, but the static fields must be encoded inline, while --> <!-- The dyamic elements must be block encoded in the data array. --> <!-- --> <!-- Description of data --> <!-- SWE DataRecord containing 3 Stations: --> <!-- Station 1 has 2 sensors --> <!-- Station 2 has 2 sensors --> <!-- Station 3 has 1 sensors --> <swe2:DataRecord xmlns:swe2="http://www.opengis.net/swe/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/swe/2.0 http://schemas.opengis.net/sweCommon/2.0/swe.xsd" definition="http://mmisw.org/ont/ioos/swe_element_type/observationRecord"> <!-- STATIC DATA --> <!-- This field "stations" contains static data for all stations and sensors in the response --> <!-- Static data is linked to dynamic data (sensor observation values) via an abbreviated, --> <!-- underscored sensor URN. For example, urn:ioos:sensor:wmo:41001:sensor1 becomes --> <!-- wmo_41001_sensor1 --> <!-- This abbreviated URN is used as the sensor's DataRecord id in the static block and the --> <!-- DataChoice item name in the dynamic block. Consequently it also appears in the dynamic --> <!-- swe:values encoding. And may thus be used as a look up for the metadata of a given row --> <!-- of the data block --> <!-- All fields in the static block must include inline values. --> <!-- All fields in the dynamic block must not include inline values. --> <swe2:field name="stations"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each station shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/stations"> <!-- Static data for the first station, urn:ioos:station:wmo:41001 --> <!-- Required elements include for each station: stationID, platformLocation, sensors --> <swe2:field name="wmo_41001"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a station shall be defined --> <swe2:DataRecord id="wmo_41001" definition="http://mmisw.org/ont/ioos/swe_element_type/station"> <swe2:field name="stationID"> <!-- IoosTech Convention: --> <!-- The text element containing the station id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:quality> <!-- Optional element can contain any valid static quality element for this station --> </swe2:quality> <swe2:value>urn:ioos:station:wmo:41001</swe2:value> </swe2:Text> </swe2:field> <!-- The platformLocation may be defined here, statically, or specified in the dynamic --> 98 DRAFT 3/18/2016 <!-- section. In either case, all coordinates must be specified inline or block encoded. --> <!-- They encoding can not be split to save bandwidth in the response. --> <swe2:field name="platformLocation"> <!-- Field: platformLocation; --> <!-- The location of the platform relative to WGS 84 (Horizontal) and Instantaneous Water Level (Vertical). --> <!-- Each sensor will specify a height relative to the platform location. If complete orientation and --> <!-- relative position are available for a sensor, SWE 2.0 clearly defines how to record it. Generally, --> <!-- for IOOS buoy instruments we believe just specifying the height is the appropriate solution. --> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/PlatformLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41001_frame"> <!-- Vector: --> <!-- The coordinate vector defining the station location in the specified reference frame. --> <!-- --> <!-- For floating, surface buoys a new compound coordinate reference system has been developed --> <!-- which combines the WGS84 for horizontal (GPS) latitude and longitude CRS with a vertical CRS --> <!-- which uses height in above the Instantanious Water Level as a datum. --> <!-- --> <!-- For a tide gauge or a station at a fixed location relative to the Geoid (MSL), the CRS should be: --> <!-- EPSG::4979 referenceFrame="http://www.opengis.net/def/crs/EPSG/0/4979" --> <!-- --> <!-- Each stations localFrame must be unique. --> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg"/> <swe2:value>32.382</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg"/> <swe2:value>-75.415</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m"/> <swe2:value>0.5</swe2:value> <!-- Zero height is at water level in the IOOS Buoy CRS. All sensors locations should be a height --> <!-- (vertical upward) relative to this reference frame --> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <!-- Static data for all sensors on this station --> <swe2:field name="sensors"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <swe2:field name="wmo_41001_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> 99 DRAFT 3/18/2016 <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41001_sensor1" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- Field: sensorID --> <!-- The sensorID urn may use a meaningful "component" name (eg, "sbe16"); or, --> <!-- if not available, a simple, constant string followed by an integer counter --> <!-- such as "sensor1", "sensor2", "salt1", etc. --> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:quality> <!-- Optional element can contain any valid static quality element for this sensor --> </swe2:quality> <swe2:value>urn:ioos:sensor:wmo:41001:sensor1</swe2:value> </swe2:Text> </swe2:field> <!-- Height is generally a static field so we demonstrate its use here. It can be --> <!-- defined statically or dynamically. --> <swe2:field name="height"> <!-- The location of the sensor relative to the platform --> <!-- We don't currently have enough information about orientation and relative position --> <!-- of sensors on a platform to define a sensor reference frame, but it is certainly --> <!-- possible to do if and when that is needed. --> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z" referenceFrame="#wmo_41001_frame"> <swe2:uom code="m"/> <swe2:value>5</swe2:value> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:field> <swe2:field name="wmo_41001_sensor2"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41001_sensor2" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:quality> <!-- Optional element can contain any valid static quality element for this sensor --> </swe2:quality> <swe2:value>urn:ioos:sensor:wmo:41001:sensor2</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" 100 DRAFT 3/18/2016 axisID="Z" referenceFrame="#wmo_41001_frame"> <swe2:uom code="m"/> <swe2:value>-2</swe2:value> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> <!-- Station 2 static data --> <swe2:field name="wmo_41002"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a station shall be defined --> <swe2:DataRecord id="wmo_41002" definition="http://mmisw.org/ont/ioos/swe_element_type/station"> <swe2:field name="stationID"> <!-- IoosTech Convention: --> <!-- The text element containing the station id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:value>urn:ioos:station:wmo:41002</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="platformLocation"> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/PlatformLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41002_frame"> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg"/> <swe2:value>32.5</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg"/> <swe2:value>-78.5</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m"/> <swe2:value>0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <swe2:field name="sensors"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each sensor shall be defined --> 101 DRAFT 3/18/2016 <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <swe2:field name="wmo_41002_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41002_sensor1" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:value>urn:ioos:sensor:wmo:41002:sensor1</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z" referenceFrame="#wmo_41002_frame"> <swe2:uom code="m"/> <swe2:value>3</swe2:value> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:field> <swe2:field name="wmo_41002_sensor2"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <swe2:DataRecord id="wmo_41002_sensor2" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:value>urn:ioos:sensor:wmo:41002:sensor2</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z" referenceFrame="#wmo_41002_frame"> <swe2:uom code="m"/> <swe2:value>-5</swe2:value> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> <!-- Station 3 static data --> <swe2:field name="wmo_41003"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a station shall be defined --> <swe2:DataRecord id="wmo_41003" 102 DRAFT 3/18/2016 definition="http://mmisw.org/ont/ioos/swe_element_type/station"> <swe2:field name="stationID"> <!-- IoosTech Convention: --> <!-- The text element containing the station id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:value>urn:ioos:station:wmo:41003</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="platformLocation"> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/PlatformLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41003_frame"> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg"/> <swe2:value>33.5</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg"/> <swe2:value>-79.5</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m"/> <swe2:value>0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <swe2:field name="sensors"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <swe2:field name="wmo_41003_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41003_sensor1" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:value>urn:ioos:sensor:wmo:41003:sensor1</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="height"> 103 DRAFT 3/18/2016 <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z" referenceFrame="#wmo_41003_frame"> <swe2:uom code="m"/> <swe2:value>3</swe2:value> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> <!-- DYNAMIC DATA (SENSOR OBSERVATIONS) --> <!-- All measurements made by sensors and any other dynamic data (e.g. location for mobile sensors) --> <!-- are encoded in a DataArray. Again, sensor field name in the static DataRecord above corresponds to --> <!-- DataChoice item name in the dynamic DataArray --> <swe2:field name="observationData"> <!-- IoosTech Convention: --> <!-- The field containing the dynamic data from each sensor shall contain a DataArray defined as such--> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservationCollection"> <!-- Count of records in swe:values --> <swe2:elementCount> <swe2:Count> <swe2:value>13</swe2:value> </swe2:Count> </swe2:elementCount> <!-- Definition of fields in the DataArray --> <swe2:elementType name="observations"> <!-- IoosTech Convention: --> <!-- The data record containing the dynamic observation descriptors for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservations"> <!-- Time is included for all sensor so it is listed first and is outside of DataChoice. --> <!-- If time is defined differently for some sensors it could be moved inside the data --> <!-- but this is uncommon. --> <swe2:field name="time"> <swe2:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> <!-- IoosTech Convention: --> <!-- This is an optional quality element used to express QC data that applies to an --> <!-- entire record. The definition of the Category element spcifies that it applies --> <!-- to the entire record, not to the time element. --> <swe2:quality> <swe2:Category definition="http://mmisw.org/ont/ioos/swe_element_type/recordQuality"> <swe2:constraint> <swe2:AllowedTokens> <swe2:value>a</swe2:value> <swe2:value>b</swe2:value> <swe2:value>c</swe2:value> </swe2:AllowedTokens> </swe2:constraint> </swe2:Category> </swe2:quality> 104 DRAFT 3/18/2016 <swe2:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> </swe2:Time> </swe2:field> <!-- Since different observations are made by each sensor, DataChoice is used to select --> <!-- a sensor and the set of observation fields for each record from that sensor in the --> <!-- block encoded values of the data array. --> <swe2:field name="sensor"> <!-- IoosTech Convention: --> <!-- The data array shall contain one field with a DataChoice defined as sensor records --> <swe2:DataChoice definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <!-- DataChoice for wmo 41001's sensor1 --> <!-- Dynamic sensor observations are linked to static data using the DataChoice --> <!-- item name: wmo_41001_sensor1 --> <swe2:item name="wmo_41001_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the dynamic observation descriptors for a sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <!-- wmo_41001_sensor1's observed properties --> <swe2:field name="air_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <!-- The next 3 elements specify the quality of the Air Temperature field --> <!-- using ndbc qc flags as an example. --> <swe2:quality> <!-- NDBC EQC Quality --> <!-- Data Descriptor only - value must be block encoded --> <swe2:Category definition="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"> <swe2:label>EQC Flag</swe2:label> <swe2:codeSpace xlink:href="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"/> <!-- This is not a formal code space. Use it till something better is created.--> <swe2:constraint> <swe2:AllowedTokens id="ndbcEqcFlags"> <swe2:value>T</swe2:value> <swe2:value>M</swe2:value> <swe2:value>W</swe2:value> <swe2:value>D</swe2:value> <swe2:value>S</swe2:value> <swe2:value>V</swe2:value> <swe2:value>L</swe2:value> <swe2:value>H</swe2:value> <swe2:value>R</swe2:value> </swe2:AllowedTokens> </swe2:constraint> </swe2:Category> </swe2:quality> <swe2:quality> <!-- NDBC DQA Quality --> <!-- Unfortuantly there is no way to specify an array quality elements inside the --> <!-- quantity. To allow for upto 2 values, two quality fields must be defined. --> <swe2:Category definition="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"> <swe2:label>DQA Flag 1</swe2:label> <swe2:codeSpace 105 DRAFT 3/18/2016 xlink:href="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"/> <!-- This is not a formal code space. Use it till something better is created.--> <swe2:constraint> <swe2:AllowedTokens id="ndbcDqaFlags"> <swe2:value>a</swe2:value> <swe2:value>b</swe2:value> <swe2:value>d</swe2:value> <swe2:value>f</swe2:value> <swe2:value>g</swe2:value> <swe2:value>i</swe2:value> <swe2:value>j</swe2:value> <swe2:value>k</swe2:value> <swe2:value>m</swe2:value> <swe2:value>n</swe2:value> <swe2:value>p</swe2:value> <swe2:value>q</swe2:value> <swe2:value>r</swe2:value> <swe2:value>s</swe2:value> <swe2:value>t</swe2:value> <swe2:value>v</swe2:value> <swe2:value>w</swe2:value> <swe2:value>x</swe2:value> <swe2:value>y</swe2:value> <swe2:value>z</swe2:value> </swe2:AllowedTokens> </swe2:constraint> </swe2:Category> </swe2:quality> <swe2:quality> <!-- Second DQA element --> <swe2:Category definition="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"> <swe2:label>DQA Flag 2</swe2:label> <swe2:codeSpace xlink:href="http://sdftest.ndbc.noaa.gov/sos/qcflags.shtml"/> <!-- This is not a formal code space. Use it till something better is created.--> <swe2:constraint xlink:href="#ndbcDqaFlags"/> <!-- The second DQA element can reference the constraints defined in the first --> </swe2:Category> </swe2:quality> <!-- End quality elements --> <swe2:uom code="Celsius"/> </swe2:Quantity> </swe2:field> <swe2:field name="wind_speed"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_speed"> <!-- Each field and quantity can reference the constraints defined above to --> <!-- define quality elements. --> <swe2:quality> <swe2:Category> <swe2:label> DQA Flag 1</swe2:label> <!-- Example of constraint by reference --> <swe2:constraint xlink:href="#ndbcDqaFlags"/> </swe2:Category> </swe2:quality> <swe2:nilValues> <swe2:NilValues> 106 DRAFT 3/18/2016 <swe2:nilValue reason="http://www.opengis.net/def/nil/OGC/0/BelowDetectionRange" > INF </swe2:nilValue> <!-- nilValue for a quntity may be one of INF, -INF, NaN or any value (such as 5.28) --> <!-- See SWE Common Data Moel OGC 08-094r1 section 8.1.14 NilValues Element for details --> <!-- Use a defined reason where possible --> </swe2:NilValues> </swe2:nilValues> <swe2:uom code="m/s"/> </swe2:Quantity> </swe2:field> <swe2:field name="wind_to_direction"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_to_direction"> <swe2:uom code="degrees"/> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41001_sensor2"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sea_water_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"> <swe2:uom code="Celsius"/> </swe2:Quantity> </swe2:field> <swe2:field name="dissolved_oxygen"> <swe2:Quantity definition="http://mmisw.org/ont/ioos/parameter/dissolved_oxygen"> <swe2:uom code="mg/L"/> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41002_sensor1"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="air_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <swe2:uom code="Celsius"/> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41002_sensor2"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sea_water_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"> <swe2:uom code="Celsius"/> </swe2:Quantity> </swe2:field> 107 DRAFT 3/18/2016 </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41003_sensor1"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="air_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> <swe2:uom code="Celsius"/> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:item> </swe2:DataChoice> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:encoding> <!-- SWE encoding and data values --> <!-- IoosTech Convention: --> <!-- swe:encoding *must* be always specified exactly as described below, --> <!-- to avoid the need to have fully general parsers that interpret --> <!-- swe:TextEncoding. That is, parsers may hard-code this particular --> <!-- swe:TextEncoding specification. --> <!-- --> <!-- About DataChoice from SWE Common 2.0: --> <!-- 9.2.5 Rules for DataChoice --> <!-- A “DataChoice” is encoded with the text method by providing the name of the selected item --> <!-- before the item values themselves. The name used shall correspond to the “name” attribute --> <!-- of the “item” property element that describes the structure of the selected item. --> <!-- --> <!-- IoosTech Convention: --> <!-- The name encoded for by data choice must match both the static sensor field name --> <!-- as well as the name attribute of the data choice item in the dynamic data. --> <!-- --> <!-- This data stream interleaves different types of messages separated by the block separator --> <!-- character. The element type is a “DataChoice” which means that each block is composed of --> <!-- the item name, followed by values of the item. This example also demonstrates that items --> <!-- of a choice can be of different types and length. --> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;"/> </swe2:encoding> <swe2:values> <!-- The first three records are from wmo_41001_sensor1 and contain quality values --> 2009-05-23T00:00:00Z,a,wmo_41001_sensor1,15.4,T,a,r,2.0,m,280 2009-05-23T01:00:00Z,b,wmo_41001_sensor1,15.8,M,j,j,1.8,m,121 2009-05-23T02:00:00Z,c,wmo_41001_sensor1,15.6,M,,,1.0,m,142 2009-05-23T00:00:00Z,a,wmo_41001_sensor2,5.6,8.0 2009-05-23T01:00:00Z,b,wmo_41001_sensor2,5.8,8.2 2009-05-23T02:00:00Z,c,wmo_41001_sensor2,5.7,8.5 2009-05-23T00:00:00Z,a,wmo_41002_sensor1,16.2 2009-05-23T01:00:00Z,b,wmo_41002_sensor1,16.4 2009-05-23T02:00:00Z,c,wmo_41002_sensor1,16.5 2009-05-23T00:00:00Z,a,wmo_41002_sensor2,6.1 2009-05-23T01:00:00Z,b,wmo_41002_sensor2,6.3 2009-05-23T02:00:00Z,c,wmo_41002_sensor2,6.5 2009-05-23T01:00:00Z,a,wmo_41003_sensor1,15.8 </swe2:values> </swe2:DataArray> </swe2:field> 108 DRAFT 3/18/2016 </swe2:DataRecord> 5.1.4 TimeSeriesProfile records for a single station <!-- This template is an example of a SWE Data Record composed of static and dynamic fields for --> <!-- multiple stations with multiple profiling sensors --> <!-- --> <!-- Most any element may be static or dynamic, but the static fields must be encoded inline, while --> <!-- The dyamic elements must be block encoded in the data array. --> <!-- --> <!-- Description of data --> <!-- SWE DataRecord containing 1 Station: --> <!-- Station 1 has 2 sensors --> <swe2:DataRecord xmlns:swe2="http://www.opengis.net/swe/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/swe/2.0 http://schemas.opengis.net/sweCommon/2.0/swe.xsd" definition="http://mmisw.org/ont/ioos/swe_element_type/observationRecord"> <!-- STATIC DATA --> <!-- This field "stations" contains static data for all stations and sensors in the response --> <!-- Static data is linked to dynamic data (sensor observation values) via an abbreviated, --> <!-- underscored sensor URN. For example, urn:ioos:sensor:wmo:41001:sensor1 becomes --> <!-- wmo_41001_sensor1 --> <!-- This abbreviated URN is used as the sensor's DataRecord id in the static block and the --> <!-- DataChoice item name in the dynamic block. Consequently it also appears in the dynamic --> <!-- swe:values encoding. And may thus be used as a look up for the metadata of a given row --> <!-- of the data block --> <!-- All fields in the static block must include inline values. --> <!-- All fields in the dynamic block must not include inline values. --> <swe2:field name="stations"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each station shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/stations"> <!-- Static data for the first station, urn:ioos:station:wmo:41001 --> <!-- Required elements include for each station: stationID, platformLocation, sensors --> <swe2:field name="wmo_41001"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a station shall be defined --> <swe2:DataRecord id="wmo_41001" definition="http://mmisw.org/ont/ioos/swe_element_type/station"> <swe2:field name="stationID"> <!-- IoosTech Convention: --> <!-- The text element containing the station id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:value>urn:ioos:station:wmo:41001</swe2:value> </swe2:Text> </swe2:field> <!-- The platformLocation may be defined here, statically, or specified in the dynamic --> <!-- section. In either case, all coordinates must be specified inline or block encoded. --> <!-- They encoding can not be split to save bandwidth in the response. --> <swe2:field name="platformLocation"> <!-- Field: platformLocation; --> <!-- The location of the platform relative to WGS 84 (Horizontal) and Instantaneous Water Level (Vertical). --> <!-- Each sensor will specify a height relative to the platform location. If complete orientation and --> 109 DRAFT 3/18/2016 <!-- relative position are available for a sensor, SWE 2.0 clearly defines how to record it. Generally, --> <!-- for IOOS buoy instruments we believe just specifying the height is the appropriate solution. --> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/PlatformLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41001_frame"> <!-- Vector: --> <!-- The coordinate vector defining the station location in the specified reference frame. --> <!-- --> <!-- For floating, surface buoys a new compound coordinate reference system has been developed --> <!-- which combines the WGS84 for horizontal (GPS) latitude and longitude CRS with a vertical CRS --> <!-- which uses height in above the Instantanious Water Level as a datum. --> <!-- --> <!-- For a tide gauge or a station at a fixed location relative to the Geoid (MSL), the CRS should be: --> <!-- EPSG::4979 referenceFrame="http://www.opengis.net/def/crs/EPSG/0/4979" --> <!-- --> <!-- Each stations localFrame must be unique. --> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg" /> <swe2:value>32.382</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg" /> <swe2:value>-75.415</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m" /> <swe2:value>0.5</swe2:value> <!-- Zero height is at water level in the IOOS Buoy CRS. All sensors locations should be a height --> <!-- (vertical upward) relative to this reference frame --> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <!-- Static data for all sensors on this station --> <swe2:field name="sensors"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <swe2:field name="wmo_41001_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41001_sensor1" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <!-- An example of an acoustic doppler current profiler --> <swe2:field name="sensorID"> <!-- Field: sensorID --> <!-- The sensorID urn may use a meaningful "component" name (eg, "sbe16"); or, --> <!-- if not available, a simple, constant string followed by an integer counter --> <!-- such as "sensor1", "sensor2", "salt1", etc. --> 110 DRAFT 3/18/2016 <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:value>urn:ioos:sensor:wmo:41001:sensor1</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="sensorOrientation"> <!-- If available for an profiling sensor such as an ADCP, record the sensor --> <!-- orientation as part of the static (or dyanmic) data. --> <!-- Orientation could be for the profile or for each observation in the profile. --> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/SensorOrientation" referenceFrame="http://www.opengis.net/def/crs/OGC/0/ENU"> <swe2:coordinate name="platform_orientation"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/platform_orientation" axisID="Z"> <swe2:uom code="deg" /> <swe2:value>0</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="platform_pitch_angle"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/platform_pitch_angle" axisID="X"> <swe2:uom code="deg" /> <swe2:value>90</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="platform_roll_angle"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/platform_roll_angle" axisID="Y"> <swe2:uom code="deg" /> <swe2:value>0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <swe2:field name="sensorLocation"> <!-- For a profiling sensor such as an ADCP it is best to specify its location relative --> <!-- to a CRS rather than relative to the platform or buoy unless this relationship is --> <!-- actually measured. It is likely that the relative measured location would be dynamic --> <!-- changing with each observation. Where as an absolute lat,lon,Z may be --> <!-- approximated as static. --> <!-- Local frames should always be specified as #{short_asset_id}_frame, regardless of feature type --> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/SensorLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41001_sensor1_frame"> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg" /> <swe2:value>32.382</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg" /> <swe2:value>-75.415</swe2:value> </swe2:Quantity> 111 DRAFT 3/18/2016 </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m" /> <swe2:value>0.0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <swe2:field name="profileBins"> <!-- IoosTech Convention: --> <!-- Static profile bins and depths shall be encoded as an defined array --> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/profileBins"> <swe2:description>Array of synchronous observation locations in a profile</swe2:description> <swe2:elementCount> <swe2:Count> <swe2:value>5</swe2:value> <!-- The number of bins defined should be greater than or equal to the --> <!-- number of binned observations in the dynamic data for this sensor. --> <!-- This would allow for ragged arrays of data from upward looking adcps. --> </swe2:Count> </swe2:elementCount> <swe2:elementType name="profileBinDescription"> <swe2:DataRecord> <swe2:field name="binCenter"> <!-- IoosTech Convention: --> <!-- binCenters shall be represented by a defined quantity --> <!-- NOTE: sufficient to use height definition for bin center, since it's in a --> <!-profile_bin? Would be more consistent with normal profiles --> <swe2:Quantity axisID="Z" definition="http://mmisw.org/ont/cf/parameter/height" referenceFrame="#wmo_41001_sensor1_frame"> <swe2:uom code="m" /> </swe2:Quantity> </swe2:field> <swe2:field name="binEdges"> <!-- IoosTech Convention: --> <!-- binEdges shall be represented by a defined quantity --> <swe2:QuantityRange axisID="Z" definition="http://mmisw.org/ont/ioos/swe_element_type/profileBinEdges" referenceFrame="#wmo_41001_sensor1_frame"> <swe2:uom code="m" /> </swe2:QuantityRange> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:encoding> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;" /> </swe2:encoding> <swe2:values> -10.0,-5.0 -15.0 -20.0,-15.0 -25.0 -30.0,-25.0 -35.0 -40.0,-35.0 -45.0 -50.0,-45.0 -55.0 </swe2:values> 112 DRAFT 3/18/2016 </swe2:DataArray> </swe2:field> </swe2:DataRecord> </swe2:field> <!-- An example of a thermister chain --> <swe2:field name="wmo_41001_sensor2"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41001_sensor2" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:value>urn:ioos:sensor:wmo:41001:sensor2</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="sensorLocation"> <!-- For a profiling sensor such as an thermister chain it is best to specify its location relative --> <!-- to a CRS rather than relative to the platform or buoy unless this relationship is --> <!-- actually measured. It is likely that the relative measured location would be dynamic --> <!-- changing with each observation. Where as an absolute lat,lon,Z may be --> <!-- approximated as static. --> <!-- Local frames should always be specified as #{short_asset_id}_frame, regardless of feature type --> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/SensorLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41001_sensor2_frame"> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg" /> <swe2:value>32.382</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg" /> <swe2:value>-75.415</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m" /> <swe2:value>0.0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <swe2:field name="profileHeights"> <!-- IoosTech Convention: --> <!-- Static profile bins and heights shall be encoded as an defined array --> <swe2:DataArray 113 DRAFT 3/18/2016 definition="http://mmisw.org/ont/ioos/swe_element_type/profileHeights"> <swe2:elementCount> <swe2:Count> <swe2:value>3</swe2:value> <!-- The number of bins defined should be greater than or equal to the --> <!-- number of binned observations in the dynamic data for this sensor. --> </swe2:Count> </swe2:elementCount> <swe2:elementType name="profileDefinition"> <swe2:DataRecord> <swe2:field name="height"> <!-- IoosTech Convention: --> <!-- Profile depth shall be represented by a defined quantity --> <swe2:Quantity axisID="Z" definition="http://mmisw.org/ont/cf/parameter/height" referenceFrame="#wmo_41001_sensor2_frame"> <swe2:uom code="m" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:encoding> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;" /> </swe2:encoding> <swe2:values> -5.0 -10.0 -20.0 </swe2:values> </swe2:DataArray> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> <!-- DYNAMIC DATA (SENSOR OBSERVATIONS) --> <!-- All measurements made by sensors and any other dynamic data (e.g. location for mobile sensors) --> <!-- are encoded in a DataArray. Again, sensor field name in the static DataRecord above corresponds to --> <!-- DataChoice item name in the dynamic DataArray --> <swe2:field name="observationData"> <!-- IoosTech Convention: --> <!-- The field containing the dynamic data from each sensor shall contain a DataArray defined as such--> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservationCollection"> <!-- Count of records in swe:values --> <swe2:elementCount> <swe2:Count> <swe2:value>6</swe2:value> </swe2:Count> </swe2:elementCount> <!-- Definition of fields in the DataArray --> <swe2:elementType name="observations"> <!-- IoosTech Convention: --> <!-- The data record containing the dynamic observation descriptors for each sensor shall be defined --> 114 DRAFT 3/18/2016 <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservations"> <!-- Time is included for all sensors so it is listed first and is outside of DataChoice. --> <!-- If time is defined differently for some sensors it could be moved inside the data --> <!-- but this is uncommon. --> <swe2:field name="time"> <swe2:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> <swe2:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" /> </swe2:Time> </swe2:field> <!-- Since different observations are made by each sensor, DataChoice is used to select --> <!-- a sensor and the set of observation fields for each record from that sensor in the --> <!-- block encoded values of the data array. --> <swe2:field name="sensor"> <!-- IoosTech Convention: --> <!-- The data array shall contain one field with a DataChoice defined as sensor records --> <swe2:DataChoice definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <!-- DataChoice for wmo 41001's sensor1 --> <!-- Dynamic sensor observations are linked to static data using the DataChoice --> <!-- item name: wmo_41001_sensor1 --> <swe2:item name="wmo_41001_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the dynamic observation descriptors for a sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="adcpProfile"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/profile"> <swe2:description>Array of synchronous observations in a Profile</swe2:description> <swe2:elementCount> <!-- IoosTech Convention: --> <!-- Count value is always omitted here and included inline with the encoded --> <!-- data array to allow ragged inner array for trajectories and adcps. --> <swe2:Count /> </swe2:elementCount> <swe2:elementType name="profileObservation"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/profileObservation"> <swe2:field name="profileIndex"> <!-- IoosTech Convention: --> <!-- A count element, constrained by the maximum dimension of the array --> <!-- shall specify which zero-based bin index the data applies to, --> <!-- allowing ragged arrays --> <!-- NOTE: http://www.opengis.net/def/property/OGC/0/ArrayIndex is mentioned --> <!-in the SWE 2.0 spec but doesn't resolve... --> <swe2:Count definition="http://mmisw.org/ont/ioos/swe_element_type/profileIndex"> <swe2:constraint> <swe2:AllowedValues> <swe2:interval>0 4</swe2:interval> </swe2:AllowedValues> </swe2:constraint> </swe2:Count> </swe2:field> <swe2:field name="direction_of_sea_water_velocity"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/direction_of_sea_water_velocity"> <swe2:uom code="deg" /> </swe2:Quantity> </swe2:field> <swe2:field name="sea_water_speed"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_speed"> 115 DRAFT 3/18/2016 <swe2:uom code="cm/s" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:elementType> </swe2:DataArray> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41001_sensor2"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="thermisterProfile"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/profile"> <swe2:elementCount> <!-- IoosTech Convention: --> <!-- Count value is always omitted here and included inline with the encoded --> <!-- data array to allow ragged inner array for trajectories and adcps --> <swe2:Count /> </swe2:elementCount> <swe2:elementType name="profileObservation"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/profileObservation"> <swe2:field name="binIndex"> <!-- IoosTech Convention: --> <!-- A count element, constrained by the maximum dimension of the array --> <!-- shall specify which zero-based bin index the data applies to, --> <!-- allowing ragged arrays --> <swe2:Count definition="http://mmisw.org/ont/ioos/swe_element_type/profileIndex"> <swe2:constraint> <swe2:AllowedValues> <swe2:interval>0 2</swe2:interval> </swe2:AllowedValues> </swe2:constraint> </swe2:Count> </swe2:field> <swe2:field name="sea_water_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"> <swe2:uom code="Cel" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:elementType> </swe2:DataArray> </swe2:field> </swe2:DataRecord> </swe2:item> </swe2:DataChoice> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:encoding> <!-- SWE encoding and data values --> <!-- IoosTech Convention: --> <!-- swe:encoding *must* be always specified exactly as described below, --> <!-- to avoid the need to have fully general parsers that interpret --> 116 DRAFT 3/18/2016 <!-- swe:TextEncoding. That is, parsers may hard-code this particular --> <!-- swe:TextEncoding specification. --> <!-- --> <!-- About DataChoice from SWE Common 2.0: --> <!-- 9.2.5 Rules for DataChoice --> <!-- A “DataChoice” is encoded with the text method by providing the name of the selected item --> <!-- before the item values themselves. The name used shall correspond to the “name” attribute --> <!-- of the “item” property element that describes the structure of the selected item. --> <!-- --> <!-- IoosTech Convention: --> <!-- The name encoded for by data choice must match both the static sensor field name --> <!-- as well as the name attribute of the data choice item in the dynamic data. --> <!-- --> <!-- This data stream interleaves different types of messages separated by the block separator --> <!-- character. The element type is a “DataChoice” which means that each block is composed of --> <!-- the item name, followed by values of the item. This example also demonstrates that items --> <!-- of a choice can be of different types and length. --> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;" /> </swe2:encoding> <swe2:values> 2009-05-23T00:00:00Z,wmo_41001_sensor1,2,0,359.0,10.0,3,352.0,9.6 2009-05-23T01:00:00Z,wmo_41001_sensor1,1,2,345.0,10.4 2009-05-23T02:00:00Z,wmo_41001_sensor1,4,0,332.0,10.5,1,334.0,10.3,2,336.0,10.1,3,335.0,9.9 2009-05-23T00:00:00Z,wmo_41001_sensor2,3,0,13.7,1,16.8,2,19.2 2009-05-23T01:00:00Z,wmo_41001_sensor2,3,0,13.5,1,16.4,2,19.3 2009-05-23T02:00:00Z,wmo_41001_sensor2,3,0,13.4,1,16.5,2,18.8 </swe2:values> </swe2:DataArray> </swe2:field> </swe2:DataRecord> 5.1.5 TimeSeriesProfile records for multiple station with multiple sensors including quality elements for some quantities <!-- This template is an example of a SWE Data Record composed of static and dynamic fields for --> <!-- multiple stations with multiple profiling sensors --> <!-- --> <!-- This template is almost identical to the SWE-SingleSation-TimeSeriesProfile with the addition of some --> <!-- quality elements. Quality flags for static and dynamic data are included for station1 sensor 1.--> <!-- The example quality elements in this document are simple, showing where to put them. For more --> <!-- complete examples of quality elements, see SWE-MultiStation-TimeSeries_QC.xml. --> <!-- --> <!-- Most any element may be static or dynamic, but the static fields must be encoded inline, while --> <!-- The dyamic elements must be block encoded in the data array. --> <!-- --> <!-- TODO: Finalize some vocabulary issues. See http://wiki.esipfed.org/index.php/Proposing_Standard_Names_for_data_from_Current_Meters_and_Profilers for some helpful information. --> <!-- Description of data --> <!-- SWE DataRecord containing 1 Station: --> <!-- Station 1 has 2 sensors --> <swe2:DataRecord xmlns:swe2="http://www.opengis.net/swe/2.0" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 117 DRAFT 3/18/2016 xsi:schemaLocation="http://www.opengis.net/swe/2.0 http://schemas.opengis.net/sweCommon/2.0/swe.xsd" definition="http://mmisw.org/ont/ioos/swe_element_type/observationRecord"> <!-- STATIC DATA --> <!-- This field "stations" contains static data for all stations and sensors in the response --> <!-- Static data is linked to dynamic data (sensor observation values) via an abbreviated, --> <!-- underscored sensor URN. For example, urn:ioos:sensor:wmo:41001:sensor1 becomes --> <!-- wmo_41001_sensor1 --> <!-- This abbreviated URN is used as the sensor's DataRecord id in the static block and the --> <!-- DataChoice item name in the dynamic block. Consequently it also appears in the dynamic --> <!-- swe:values encoding. And may thus be used as a look up for the metadata of a given row --> <!-- of the data block --> <!-- All fields in the static block must include inline values. --> <!-- All fields in the dynamic block must not include inline values. --> <swe2:field name="stations"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each station shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/stations"> <!-- Static data for the first station, urn:ioos:station:wmo:41001 --> <!-- Required elements include for each station: stationID, platformLocation, sensors --> <swe2:field name="wmo_41001"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a station shall be defined --> <swe2:DataRecord id="wmo_41001" definition="http://mmisw.org/ont/ioos/swe_element_type/station"> <swe2:field name="stationID"> <!-- IoosTech Convention: --> <!-- The text element containing the station id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/stationID"> <swe2:quality> <!-- Static quality information about this station can be placed here --> </swe2:quality> <swe2:value>urn:ioos:station:wmo:41001</swe2:value> </swe2:Text> </swe2:field> <!-- The platformLocation may be defined here, statically, or specified in the dynamic --> <!-- section. In either case, all coordinates must be specified inline or block encoded. --> <!-- They encoding can not be split to save bandwidth in the response. --> <swe2:field name="platformLocation"> <!-- Field: platformLocation; --> <!-- The location of the platform relative to WGS 84 (Horizontal) and Instantaneous Water Level (Vertical). --> <!-- Each sensor will specify a height relative to the platform location. If complete orientation and --> <!-- relative position are available for a sensor, SWE 2.0 clearly defines how to record it. Generally, --> <!-- for IOOS buoy instruments we believe just specifying the height is the appropriate solution. --> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/PlatformLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41001_frame"> <!-- Vector: --> <!-- The coordinate vector defining the station location in the specified reference frame. --> <!-- --> <!-- For floating, surface buoys a new compound coordinate reference system has been developed --> <!-- which combines the WGS84 for horizontal (GPS) latitude and longitude CRS with a vertical CRS --> <!-- which uses height in above the Instantanious Water Level as a datum. --> <!-- --> <!-- For a tide gauge or a station at a fixed location relative to the Geoid (MSL), the CRS should be: --> <!-- EPSG::4979 referenceFrame="http://www.opengis.net/def/crs/EPSG/0/4979" --> <!-- --> <!-- Each stations localFrame must be unique. --> 118 DRAFT 3/18/2016 <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg" /> <swe2:value>32.382</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg" /> <swe2:value>-75.415</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m" /> <swe2:value>0.5</swe2:value> <!-- Zero height is at water level in the IOOS Buoy CRS. All sensors locations should be a height --> <!-- (vertical upward) relative to this reference frame --> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <!-- Static data for all sensors on this station --> <swe2:field name="sensors"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <swe2:field name="wmo_41001_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41001_sensor1" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <!-- An example of an acoustic doppler current profiler --> <swe2:field name="sensorID"> <!-- Field: sensorID --> <!-- The sensorID urn may use a meaningful "component" name (eg, "sbe16"); or, --> <!-- if not available, a simple, constant string followed by an integer counter --> <!-- such as "sensor1", "sensor2", "salt1", etc. --> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:quality> <!-- Static quality information about this sensor can be placed here --> </swe2:quality> <swe2:value>urn:ioos:sensor:wmo:41001:sensor1</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="sensorOrientation"> <!-- If available for an profiling sensor such as an ADCP, record the sensor --> <!-- orientation as part of the static (or dyanmic) data. --> <!-- Orientation could be for the profile or for each observation in the profile. --> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/SensorOrientation" 119 DRAFT 3/18/2016 referenceFrame="http://www.opengis.net/def/crs/OGC/0/ENU"> <swe2:coordinate name="platform_orientation"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/platform_orientation" axisID="Z"> <swe2:uom code="deg" /> <swe2:value>0</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="platform_pitch_angle"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/platform_pitch_angle" axisID="X"> <swe2:uom code="deg" /> <swe2:value>90</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="platform_roll_angle"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/platform_roll_angle" axisID="Y"> <swe2:uom code="deg" /> <swe2:value>0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <swe2:field name="sensorLocation"> <!-- For a profiling sensor such as an ADCP it is best to specify its location relative --> <!-- to a CRS rather than relative to the platform or buoy unless this relationship is --> <!-- actually measured. It is likely that the relative measured location would be dynamic --> <!-- changing with each observation. Where as an absolute lat,lon,Z may be --> <!-- approximated as static. --> <!-- Local frames should always be specified as #{short_asset_id}_frame, regardless of feature type. --> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/SensorLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41001_sensor1_frame"> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg" /> <swe2:value>32.382</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg" /> <swe2:value>-75.415</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m" /> <swe2:value>0.0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <swe2:field name="profileBins"> 120 DRAFT 3/18/2016 <!-- IoosTech Convention: --> <!-- Static profile bins and depths shall be encoded as an defined array --> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/profileBins"> <swe2:description>Array of synchronous observation locations in a profile</swe2:description> <swe2:elementCount> <swe2:Count> <swe2:value>5</swe2:value> <!-- The number of bins defined should be greater than or equal to the --> <!-- number of binned observations in the dynamic data for this sensor. --> <!-- This would allow for ragged arrays of data from upward looking adcps. --> </swe2:Count> </swe2:elementCount> <swe2:elementType name="profileBinDescription"> <swe2:DataRecord> <swe2:field name="binCenter"> <!-- IoosTech Convention: --> <!-- binCenters shall be represented by a defined quantity --> <!-- NOTE: sufficient to use height definition for bin center, since it's in a --> <!-profile_bin? Would be more consistent with normal profiles --> <swe2:Quantity axisID="Z" definition="http://mmisw.org/ont/cf/parameter/height" referenceFrame="#wmo_41001_sensor1_frame"> <swe2:uom code="m" /> </swe2:Quantity> </swe2:field> <swe2:field name="binEdges"> <!-- IoosTech Convention: --> <!-- binEdges shall be represented by a defined quantity --> <swe2:QuantityRange axisID="Z" definition="http://mmisw.org/ont/ioos/swe_element_type/profileBinEdges" referenceFrame="#wmo_41001_sensor1_frame"> <swe2:uom code="m" /> </swe2:QuantityRange> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:encoding> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;" /> </swe2:encoding> <swe2:values> -10.0,-5.0 -15.0 -20.0,-15.0 -25.0 -30.0,-25.0 -35.0 -40.0,-35.0 -45.0 -50.0,-45.0 -55.0 </swe2:values> </swe2:DataArray> </swe2:field> </swe2:DataRecord> </swe2:field> <!-- An example of a thermister chain --> <swe2:field name="wmo_41001_sensor2"> <!-- IoosTech Convention: --> <!-- The data record containing the static data for a sensor shall be defined --> <!-- Reminder: the DataRecord id of a sensor in the static block matches the DataChoice item --> 121 DRAFT 3/18/2016 <!-- name in the dynamic block --> <swe2:DataRecord id="wmo_41001_sensor2" definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="sensorID"> <!-- IoosTech Convention: --> <!-- The text element containing the sensor id shall be defined --> <swe2:Text definition="http://mmisw.org/ont/ioos/definition/sensorID"> <swe2:quality> <!-- Static quality information about this sensor may be place here --> </swe2:quality> <swe2:value>urn:ioos:sensor:wmo:41001:sensor2</swe2:value> </swe2:Text> </swe2:field> <swe2:field name="sensorLocation"> <!-- For a profiling sensor such as an thermister chain it is best to specify its location relative --> <!-- to a CRS rather than relative to the platform or buoy unless this relationship is --> <!-- actually measured. It is likely that the relative measured location would be dynamic --> <!-- changing with each observation. Where as an absolute lat,lon,Z may be --> <!-- approximated as static. --> <!-- Local frames should always be specified as #{short_asset_id}_frame, regardless of feature type. --> <swe2:Vector definition="http://www.opengis.net/def/property/OGC/0/SensorLocation" referenceFrame="http://www.opengis.net/def/crscompound?1=http://www.opengis.net/def/crs/EPSG/0/4326&amp;2=http://www.opengis.net/def/crs/EPSG/0/5829" localFrame="#wmo_41001_sensor2_frame"> <swe2:coordinate name="latitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/latitude" axisID="Lat"> <swe2:uom code="deg" /> <swe2:value>32.382</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="longitude"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/longitude" axisID="Lon"> <swe2:uom code="deg" /> <swe2:value>-75.415</swe2:value> </swe2:Quantity> </swe2:coordinate> <swe2:coordinate name="height"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/height" axisID="Z"> <swe2:uom code="m" /> <swe2:value>0.0</swe2:value> </swe2:Quantity> </swe2:coordinate> </swe2:Vector> </swe2:field> <swe2:field name="profileHeights"> <!-- IoosTech Convention: --> <!-- Static profile bins and heights shall be encoded as an defined array --> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/profileHeights"> <swe2:elementCount> <swe2:Count> <swe2:value>3</swe2:value> <!-- The number of bins defined should be greater than or equal to the --> <!-- number of binned observations in the dynamic data for this sensor. --> 122 DRAFT 3/18/2016 </swe2:Count> </swe2:elementCount> <swe2:elementType name="profileDefinition"> <swe2:DataRecord> <swe2:field name="height"> <!-- IoosTech Convention: --> <!-- Profile depth shall be represented by a defined quantity --> <swe2:Quantity axisID="Z" definition="http://mmisw.org/ont/cf/parameter/height" referenceFrame="#wmo_41001_sensor2_frame"> <swe2:uom code="m" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:encoding> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;" /> </swe2:encoding> <swe2:values> -5.0 -10.0 -20.0 </swe2:values> </swe2:DataArray> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> </swe2:DataRecord> </swe2:field> <!-- DYNAMIC DATA (SENSOR OBSERVATIONS) --> <!-- All measurements made by sensors and any other dynamic data (e.g. location for mobile sensors) --> <!-- are encoded in a DataArray. Again, sensor field name in the static DataRecord above corresponds to --> <!-- DataChoice item name in the dynamic DataArray --> <swe2:field name="observationData"> <!-- IoosTech Convention: --> <!-- The field containing the dynamic data from each sensor shall contain a DataArray defined as such--> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservationCollection"> <!-- Count of records in swe:values --> <swe2:elementCount> <swe2:Count> <swe2:value>6</swe2:value> </swe2:Count> </swe2:elementCount> <!-- Definition of fields in the DataArray --> <swe2:elementType name="observations"> <!-- IoosTech Convention: --> <!-- The data record containing the dynamic observation descriptors for each sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensorObservations"> <!-- Time is included for all sensors so it is listed first and is outside of DataChoice. --> <!-- If time is defined differently for some sensors it could be moved inside the data --> <!-- but this is uncommon. --> <swe2:field name="time"> 123 DRAFT 3/18/2016 <swe2:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> <!-- IoosTech Convention: --> <!-- This is an optional quality element used to express QC data that applies to an --> <!-- entire record. The definition of the Category element spcifies that it applies --> <!-- to the entire record, not to the time element. --> <swe2:quality> <swe2:Category definition="http://mmisw.org/ont/ioos/swe_element_type/recordQuality"> <swe2:constraint> <swe2:AllowedTokens> <swe2:value>a</swe2:value> <swe2:value>b</swe2:value> <swe2:value>c</swe2:value> </swe2:AllowedTokens> </swe2:constraint> </swe2:Category> </swe2:quality> <swe2:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" /> </swe2:Time> </swe2:field> <!-- Since different observations are made by each sensor, DataChoice is used to select --> <!-- a sensor and the set of observation fields for each record from that sensor in the --> <!-- block encoded values of the data array. --> <swe2:field name="sensor"> <!-- IoosTech Convention: --> <!-- The data array shall contain one field with a DataChoice defined as sensor records --> <swe2:DataChoice definition="http://mmisw.org/ont/ioos/swe_element_type/sensors"> <!-- DataChoice for wmo 41001's sensor1 --> <!-- Dynamic sensor observations are linked to static data using the DataChoice --> <!-- item name: wmo_41001_sensor1 --> <swe2:item name="wmo_41001_sensor1"> <!-- IoosTech Convention: --> <!-- The data record containing the dynamic observation descriptors for a sensor shall be defined --> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="adcpProfile"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/profile"> <swe2:elementCount> <!-- IoosTech Convention: --> <!-- Count value is always omitted here and included inline with the encoded --> <!-- data array to allow ragged inner array for trajectories and adcps. --> <swe2:Count /> </swe2:elementCount> <swe2:elementType name="profileObservation"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/profileObservation"> <swe2:field name="profileIndex"> <!-- IoosTech Convention: --> <!-- A count element, constrained by the maximum dimension of the array --> <!-- shall specify which zero-based bin index the data applies to, --> <!-- allowing ragged arrays --> <!-- NOTE: http://www.opengis.net/def/property/OGC/0/ArrayIndex is mentioned --> <!-in the SWE 2.0 spec but doesn't resolve... --> <swe2:Count definition="http://mmisw.org/ont/ioos/swe_element_type/profileIndex"> <swe2:quality> 124 DRAFT 3/18/2016 <!-- Quality flags which apply to all data in a bin go here --> <swe2:Category> <swe2:constraint> <swe2:AllowedTokens> <swe2:value>1</swe2:value> <swe2:value>2</swe2:value> <swe2:value>3</swe2:value> </swe2:AllowedTokens> </swe2:constraint> </swe2:Category> </swe2:quality> <swe2:constraint> <swe2:AllowedValues> <swe2:interval>0 4</swe2:interval> </swe2:AllowedValues> </swe2:constraint> </swe2:Count> </swe2:field> <swe2:field name="direction_of_sea_water_velocity"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/direction_of_sea_water_velocity"> <swe2:quality> <!-- Quality flags which apply to a single field in a bin go here --> <swe2:Category> <swe2:constraint> <swe2:AllowedTokens> <swe2:value>x</swe2:value> <swe2:value>y</swe2:value> <swe2:value>z</swe2:value> </swe2:AllowedTokens> </swe2:constraint> </swe2:Category> </swe2:quality> <swe2:uom code="deg" /> </swe2:Quantity> </swe2:field> <swe2:field name="sea_water_speed"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_speed"> <swe2:uom code="cm/s" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:elementType> </swe2:DataArray> </swe2:field> </swe2:DataRecord> </swe2:item> <swe2:item name="wmo_41001_sensor2"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/sensor"> <swe2:field name="thermisterProfile"> <swe2:DataArray definition="http://mmisw.org/ont/ioos/swe_element_type/profile"> <swe2:elementCount> <!-- IoosTech Convention: --> <!-- Count value is always omitted here and included inline with the encoded --> <!-- data array to allow ragged inner array for trajectories and adcps --> 125 DRAFT 3/18/2016 <swe2:Count /> </swe2:elementCount> <swe2:elementType name="profileObservation"> <swe2:DataRecord definition="http://mmisw.org/ont/ioos/swe_element_type/profileObservation"> <swe2:field name="binIndex"> <!-- IoosTech Convention: --> <!-- A count element, constrained by the maximum dimension of the array --> <!-- shall specify which zero-based bin index the data applies to, --> <!-- allowing ragged arrays --> <swe2:Count definition="http://mmisw.org/ont/ioos/swe_element_type/profileIndex"> <!-- Quality flags for each bin go here --> <swe2:constraint> <swe2:AllowedValues> <swe2:interval>0 2</swe2:interval> </swe2:AllowedValues> </swe2:constraint> </swe2:Count> </swe2:field> <swe2:field name="sea_water_temperature"> <swe2:Quantity definition="http://mmisw.org/ont/cf/parameter/sea_water_temperature"> <swe2:quality> <!-- Quality flags for an individual field go in a bin go here --> </swe2:quality> <swe2:uom code="Cel" /> </swe2:Quantity> </swe2:field> </swe2:DataRecord> </swe2:elementType> </swe2:DataArray> </swe2:field> </swe2:DataRecord> </swe2:item> </swe2:DataChoice> </swe2:field> </swe2:DataRecord> </swe2:elementType> <swe2:encoding> <!-- SWE encoding and data values --> <!-- IoosTech Convention: --> <!-- swe:encoding *must* be always specified exactly as described below, --> <!-- to avoid the need to have fully general parsers that interpret --> <!-- swe:TextEncoding. That is, parsers may hard-code this particular --> <!-- swe:TextEncoding specification. --> <!-- --> <!-- About DataChoice from SWE Common 2.0: --> <!-- 9.2.5 Rules for DataChoice --> <!-- A “DataChoice” is encoded with the text method by providing the name of the selected item --> <!-- before the item values themselves. The name used shall correspond to the “name” attribute --> <!-- of the “item” property element that describes the structure of the selected item. --> <!-- --> <!-- IoosTech Convention: --> <!-- The name encoded for by data choice must match both the static sensor field name --> <!-- as well as the name attribute of the data choice item in the dynamic data. --> 126 DRAFT 3/18/2016 <!-- --> <!-- This data stream interleaves different types of messages separated by the block separator --> <!-- character. The element type is a “DataChoice” which means that each block is composed of --> <!-- the item name, followed by values of the item. This example also demonstrates that items --> <!-- of a choice can be of different types and length. --> <swe2:TextEncoding decimalSeparator="." tokenSeparator="," blockSeparator="&#10;" /> </swe2:encoding> <swe2:values> 2009-05-23T00:00:00Z,a,wmo_41001_sensor1,2,0,1,359.0,x,10.0,3,2,352.0,y,9.6 2009-05-23T01:00:00Z,a,wmo_41001_sensor1,1,2,2,345.0,y,10.4 2009-0523T02:00:00Z,b,wmo_41001_sensor1,4,0,3,332.0,z,10.5,1,2,334.0,x,10.3,2,3,336.0,z,10.1,3,1,335.0,x,9.9,4,2,333.0,y,9.6 2009-05-23T00:00:00Z,b,wmo_41001_sensor2,3,0,13.7,1,16.8,2,19.2 2009-05-23T01:00:00Z,c,wmo_41001_sensor2,3,0,13.5,1,16.4,2,19.3 2009-05-23T02:00:00Z,a,wmo_41001_sensor2,3,0,13.4,1,16.5,2,18.8 </swe2:values> </swe2:DataArray> </swe2:field> </swe2:DataRecord> 127 DRAFT 3/18/2016 128