From a8dee6a5b2565bf8c7bf145bbcba07fe2b8cfb80 Mon Sep 17 00:00:00 2001 From: Alex Robin Date: Wed, 4 Sep 2024 11:35:12 +0200 Subject: [PATCH] [SWECommon] Remove some temp files from VC --- swecommon/standard/.gitignore | 14 +- swecommon/standard/24-014.err.html | 984 -- swecommon/standard/24-014.html | 4676 -------- swecommon/standard/24-014.presentation.xml | 10984 ------------------- 4 files changed, 7 insertions(+), 16651 deletions(-) delete mode 100644 swecommon/standard/24-014.err.html delete mode 100644 swecommon/standard/24-014.html delete mode 100644 swecommon/standard/24-014.presentation.xml diff --git a/swecommon/standard/.gitignore b/swecommon/standard/.gitignore index 6a424158..0d71c402 100644 --- a/swecommon/standard/.gitignore +++ b/swecommon/standard/.gitignore @@ -1,11 +1,11 @@ .DS_Store/ -08-094r2.err -08-094r2.err.html -08-094r2.xml -08-094r2.presentation.xml -08-094r2.html -08-094r2.pdf -08-094r2.pdf.err +24-014.err +24-014.err.html +24-014.xml +24-014.presentation.xml +24-014.html +24-014.pdf +24-014.pdf.err *.abort relaton/ iev/ diff --git a/swecommon/standard/24-014.err.html b/swecommon/standard/24-014.err.html deleted file mode 100644 index 7955235c..00000000 --- a/swecommon/standard/24-014.err.html +++ /dev/null @@ -1,984 +0,0 @@ -./24-014.err.html errors - -

./24-014.err.html errors

-

AsciiDoc Input

- - - - -
LineIDMessageContext
Bibliographyno anchor on reference, markup may be malformed: seehttps://​www.​metanorma.com/​author/topics/​document-f­ormat/​bibliography/ ,https://​www.​metanorma.com/​author/iso/​topics/​markup/​#bibliographies -: For citations in the text please use square brackets and consecutive numbers: [1], [2], [3]
#<Asciidoctor::List@1790200 {context: :ulist, style: nil, items: 1}>
-

Crossreferences

- - - - - - -
LineIDMessageContext
000384_​observationISO19156 does not have a corresponding anchor ID in the bibliography!
<origin bibitemid="ISO19156" type="inline" citeas="">ISO-19156, definition 4.10</origin>
000394_​observation_​procedureISO19156 does not have a corresponding anchor ID in the bibliography!
<origin bibitemid="ISO19156" type="inline" citeas="">ISO-19156, definition 4.11</origin>
000407_propertyISO19143 does not have a corresponding anchor ID in the bibliography!
<origin bibitemid="ISO19143" type="inline" citeas="">ISO-19143</origin>
-

Anchors

- - - - - - - -
LineIDMessageContext
000362_​a5c2011b-080b-de57-­753c-94b804e5f324Crossreference target OGC06-121r9 is undefined
<xref target="OGC06-121r9"/>
002135_​9acae3e4-938d-7eef-­1adb-63a260409236Crossreference target encoding_​rules_xml is undefined
<xref target="encoding_rules_xml">XML encoding rules</xref>
002135_​9acae3e4-938d-7eef-­1adb-63a260409236Crossreference target xsd_geom_​components­ is undefined
<xref target="xsd_geom_components">XML implementation</xref>
004407_​8c9dfe2a-e60c-3085-­f85a-fcebbe53472cCrossreference target xsd_​binarycomponent­_elt is undefined
<xref target="xsd_binarycomponent_elt"/>
-

Syntax

- - - - - - - -
LineIDMessageContext
001762_​b4a6b80f-3977-dcd6-­a436-d1f2aca96fb7There is an instance of figure nested within example
<figure id="_b4a6b80f-3977-dcd6-a436-d1f2aca96fb7" unnumbered="true">
-  <image src="data:image/png;base64,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" mimetype="image/png" id="_5861038d-f364-64d3-0405-486a36242574" height="auto" width="auto"/>
-</figure>
001930_​b2f495ef-8c17-9909-­e33d-ddee2783541eThere is an instance of figure nested within example
<figure id="_b2f495ef-8c17-9909-e33d-ddee2783541e" unnumbered="true">
-  <image src="data:image/png;base64,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" mimetype="image/png" id="_1da2fea1-0737-3553-4b08-52b9a92a8495" height="auto" width="auto"/>
-</figure>
001936_​1b554c03-ae41-e820-­e28d-36905fb837f6There is an instance of figure nested within example
<figure id="_1b554c03-ae41-e820-e28d-36905fb837f6" unnumbered="true">
-  <image src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgoAAABiCAYAAAAx+ftLAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAIABJREFUeJztnWd4XMXVgN+jLtmSLDdcsY2xjTG4AA69BQi99wRCCTWBhEDy0RJaQk8oCYQSIPTeDKY30w24gAs2Ni5y7ypWL3u+H2fWWq93pV1pV1rjeZ9nH+1tM+eO9t45M3OKqCqezQcROR4YpKr/SAFZ9gVuB15V1ZtEZFtgD1V9vANlOg5YoKpTk1T+r4B+EQ6VquoDIrIbcCPwnapemgwZtmREpAtwjKo+GrZ/LHAiUAc8qKqLQo4dBhwErAL+o6plbr8ApwM7A3OA/6pqXXvch8ezOZHW0QJ4YkdE0oBLgNtcp9yhqOrHwKyQXcOAIztInCAHAaOTVbiqPgXsC+wAvACMA94H9nPHJwJJUVLiRUR6pYAMmSLSNQHlpIvIOcDrwGVhx3YBHgBuAl4FPnIKBSJyKnA+cCXwI/CeUxAArgdGAn8GioD/tlVOj+eniFcUNi/2Ap4DpgG/7mBZgjQEv6jqG6p6YkcKo6oXqur/klxNA1CuqvNVdbaqTgZeSnKdcSEio7DOsaM5AzgsAeVkAeOBOyMcuwh4SlVLVXUSMBM41R37I3C/qtao6guYQrCPiGQDvwP+7WYR7gROFJHeCZDV4/lJkdHRAnji4mRsFJQD/E5ErlPVAICb8r4eeAL4BbAEqAV2xEa9FwGnYCPfkVhn1x84ExgB3AoUu79rgf9z9VypqlVBAUQkBxu5FQKrsWnbeSKSB1wO7KyqR7iO6u/YjMMAYBfgZXfNPk6uS1X1JVfuJW5fOvCDqt7slhGuAp7BlKSRwG9V9R03o3I9sBibybgA6A5cDXypqv925Z4O7A+UAr3d/SwUkb8CuwNfYTMEXYETVPVHERkDPAQcqqqrWvqniMhoVX2xmePnAnu6Nl+hqn8RkSOcrG8Bu7l7uMu11a5OnuNVdbaI5AL/xKbV+wMPu+uuB8YAU7D/a2fgOGwAcDfQTUQeAC7QsDVGEfmt+5+sBoYDl6vqLBG5CBgFrAd6YKPtGuBvAKp6sYjs6fY/i82m3AwIUOHacqmTYxdMWSkWka1V9aYwGW4FBkVosvHhy1eqWg1UN00GbMTeQGj7zwD2FpH/AWOxZYUgM935FUCeqha78itFZDH2m3g5UiUezxaLqvrPZvABsoGn3fc+WKezX9g5nwPXYS/4X2IvvTVYB3yIu+5YQNz5k4Cj3fdbgbdDyroVGBxBjmuAF0O2HwOuct/3AIpDjr0OXOy+DwcU6Om2LwY+d9/3xV7uae6zBHvBZ7hrervzrgDecd8fBs5y33cBerjv/wJuCdm/AMhy26djSkRQ1kUhsr4M/N193xp4EOgU5X/xGvAOtiZ+InBf2PF/AHe472OcDBlYZzobOMAdKwNGu+/nuzZId9svADe773/FRsUAQzFFLgf4OTAnpN43gL+477cAd0eR/xjgWyDDbR+CKSsHY8smaW7/H4HX3fdzgLdCynge+EPI/+XJkN/pEuAXbvtD4LQEPgfHAdPD9lUS8ixgCuuHmNK14Tfnjj0K3AMcCqwKK+drTBHt8Ofdf/wnlT5+6WHz4TBggYjsjI2Mp2PTuuHMVNXVqvq0265S1emq+raqLlPVV4AMERkA1AMF7rwHgQNEZGsRSQf6qOq8COUfg81QxEo9gKrOwl7aWW7/3JC6D8JmM8a4zwpgp5AyNOSaQvd9GfAnETkEmKKqqyPUfQQwUZsM1N4FdhORbmHlgo06C5ysi1T1PFWtbOa+aoES92ls5rzgvY1y97Qy7N6Css0CclU1WNYGeVwZq93/vgDoAgyMcA+hbdocx2OdfgOA+21MxOxLPlM3S4UpQweLSCwzj+rKqgUW0fR/8ng8mzl+6WHz4XjgU2yqH+BL4HQRuaiFDm0DTgF4GfgBGznmB4+p6jwR+QhTPiYBb0Yppic2jZ9IirAR8jZu+1bguxau+Ts2PR5cYjhYVeeHndMVG20GWe/+dqPtLFbV913di5s5rwgbZQfv7R7g+zjrKnKfYBmnYApHnzjLCdKdjY1Qg3TFlnKCVACZxKZ8xE08Sw8tsBJbdglS4PYFl406h3wvxIwaVxHy+w85tiKOej2eLQKvKGwGOAvuNFV9IGzf2ZgCEetLdQdgJ1U92pVxbtjx+7Fp8z7YtHMkVhDZPbAtLAOGqBmbbaCFkWyeqt4mIndg69O/wdb8QynG7CGC9MZG/0uwzjIhqOoPzsNgf1V9JuzwMmyp54UIl8bKMsy2Ibx9WlveQmBwhP3FmCIYpDdmtLlORBRbOkkYqnp5gor6HLPxGO+2RwAfqmq1iExxx+aHHLsHs1WocbYTi5yNzdbY8oPH4wnBLz1sHhwPvBK6Q1VLsan0eLwfqoCuIrKjMzbcKuz4a9jot0ZVa6KU8TRwsYgMF5GBQCJc8J4DdheRo0Ski4j0dy/u5viLiHR10+erMTuAcJ4EdnZyAlwIPKohxpmREJFfiMikFizgs0WkSES6isg2NBkRhvMSsL2InOLura+IhI9kW+IJ4GwRGeXKiNTJh1Pp6u3hDFBDuQ84XkSOF5HuIrKtiPQEHgF+LiK9nAvhBe5cMOVqpIiMcTELYp3NqHTX9QxxS0w09wGnikiuiAzH3GOfcsfuwdou3S1T1QAfud/3Q0BQWb4Am8lYkiQZPZ7NlqBRmydFEZG9MSOzGuBZVf3R7T8Ss47PwKZRJ2IGWuXY8sJ8zP2rDzBLVZ9w152HGa59ClQDfYEHVLXCHb/HbU+PIo9gnhJ7YyPQBa6ONzHjup7YtPa3wAmYcvIMNrLfARvNvoIZW3bH1so/c54Gp2NT7JMxY8UDMW+BH7BZg3OwZYNXMCXnYMxWYD5mY7GbuyYAvKeqX7lO9WzMNuJH4GFVbXBW//2ACZg9wK+wEfNjQB7mVXCGqn4adv+nYaPSSJ3eE9h09kFu+wNV/UJERgBnYUamU9297YkZcS5x93aKu6eJmK1BUPF42i0LHYMZHSrwAaaAXIQpah+6/8Up7njQPfQGzPDxdlVdE3YfO7r27uXu/wFVXe32n4otOcwAHldVdTE8rsCWPz5xxfTG4hYciymYL7n7P9zVex/mqfI7d083aitfOCJSgC2L9XSylWH2Jx+54wcAR2NGvver6pyQa3+JtXcpZuC5yu3PcLINwTw17lLzrvB4PCF4RcGzAdcZ3KuqF3a0LB2JCxB0J3CeM87zeDyeLRZvo+AJxhoow0a4T3SwOKnAL4DLvJLg8Xg8fkbBA4jIUMw17hNV/aaj5fF4PJ5UQEROxly2b3F2YfFePxQ4CliryY8Y22pEJLu5gZFXFDwej8fTJlyk0cqgzUgHyZCPGaf+E7MxWozZJhUBC1X1klaW24AFnytu5fXnAseqaiJCmSccZ3e2AgtgF9Et3ns9eDwej6et7Ah8KCKfOcPSdkdV16vqHW7zHlU9X1XPwoxtt2gjVTEiKkrOwPhIIKqS520UPB6Px5Mo9gTeF5HPgWtU9cOOFsh57dwS3BaRQ7HIprXAy8ElBbFEYUdjob9XYrE4gu6yuWKZSHsAT6hqSXg9zhj8KCyI2Feq+kUkeVw9x2FeTu+r6gzn9bUt8AUWuXUQ5lFUg3l3FWAeSOtdGf0w7yIFXlLVte6+cjCvpCOx2ZTHsdgxZwJnichSLAx+eYg8u2IxRJYDi11gvuPcvmXA8xkishWJD6DjMRpoigbo8Xg8P1XCU4nvCXzgFIa/dtSShIjsgAVzC41DcxrwJ/f3WeAQF2vkCywx22OYwnCA+w6mACzEXJ/3wFyRw3nEnfMw8JyI3KFhyeLcNP+7WAf+OvCmMyb/FnNrnoS5ru+EuSPfiuXrOQ0LHPZ7FxfmHSdDL+Ar54I9D8slcx7mJn8x1tnfhuWIaSByyPlvsQi3d7j2uAFza38Qy+0zPgPTPFIhHa3H4/GkKllAp44WIoUJD+oVZE9gnIicpKpvt6M8F4nI0dggODxy7QWqut6FrL/U7TsNs7F4HEBEHsfiawR5TlWLRaQcuD28MhHp48rIdxFBn8filIRnld0D2FZVH3bXvQOcqqpfi0gt8Kaqviwi72HB9O51cV+yaUqdfj4WNGyqKyMNa+fZWHyXR1Q14CYBDlDVchH5HhgVDDsfiqrWikhogL2RWIyS1SJyKdCQoaoPYRHKPB6Px+OJGxG5Eks/H0olNrq+WVXbO4fGPar6pouauiGSqYh0As5xMwi9aQqctj02Igc2JDebEaHcRiLb9g1yx651AUj7YKP3cLbBkvIFl0J6s3Ea9CANTra0kO3g98FA35AyirEgZJHKaI0d4t3AUy7I279V9XFvo+DxeDyeRNKRCsJGuERx80VkW8yy/yosffwfxLKxnuROrcCm6VtLJZCO2WXUNXNeFVCtqle0sa4p4WW4WY02o6rvi2UXPhG4U0QqvdeDx+PxeBJBJfAvbGr9Dx2tJIRxJpCLLScsinB8ArCfi8raGuZi9mi7tXDeVKC364hbyyQsN056HNcEiL48tBEicryq1riw/88DA/yMgsfj8XjaylvAf8NzirQnIlKIJX6DJhuFPMy2ZA/gb1g+kjvFkuIVA51E5CBVfU9E7ga+FpEvaMqZ0gVbAjjJ5cE5AuguInuEejWoaqWIXAA8KiKfYUrDs1jOkwOAbUTkCFUd75ZpPhSRCdhMxkNOxt7AYc4A9DRX9JkiMh4zohwgIrtgRpMHAF+KyFTM2PEmzN4Q4GQReR/YDxjsDB2nAP8Skf9h+U6+DWm3Y4H+mFHnZOBYEdkH83gYBvzNB1zyeDwezxaDSzBWGykSoTMM7I5FUgz3Doi1/J4tXe9mA7oBq9uQKC0HyI3kqhnl/AKgoaXsue7cfCBHVVeDj8zo8Xg8Ho+nGbyNgsfj8Xg8nqh4RcHj8Xg8Hk9UvKLg8Xg8Ho8nKt7rwePxeDw/OUTkKCzE8Yeq+mML53YCzgICqvqfBMuxD7AdFvtgUlidp2JxFZ5KUF15rswGVX2spfNjxc8oeDwej+enyOvAGcDPYjj3GeBrXNAllwXzoEQIoaqfALvT5L4Y3F+JhV2+JdJ1rayrCsvdcEdL58ZDhoi8iWWtSiX3hwwsytUm7isdTB6WrjTV2ioNaC4aWEeQi2U+S6W28mz+5GLvhUBHCxJCGpYLoqalE9uZVHpfLQEuUdXp7VWhyxrZ0NJ5bmR/GHC8qn7tdt9L5BDOrSXa+7lF+WJBRI4DxjmXzPpElBlKBnAosD8WWjJVOATYC/hLRwsSxgfY9FR5Sye2Iydgil7CtNIE8S6WxWxdRwvi+UnxAnA1lqUvVdgJuAD7vacSH2IRCVMhg+1TtFNSLRddcSesw8wOOzYIWwb4XlWL3e7tsDwN/UWkAlOsvsKCIQWvqQdWYbMT1ao6OaTMbq6+1WGBjDoBOzsZCrEQ0pGodxkhhwNzVHWeiGTQFFK6VlWXikh/LKfDumBqbFdPIZafYYaIrHS7AyKSCYzFllMmhpxfBOziytlwH80RtFGYHMxznQqIyBBg+xDtLiUQkUZsnSllOj8XqasgBduqAZiqqitbPNnjiRGX5W66qs7qaFmCuHXh9Sn4DAbfVzEF5EmyLO0y4ykie2OzAddjIaULQo6dh80c/AdLevQPLKXzIdis0IFYKOYFWNbHfwGPYlEQb8RSUOcAF4vIuar6knv//ge4DosGWaqqfxKRwcCrwJ1YBMhuzYjdBTgemyW720WAvA84G7gIGzQvBbbCMleeGnb9yViWzAOAz92+TODP7u+5InKdqj4kIjtiESevA84SkXNU9UJaIFWNGZWmrF6e5vFt5dmSEFJjKt2TmtwO3KmqL8GGrJa4EfqtwB6qOktEegGXquqrIvIs8FdVfTBYiIiEhqKegY3qb3bHCrHO+yXgGuBRl6lyOpaA6i/AX7GU0Y+4a04iOpWq+k933iTgTeB+4DbgD0Aw/0RfLEx2+MzEOOAB4CFVrReRkUCjqt7kygwAe2Ohoq/GUmaPF5EvgVUicmXoDEUkoioK2elyncIfxaZkkkJGOiVV9fxWVd+J5XwR2aZTBuPqA/RNlkwKaenwUnWj/iby4U075Zx0+WcAzklmW2WmsbyygTNCrWabQ0SGdsrglfoAvZMlk0JaGjxX06jnRz7sFRhP+5CbLtc3wiVJfgbXVDZwnqpOCDsUVXnplCGfNyjbRzueACQ9jW+r6nX/CMciPoMicmZWWmKN3cJJg4aaAP+nqo8ms55QXPjl0cC0CIf7YiP380SkFkv33L+VVVUDnd33EUCDiGyN9acZWM6GnTDFJF6+c2X3d0sQz2AzC59gxpAXtaLMWpr6+hFAnlsuAft99ANapyikC8P26U7B7t1bIVaMPLaQjAX1FMVxSVZA2faq4bFlwWoNc9bDK8vYOZ5rMtIYeWBPCsbEcydx8u+5ZFTGt8aXIzDoquHkJkumWeXw2nJ2Slb5Hk+siDDsgB4U7NbcBG8beXAeGZUN5EeqniiKQE2An102lIxOSZq7La+Hu+eye5yX9RndhYLDehNP9sG4GL+MukklJCTtcRwIZgQf6X8RNH69WVVXJbDOAPCsqj7vtv8EG2YwWmNwm+X+Vrq/DwAfi8gNQImqttVgNgC8oqr/c9sxpbtu7uerBZnQO2ldMmSmRW3IqKNRAU2mTGtqrY44LwsUJrmt0iWqTFHbKi3JbbWiplVt5fG0hWidcvLfV+lR31fNLodslQP5SVIUclvZ1eelJ7etOmW0/3tBVRtFZA5mqDcl7PByoAQYBbyXwGq/d2U+H7Z/FmZI+Eyc5Y3BbCRWAqjqZBGZBTwHRJrlDiWdlj0eZjp54yJVbRRSFT+dHju+rTxbCqlqN7ElPoNXA/eLSG+s4+yBeRMIZtz3oIg8hLmyzsbSY+8FpIvIocAX2JJED2CEiPQAdsSm67fHFI5BQK6IdAFuAF51mRwXAXWqeh+W9nm8iCjmJTfclZEf5jhQA2SKyC+dvBcDF4ZllHwAOFdVIy2pgHmWrQVuF5EPgXwgyxkuFmNecX3cvdwEvCEiAszHvEj/1VKjekXB4/F42kaqKgpbHM448QtgGObBcA+25q+q+rCIjMfcIVeq6mxn1/CpOx8srkEJ5oUAFv/gfcw1vhobsV8VPNeN+LfH1v7rgelOjskiMgwbvS/GPCiKCLOhUdVvnYfECMxD4UBVDXe/nwM8SBScAeMozO5iMuYdMQpTQhpocp2vVdUZTt4dsGWIaMrHRsStKIxbBj/rmtxpK+LUhKeX2Vrdnkm0p4iXgMKry2Cf7tA9u+Xz20BcbTWjDErrYa8UaiuPJw7i6pTb6X0Vl0zLqmFyCRzZ3iv4LfD+ShjYCbbt3PK5qYyzQQi1Q1gVcmwlblrfbQewkXUolWHbZWHbFWH1rQcmhp2D6/A/DdkV0U3VRWjcxLVWRIaq6hzM/fHSSNeGlLEUc6EEW7oIZX7YuZVYnIiYiTuE83srYVUrzSleWgJfJSECwez19uC1hjW1cNsPMZ8ec6ccAN5ZAeta6T38ZDFMC/95JoA5FfBNK/8H6+rg5tkxn74lTnt6Uox3V7T+ffVi7O+ruBSFFTXwfhvM6S6fFnNlcT2Dn62BheFdZIxMWA3jl7fuWk9UXhSRF4E3VLVDoxQnfOmhtN5G+LWN0DcXtiuwX+r8Svi+HOoVumfB4HbUWhvVRtKraqFTBowqtL/l9fDxaqhoMEVjZGH7yQSwtg5mllmb9M+Foc6eem4F/LAe8jKgIMO0/PYioDCj3F6ueSFttb7B2qrKtdUO7dxWHk8yCH9fDXfheeZVmFdPY2zvq4QvPfxYAcVVkCn2Du2Zbc/ml2tN5sklMLgTSDuq4lWNMK0UyhtMnpGFkCawpBq+LYVO6faO376g5bI8MbEHUN/RSgIkOCnUkmq4diYsrYa6ADy7GJ5dZMdW10JJPayttQ67BRI6Gr3nR3h7hT30s8vhuu+t46sJwOJqe0kUV9nx9mJ+JdzwPayshZpGeKwYXnUTRytroKze2mxNyzMSCW2r/8yDN5ZDg5qycu1Mk6W2ERZVQW2g/dvK4wkhYZ1y+PvqmcXwjHtframz99WaWnsO25Pxy+HhBfZeWFULN86ywYNif8GexcqkRYzYlLJ6a6tZ6+3Zf3sF3DvPjpXWWRuV1tuyiicxqGpFKigJkOAZhYoGOKYP7N/TtrfpbJ30yf1h167w1nLYpat9by9qA9AvFw7cCgozbd81M00z3rO7acV1ATguthBOCeuUqxrghH6wt7MV6JMLTxXDMX3NfuC1ZbB7t/ad5agP2Frur3pCkfPmvf57+K4U9ukBo7vYqKK928rjSQaR3lf3/ginbG3vqDdjf18ldEYhJw1+M6jJVqCywWYShnQ2Wb9cC8f2tUpLm3eGS9gzuL4B9u0BR7jwbWOL4OoZVv8OhdBrNQzqZO/ZLRWXeqAAWPJTC12fUEVhu3ybKv90jT2Eq2ut86kLQE58/r4J+4Fnp8ERfWx6cV0dVDeaPBUJydnVenYohMVV8MlqGxksr271CCFhbZUZ2lYlNqKpbez4tvJ4QkhYpxzpfVXn3lfZ8c21JlRROGArW5L8YJW9r1bUQH5mokpvHf1yLWbDF2thfb0pDmDt1qWDZUshKrHQy+OxHA8AiEhf4HzM2+I74AlVXeSO7QschxlM3qeqKWnpkdClhwmr4fYfrEPumgV9kmtpHBOl9XDNDJi0DrLS7Aef0/q7Tlin/NYKuGuurfd1zYJeKdBW5W568RvXVn1z41bwQvEzCp6U5qNV9r4qafv7KmGKQkDhjjnw+nJQtfdCYes74oQ9g9PK4Hq3TJOfCf3zElFqaiMiY+M5X1WXYfEMwvcvBf6JZWpeEVQS3LGPsSyRd8SrJIjICJehMukkdEZhwiobkR7gpvKmNhs9un34thSy0+GCwbatmO1ERzNhFRzfD/ZwIWc/X9P8+e3Bd2WQLnDh4KZ9LyzpOHk8nmTy8eqN31dTWp9jMWGKwtJqmLsebh/VFM1xUgrkqv10NezRHU7sZ9sr2xpIuB0QkT5YKuWakH3BXAwrVLU+ZH9PrD9crqrqUkv/HTg45JxgXoTV4aGUXTCjDCxuwSaoapmIPImlI3845LohwKpgUiaXcConfOnCpYzuC6wNCdh0D3A6Ie6cLpNpV2BpWNCm4PFOWDyFuOaJW6UolDeYkU8o3bJt6rrSVV9ab2tpYFPqOenWCcXoLhi3JlwX2FSmvAzIEGhw04kZYkY46dI0zZ8hZqjToPY90ZTVbypXd9dWVa6t1tTCNyU2mqhqtPCqGUlsq3ptvq1qA2Zt/a77qYa2VXkS28rjiYG4O+Vo76uMkGcw9H1V0QDZWXE9g3HLpBGewaw0k0kxufIzbCQfHMVD03O3rg66ZZFwKhs3latL1sZtVdVoM6Lp0vS+j6OtkoZLdPQIFplwGhbEaLiI7KiqJS7y4v9h6Z9/KSJ/UNWJInIflhRpLbCLiFyIZaHcQUQewKIvdsGCHr0IHCEij6jqUyLSD3gWmACsxqI4fhNFxP8A00RkrKoGzzkPSymNiPwXC8i0zqWvPtwFU/o9prC8AewsIj9gsSH2A24RkVeAV1w5igVoOlFE/ozFd7gFOMqdcyrmTRHXEDBuRSE3HV6OUMVNO5qBzaMLbXTcLRvOGGBrbHfPhT8Ps8An45ZZ4qU/DIm35uhkpdnDdGNYhvoj+phh4KQSuGK6dcAHbQVH9YFXlprb03YFZuX/5+/gj0NbrCquTjkvHZ5etOn+O0fbbMJTxeZP3TMbTh8ADy2A22bDlcOtrZ5fbJ4H528Ta40tk5Vm9hDhbXVob9i/hy07XOna6oCeZuz14hLokQ07FNiU6J++g0ta/v/5pQdPh5OXEfl9dfOOZpT76EKLH9AtG84caJ5QwffV2K5mVDx3Pfy++d97XIpCRpp1suHP4IhCOGeQPXc3zTZ3wx0LzbDx3nnw1CIzDB/UCa6baaP7kV2arSquZzA33WY6J4TFeLhsGBzWCx6cD/83zRSY0wZY4Y8thN9uCzsXwePF1lZ/2yHWGhOLqq4VkYnAdqp6CYCIzAb2EJG3sFDIx6nqJBGpBq4TkWOAM4GuqlotIsOdUjEOKFK1zLgi8iDwP1V9yEV+fBV4CrgR+FRV/+LO27MZ+aaLyMfYrMI3LuzzMBed8WBgV1Ud6cqZCBzr5L8W6OfkywROckrK/4ArVHWJiBwPjFTV3UPu+2FVHSYib2CRJq8CngDWEydxKwq3j4x+bPsCuG2kjYzT3M/zspDO9+Be9kk0R/exTzQuGbKxTNA05Q9wa8g9TU9QkKMMMYUgGmO62CdUriu3azp+TF/7JJojejdZLkfi9xHaKjQj3y07Nn0vSYGlJY+nOdryvjqkl31iIC5FYWRh8++Gk/qbR5RIUy8feh9XhLwnWvB6iIvLt2v++N922LitBoWsjvfLtcFNohGRQ4C+qvpwiydHpgTIAXphORz2FpGdsJH/tqpaIyIzgE9E5B+YAhCJscBsETkPC8XcS0Tygb2BP8Qhz73AoyLyJ+AImpJJjQUaXflgWSSHYDknZqhqNVi4ZkxBCWdPLOFTkCnA0JB00vWq2gjMiEPWDSTUmHFDoW0fRyZ8NJoAmZKCbyuPJy4SHtwoAb/3pMiUio9he70bROQQEfkSm65PhEVEMJD+x1juhjuBn7t9+2J2A9cCnzk7hkjXT3HXvgAMBqowd8h4Yh28ii1z/Bob5b/g9mdhSxfvu88J2L3nEMXuIYzw8xpC9reZpCgKP2H8dHrsbPFtJSInisi7ItI/bH+eiNwqIlNF5CsRucQZSgWPjxGRcSIyXUReF5GdQ46JiFwsIl+IyHci8o/2snz2bHZsds+giOwlIhMwN8NngeGqGmkEHS/LMIUjS1Xnu88iEckGeqrq/cBOWKbFgUFxQq6fB3QOuXa+G6HPx9weY8LNCDwIXAnMCgmoNB+bOQktvwRLYz3Cydkc32Pqk+W+AAAf/ElEQVQzJkEGYwpJQtwtffZIjyfBuI77AeylsysQ3pH/A9gFuAjIwwywqoEHnNXz+9ho4hpsevJ9ERmsquuAs7C1xnOANa6su922p2Pw2SPbiIjshXkZDMRG+/e3MiphPtDJzQpkYCPqfFWtFZF/AveKyI3Y81aJZXv8t4hcinlDLMeyPQ4CRorI0e6c24BbRaQKSyqVo6qvYW6Pd4hICTaKH0zL0/sPAldg74ggLwBXi8jdmNFiPvAl8DbwLfC8iDyKDe5LVfUDYAVwtkst/ShwrrO5mAVcB/xFVQMiUoClsi5U1VYtrqfqjMJmpwl3IL6t2gER+ZWInByynS8iN4vIwAin98c0/EMilJOPTTteqKqfq+p7mEJwkTvlVGChqv5VVb9T1RuxB/80d/x3wPWq+oaqfgX8FviViBQl5EZTn1TslFNRps0CN4PwEfAkZpU/TFXvbo2S4NbjpwLPYev7OwA3AZUiku0MDn8P9MQU9ClYoKO7gF9g8Qz2dHW/jz2T+ZiL5bPA4Zji0QOXfVFVn8OU+Vxs6eAcYJaIRLXYcPESTlDVhSH7KoExWLbJQZib5jLn4ngYZtvQG/utBTNVHoZ5P5SoagXmzZCO2U1coar3OoUpC/P22C++Fm3CzyjEh++UY+en1lbfAp+LyHeqOht7AQ0MfdiDBI87pSCc7TEFfUrIvs+BR9xMxFjgs7BrvgB+5h760e78YF3TRaQOM876pLU352kTqaoodNgzGGihNdwMwt+wTrEtMwgbUNW1NK35B5kUds7nhDw/jg/cJ/Q8xZY+QvfNIMJsgapOxRSUIFPDz4lwzRsR9lVg7pfh+wPAu+4TtV6nbLwUdk4Dm7ZJ3DSnKKx7ZwVVH62KyZACgO7ZrF9TS6SXY0TqAzQQnyFIIE0ov3o6Mdv6FmRSXV5PbqznNyjpKPHF6VbWjFtK1ZvLY2+roiwqS+o2mZKOSl2AamIzagnSGICKq6fHfk0r22pFHDJttqjqTBG5AfifiPwROBHrtOOlFzZCCX2Vrg051otNc8WvdXX1xJSM8PBca7DRxpbMureXU/Xhyth/792yqVhbS8x5bOuVOiBStICoikJOGstunkWRxKFIiKCqMaezl6y0ON9XsH5KCbUzypLzbq8PkFEVIIsIbnjJUBA8ySeqolDdyJ3VYRpVS6ypo6G5MiPQCMyNsD+aJry4ooFjKuKoY00djdh0TDzEFQutspHrcUEzYqUVbdWATWeHE62tFlQ0cHSqtdVmzl3YNOPbwBmq2holqblRngKBFo4T5XgqjmiTQcROubqRO6rhmXgKauX76odYZQKoauTEqkbiDY0U70xAvB3tK+UNTImnjjjaqgj4HzYVPztkfx42fd4duAOvIGxWRP3Hq+o8zNIzZXC+pBNbPDGJIhDh4VLVOVg0rJRBVatIwbbazFGss8ii9fe2HCgSEQmZVegRcmw59jINpQdmtb3K1d/dbQfDym7Y3lLp4PdVVEVBVb9uZ1k2qp7I76slxBmZLxZEJA1TooO+++e4wEZ/w8IPv4qtnXsFYTMjqqIgIunEP7qMFwUa3RpMTLjIVMnugALxxMJux7ZqiBS/OxKuA8kgxdpqMydo3HQ48IyIfBkekz0GvgfqMVuEYCeyDzDVRV6biBlchbIP8JCqNorIJGAvLEQtmAFUWsj2Fomz30i2cXa0ZzCqorCFva+uBA4K2T4R+61eC2wFPOeVhPbDRX7MxXI7VLW1PMXcRwj9ZGR0usMdS9onPSN/HXBMeN3AscBrEfYPTcsqWJp0ubLyXw6v29W/HPN13Wh/embhI8mWKS2rYDmwRwSZzgQej7B/RHpWwbLkt1XB81HaajFm7LfJsY74ALdingbB7UOBp0O284H3ML/tSNcPw6K8jXDb9wKvRzl3AHAgcKRrp7Pc9tbu+F1YPPjdMM+I5cCv3bFOmPvV3zEDxb9hMwkF7vivMLeoQ931XwP/aua+jwaeDNkudPc5NGTfHcA5Hf0/ivH/uBgYsMkzmFXwRPJ/612WAj+LINPJwIsR9ndKyypYkHS5Mrt8FqWtVgB9wvenpWVdk2yZQj7POFlmArt19O9nS/pgdiDjsPTVbSor+tJDWkavvj+7hZ47hA9uEsePbx6cvn7Fp/FEjkoTySgac3ablaOolC9+m+KPzx4U5bASYXQgaRl9t977ProNOSNpcn3/4si82rryeBLOpktaTuGYs5Nna1ha/BqLP71gYJTDEduqAxE2HXFG2o4m868xv+RgmNQrgKdEZA9V/SLs3LFY/nkwN6tfuu/3A4uAy4Hrgf9iQWBuUNXHAVS1UkQOxGLIn4itiR+gquXu+FMu1sINmKvWeMxneotG0jL7Ddj3IboO/mXLJ7eSmc8Pz2+sK430zow2oyCBuvKBY86qAEnOZEf1uunMGf/zaFlqIj+Dkt6j95ir6TXm6oTI0Fhbwuxxu1FXETEt74kicl1CKvIAG5Z4+qtqcZTjA1V1oaouEJFpbLqU2VL52UA3tbTZQAvGKZKWSVpGzEbw8ZOWFunhghY6mWTKJOmtS8kmaVnJbSuJ2hwd1lZprWyrjkBV/y9s+y3grZDt9cABzVx/ddj2eiwjW6RzXySCm1PI8VpM0bgiyvHp0cp2x/+DBWRqEVUdh40qgttlbDw9jKpeGktZKUL0af6kP4OR621OJnDPYJIUhbT0bJqrOxqJe7crCz64MJqSALbEcVUCKvI0cRQ2w3lr+AER2RrLFnlKG8r/NWYL9Uhwh4+jEB+pNkpOZXxbebYUttg4CoHGWnrvfA29d75mo/2Lv7ysqmL5x3cBL2MeW08nU44gItIFi5ZY6erdUVUPcrNwd2LLh4VYZMY/Y6PtGzBvo0wsWNE0LCbJ3lgQo3+r6t9FZD8s/fSX2LR+f+BPqvq+q/tSbLmwxB3/E7AAm0HcE4udsi/mAn2Yqs4TkZ7APZhx6TAn+xdYELbBwEJgfyfbLzBbj2uBUhHJUAvIFrz3nliU1u1F5BZMYQAYLCL3uvtZBxysFqnyd1j02EYsDPVJWJCqPwM/iki+qt4NXlHweDyetpKqikLSSUvPIa/7zpvsz8gqCgDFqjoZQKLPiCaa24HVqnqFq/evbv/fgJWqeqXb/xLwe1W9TURKMYPQP4lIZ6zTvklV7xCR/bGARX9X1Qku8+Sxaqmdj8SWHwdiisCZwGi1sMlnAo+q6t4i8g1wuqoe4eoeh434b8Q688mqequI7I3Zmw0SkVlY2umTnWH6ROBIVX1ERGYC01V1oxkFVV3lwjkHQu4fYJ6q/s4Z/M7HDEw/AJao6r3uvMnAgar6mogswGxuNswoxDwftuiz31G+9P1YT28rMWnC5YvfZvEXl7SDOPGxcMJZVKwMX7ZOGjG1Vdmi8SyZeFk7iOPxJJWYOuUFH51O5ap280yMSabK1d+w4KPT20Gc+Fgy8U+UFb/e0WIkiqMwF00AVPVv7ush2Eg9yARshL4RatERV9KUn2URRA3KNR6bnRjhyv9Kmzz4JgB7RUnYVhxS5v5AlUv8lgcMdLMfoTKpkyPmYIaRUPOMWRksR1XHiUiBiIzCfsNRg4/FrCiULX6TuvL5bZEz4dSUzaV8ydstn5g4YuqUSxe+Sn30NbsOoaZ0DuVL3m35xMThlx48HUbpgleor1raXtXFpCjUVy6ldMHL7SDOBmIbcC15l5qySHGkNi/cyLsLlv45nC7YckOQSiw4VKtxHXgV1vFGKj9Yb3MUYhFXt8FSVp9E/AG04kZEMl2WzkuBPrSwupCwpYfa8vmULHiR+solZOdvQ9G2p5KZuxUAq7+/n8L+h7B++SdUrppIdv4gemx/YaKqjooGGiiZ/zxVa6aQlp5Dfp/9ye9r9mpVayZTWz6f3G6jWDv7YVQbKBp0QtJlAqgpnW3KRNUysguH0nXbX5KRbTlEVk2/i6JtTqRs8VtUrZlCduEQegy/IOkyaaCeknnPUbV2KmkZeeT3+Tn5ffYHbCRUV7GI3KIRrPnhEdAARducmHSZPJ5kUV0yk7Li16ivWk5O4TC6bvtL0rOt31g57Q66bnsqZcWvU7X2W3K6DKP78PObKy5BSw9K6cJxVK6yOGmdeu5Ol4FHAUJt2VzWL/+Ewv6HsHrW/TTWlVO49eEb3rHJpK5iMSXzn6OuYhFZnQfQdfApZHbqC8CaHx6hc6+9qF4zlfXLPyGrc792ebdHQlXVTZsPoylGSZAFmG1AkH7YNHyrcVkZC7FAXwuAkSGH+2KKwwpgeDPFLMGSwG2Uj6EdlmpGYm7G17n6IhpWB0mIKW7d+oXMenknGqpX07n3vlStmcLsV35GoMEUu5XT/snCj8+itnwunXqMZe2cx1j0+e+aKzIho9HiT85l5Xe3k9d9JzI79WH+Byezds5jAFSu+oZlk65l6cQ/k1O0PdpYxw/j96ehJjyMfmKpLpnp2qaSzr32oWL5J/wwbk80YOkrlk+9iQUTzqC+agV53Xdm9cx7WPr15c0VmZC2WjjhLFZOv4u87ruQkbsV8947nnU/mv1R5cqJLJ90LUu/voLcoh0INFQxZ/z+NNaWtrVajyde2twpV6/9jtmv7kagsZbOvfamfOkH/PD6vqg2ArB8yg0s/OjXNNSsIa/7TqycfhfLvvlLUmUCWDbpWpZ8eSk5XbYjp3AYi7/4A8unmK1aTdkclk26hkWf/Zbs/G1Izypk7luHUlMSKap74qivXsmsl8dQt76Yzr33paZsDrNe3pnGOnv2V8+8l+JPzqVyzWQ69RxLyfwXWTjhrKTK1AK3A9eKyIEiMkBE9nSBh+4CzhKRXBHphdkI/Lu1lTgXxcuwtfxFWNjqXUVkiLMFuASLb9LYQlEPA38UkbEi0k9Edoyh+vXALiIySETCXc/KgeEism34EkYYZcBWIrKHs40I1TjXY0notnH3mZgZhZXT76Bzr73pt9vtABQNOo4Zzwxm3dwn6T78PCQtg9yuO9JnF7dcJGksn3IDWZ37J6L6iNSuX8DauY8z4sTvyekyDADVACu+vZluQ89A0tKpqyhmu6M/Jz27iG5Dz2DdvGepKWs2EnObO+WV391G4YCjNrRFl4FHM+2pfpQufIWibU5C0jLovNXu9N7JXkyBhkrWznm0LVW2SG3ZXNbNe4YdTp5DdsFgALSxjhXf3kzXbX/p2moRw47+gvSsAroN/TXrfnya2vIfmyvWLz14UpIV395C0TYn0mfn6wDoMuAopj3Zh7Li1+gy8Fh7BnvvTa8x5tXXWFdKyfyo3q4JIVBfwcpp/2TwweMo6HsgAOnZRSyccAa9Rl+BSDr1Vcvot/sdG55Rm/FoNlFhm5/B1TP+TU7RCPrvaX1q0aDj+X7lRNbMfpitRl6GpGWQnT+IfrveZjJnFVL8yXl03mqvtlTbalT1YRGZj9kfHI4ZAU5U1WdEZAVwNebh8CtVnSoi/bEgXiIi22Opph8BthORGcDPMcXjMFV901UTDC40DzOSRFWXOa+I0zD7hjeAF11HOxh4VET2xc0gAAER6aWqd4tIMaa41ABviEgutpzxtoiMdfu/ctd0AW7DFJET2FTZeRGbUTkDc4teC5SIyFAstPYLWAK5N4BzsaWOTzAPja2dTcW1WByYIzGPjMQoCtXrZpLfe5+QPUJut1HUlDblBMnrvtOG7xm5PWmsK09E1VGpKfme9IxOG5QEgLxuY6gt+3HD6D07f9CG6UaAjJweG2ZBkkX1upl0G3Lahm1JyyS3aAQ1JbOa5IzUVknywwab5cjI6rLhBWQyjGHp11eAs83JLhhMelZBk1w5PQg0VG9SlseT6lSXzKTH9k3LeZKeTU7RcHsGBx4LhD2DOS2+r9o8o1C7fj6Bhio69dhlw7687mNorCvfYGuRnlW40TOakduTxvrKTcpKJNUlMzeSyeQaTU1plPdVy22VdFT1I+CjWPar6mLMbTLI94QYQ2JB0cL5l1q+jPDyF2IRVTfaDTwQtu+OsOtexfJghBIeJ2V6yPdS4A8R5EIt1XRo3IpJYad8GfL9KfcJZyZhYeQT0vtoY80mgYokLYtAY23IdjxBBduuCQciypSJamCDorBJcKV2cOFJ3bbKDpMpE9VGgiHkO6KtPJ4ItLlTDjTWIGkRnsFAXch2XM9g22VqqHH1Nj2HQRmbjoXLlPxnMGpbtf59tdnicmSAxTTYokiIopCVP4jaso2noWvL55FdsE0iim8V2fnb0FCzjobapizIteXzyMzbirSMvNYW2+ZOOXpbRYsanXysrVbTWFe2kUxZnfpt8pKIA7/04ElJsvMHhS2bKbXl88nOb/Uz2GZFwZ5/2Uiu2vJ5iKSTlT+gtcW2+Rm0tto4KWdt+Tyy8zvu3d6BHApcCPxcRNrkMbG5EdfSQ3XprE1iKXTeag96bH8+P751ON2GnkGnnruybt5z1JTOpuu2yYu7HiRQX7mJTFmd+pLXfTSdeo5l2ddX0Xe322moWcPK726j+3bnJV0msBjs6TndNtqX33sfegw/j4Ufn0XR4FPI7TaSNbMforF2Xbt4ETTWV0Roq3506jmW3K47svSbq+n7s5tpqF7Fymn/pPt25yZdJo8nWVSvnUZa5sau5/m996XH8PMp/uxCigadQE7RCNbMeoBAQyVdBh3X2qpiVhRUGzd5BjOyu5HXfQxdBh3Lskl/ZcC+j6CNdSyffD1dh/6atPR40uG0jpqyuZvI1anHz+i+3bn88NpelC95l/ze+1Ja/DqVK79kwL4PJ12mVENVx3e0DB1FzIpCbtEOVCz/lIrln260f/AvXqJzr73pv+c9LP3mL9RXLSW7cChDDn2TzLze7toRpDv3P7C1ttxuoyB6ZtSYNOHM3J5k5G7F0q829uzoMuhYeo+5mm0OfIGlX1/FrJd3Jj2zgMKtD6f3ThayPyOnBzldNvZayS3anvTMAtpKXvfRlC1+m7LFG8d4GHL4uxQOOJI+u/ydJV/+kfrqleR0Gc62h71Nepa52+Z2HUl6VpOxakZ2V3K77kB1dOvm2Noqbysysrtt0lZF25xIr9GXM/igl1n6TVNbdRl4LL1Gm7dFRk5Pcrpst9F1uUUjSMuMGp/D40kWMXXKed3HUFr8OqVhgYSGHvEhXQYdR13VMhZ98XsaqleRWzSCIYe9TbpTKnK7jtroPZCR043criOoXP1Nm2RKz+pCbtEOmzyDnXvtQV73MQzY578s/epyfhi3F5KWSX6ffekz9kZ3rXtnhpBTOGSDW3VbyCnanqrVk6laPXmj/YN+/gR53ccwcL9HWfHtzSz69AKyC7dl8MHjNsy+5HTZjoycHk33mNl5I5sFz0+D4A+8wCW52UBGdpene+90zalbjUxevpg54/crW7/s4wtU9dmNhBI5Avidqh4atn+79OyuU0afsTZpmV/KFr3Bwg9P+7a+tmRM+DFnnbqfqi4I3Z+Z0/2dvrvd9ovuw85OlljMeG5oeW3Z3KNU9eMwmX4FHKGqp4btH5mR0/PLUb9e2ep1lpYoXfgKxRPO/qa+tuRn4cdEZB5wqKo260bi8cSDs1zfKTSzHUBmbveP+u1+537dhiQv8uH0ZwaW160vPjQ8W6iInAvsrqpnh+3vDKzf+dzG5GWPXPsds8ftuaqxvmKTgAoisgjYxxnZbSA9I+/fvUZfflHvna9NikwA8945tqK0+NXLVPVBJ8tM4DeqOjFplbIh38FYVX0jAeWci+Vk2DNk/++BgVjK+BNC9u+GhWS+PzwmQhvlyMfSyQ/Ggjt9HC1rZDJJnil92/Dr27Hj28qzJZGKeRVSUaYtlV2xJE+AxTsQkbiND1V1FZYifuuQsrpiqeYvxZSC0PMnAvVYdMVEsjPmBvkxFsb5YxHZJPR0sklVRSFV8Z1y7Pi28mwppKqisMU9g6r6uqqGZqk6A4sHkAiGYK6JqGq0ABaJ/h0sAm5T1VmqOgF4BUh+qN4wfPZIj8fj8Wz2uCiFFwEjVPU3IrI7FmBpmoj0AB4ErsOSL+UDr6jqO86D4QYsx0IBcL2qLg0ruz/wG6CbS+H8kaq+E0GMESLyXyxd83Oqepe7/nJXdg9gqqre5/Zf4fblAu+p6iuhhalqeJjpXDpAKU1VRWGL04TbgG8rz5ZEKo7eU1GmLQ5VrXNplq9021+KyFrgSVV9WUQOBUap6jEikodFXQQLiPSJqt4jIhcB9wLHhJW9WESeBfYNpnCOwjLgCmBH4GsReVBVq4C1LpV0PhYp8XksguLBqrq/C/t8VHP355Je7cqmQZ2Sjl96iA/fKceObyvPlkKqKgr+GdyYWiz18zFAjaqOdyGWjwImu5mFH4Hd21BHqarWA1OBdFyGSlV9yB2vwWwZujp5dhaRU9w5LaUWPR34XlVfaoN8rSLqjIJq48qlX1/RsPTrK2N+ALILB6+oLZvXq+UzjbSMvAas4WIlAFoy5aHsmGdCsjr1WVdXuSwOHyKVtIzcuKxKA9qwdNGnFzQs+vTCmNsqq3P/NXUVi7vHen5aZudK7AcWK42q9aVTHsqO2ZAnK69XSV3VijgCiaikZeS1uwWuxxOOBhqXFn/8m4bij8+J/Rns1G9tXeWSbi2faaRldq4AIvl0R1MUND2rsHjKw7l9Yq4jI68u0FAVT5QzSc/IndfyaaFSNa5ZPuXvDcun3hRzW+UUDlleUza3d6znp6XnNNKUajklUNUPReSvwK3Av0TkLGAykI3NIASj892WyHqdAvIwMA3zXEh38kwWkYuBvwB3iMj5qvp6lDIOBfbCbC7anagdbqC+4jrgH/EUVlMyK0AcsxSNdXUKlEQ4FE0Tnt9YW7JLPHXUrl8Yt1bdWFcfj/JCoK7sMuCv8VxTWz4vvraqXRfAEnyEE+3+foi7rSoWtaKtyuJqK4+njUTslBvrSi8Gmk2zGk7t+vlx/d6beQajKQpVjXVluxP/OzGuZ7Chri6eAQSBQN2dwEPxzIFUl8yM730VqFOc4V+qICKZqnqfiNyPva9vx7wKaoDXVfWzJFV9DJAWktI5+DdTVR8DHhORS7AMl5soCiJyLOYieb6qdsjMVTMzClqGpaJMGdQSDyzvSBGI8BCragmRFZ4OI1XbyuNJBh38DEZUFNxLPeWeQVUtx9IRbwnUAsE0xaeKyFRVnS4in2L2BioirwIXisgkVa0RkTxnV5AoBOjj3DT742YUgMNFZI1TUD4BfrXJhSLHYwrwQ8C5ZqZArVMw2o1UNWb0eDyezYVUtVHYonBBkg4F3nPT+A9gs+IXi0gf4BngjyKyGsjBAiqBpVS+CksLvQp4SUSmAAdicQt+A7wE7A9MEpE/Ao865TRY905YCunBzsPiACyl8y+A57Flg5fd50HgIOBD4M8icpST59cRbisPS0t9YMi+CqBdFYWokRk7EhE5BLhMVQ/qaFlCCeY5V9UfWzy5nRCRk4ETVDX5ySLiQETmAEer6qwWT/Z4YkRE1gDbu4A4KYGL1jdMVX/X0bKEIiILgANVNT4bhuTI0i6RGT3JwXs9xIefTo8d31YeT8fin0FPQgguPYwVkUSuybSV7YBCFz87lcgGRotIzJbS7cAQoGsKtlUOMEpEEh3SNBVowC/bdRQZmEtZKtkEDQJ6puAzGHxfxexdlURana/e0/EIZmW5bUcLEkY6kEl8rpPtQS5mHBPoaEFCyMDaq7ajBQkjFdsqUczAIq952p88oJrUsgnIxN6ldR0tSBip9AwuBi5V1RkdLYgnfqSDvC08Ho/H4/FsBngbBY/H4/F44kRERorI3SJypdtOF5Gf5EyjVxQ8Ho/H44kTVZ2G5XYY4XbtirlP5nScVMnBKwoej8fj8bSODfYfqvoF0EtVW21bJyK/cEGWUgpvue3xeDyenwwicgSwL2ZgWqKqN7r9RwN7YP3eeFX9yO1PA87CvO0CWLbJ6SIyAjgEeAMYDeSq6v9EZBfgFMygdhSwypVzEjBIRO7EkkGdBMzFojHuDnymqo+4c3/uZMwCZqrqkyIyBrgZ+MFFh3xCRLbCUmd3Aiap6tPu+sOw7JcB4G1V/TAZbRnEKwoej8fj+UkgIhdiuRWOxJLoPej2nwMci2WK7AR8JiKXq+pbuJxGqnqpiAwAvhSRfVV1pojchSkD7wBDXWf+CrCnqi4SkcuxlNIA72JhxO9V1ZWurP2BG4D5wJsiMkFV5wP7YMmnGoCFIvI9MBvzUvkQeNWlnv4E+A0wEfhcRGqA6Viq6bGYF9CZ7pqk4ZcePB6Px/NT4VKso65zuTaud/svBB5X1UaX6+IZ4Hw3m3AB8CiAqhYDH2AzDEE+UNWngGuwcM/jVHVRjPIsVNVvVfUDLMRzf1fPdapaqaq1mOvoAJdfogGodJGS98RmMT5zuXs+xGY4ugADgDGqul5V/x13K8WJn1HweDwez2aPWMakAZiBIQCqusR93ZqNM3+ucPu6YfEm1oQcW+mObYSq1ovIQGBCK0UM4CJlisilQE8s8WK09N19gVwRucVt52BpsScB9wIfiMh0LN3BV62UKSa8ouDxeDyezR6XCXINECkS5Rqgc8h2IbAaS4XdGHaswB2LxHp3vNU4F8pLga1VNeDSSEeiBEBVr4hw7BoRuRlb1ngSi9CbNPzSg8fj8Xh+KrwK/FZEwkNGvwbsF7J9MPC6qtYDbwWPuev2xyIWR2ICcLSIdGqDjN1weTjc0kd2yLEGTIkB+BrIEZG9Qy8WkZ+LyChVrQbuCV4vIruKyMVtkCsqfkbB4/F4PD8VLgduAj4SkZXY+v/V2Mj7ZhG5AzNm/Bq4311zrjs2BOgB/ENVPxSR0VgagdEi8oWqzgX+Cwx15c/Flg6yRGQUZlMwGThNRN7HZjbSRGQwZpuwFNgbuBX4FlM6vgKmAruIyFvAs8ClIjJcVf8gIicAt4jIWszG4QFsCeVmEZkB9MLsJsA8K04GEm6z8P9COpEIUzXQJwAAAABJRU5ErkJggg==" mimetype="image/png" id="_559ff1e0-b75b-2d91-fa0a-b3e01187b979" height="auto" width="auto"/>
-</figure>
001947_​3e583759-fd51-f80a-­fe7a-942d5ce7e3e8There is an instance of figure nested within example
<figure id="_3e583759-fd51-f80a-fe7a-942d5ce7e3e8" unnumbered="true">
-  <image src="data:image/png;base64,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" mimetype="image/png" id="_6b616cf0-3d22-fa6b-623f-381b6c0a9390" height="auto" width="auto"/>
-</figure>
-

Metanorma XML Style Warning

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LineIDMessageContext
000001_​misccontainer_​anchor_aliasesTable should have title
<table id="_misccontainer_anchor_aliases">
-  <tbody>
-    <tr>
-      <th>_c783dac9-3b6e-4a0f-8f06-94547924f0fe</th>
-      <td>/req/core</td>
000046_​230088cf-7ecd-fbbd-­c257-c8f721bd0035Table should have title
<table id="_230088cf-7ecd-fbbd-c257-c8f721bd0035" unnumbered="true" width="100%"> <colgroup> <col width="23.0769%"/> <col width="76.9231%"/> </colgroup> <thead> <tr> <th valign="middle" align="left"> <strong>Name</strong> </th>
-<th valign="middle" align="left"> <strong>Affiliation</strong> </th>
-</tr> </thead>
-<tbody> <tr> <td valign="middle" align="left">Alex Robin (Editor)</td>
-<td valign="middle" align="left">GeoRobotix, Inc.</td>
000062_​4fed7ea0-b3d1-355f-­8e92-4bd736f3a87fTable should have title
<table id="_4fed7ea0-b3d1-355f-8e92-4bd736f3a87f" unnumbered="true"> <tbody> <tr> <td valign="middle" align="left"> <strong>Name</strong> </td>
-<td valign="middle" align="left"> <strong>Affiliation</strong> </td>
-</tr> <tr> <td valign="middle" align="left">Arne Broering</td>
-<td valign="middle" align="left">52° North Initiative</td>
-</tr> <tr> <td valign="middle" align="left">Barry Reff</td>
000452_​conventionsHanging paragraph in clause
<clause id="_conventions" obligation="normative">
-<title>Conventions</title>
-<clause id="_identifiers" obligation="normative">
-<title>Identifiers</title>
-<p id="_695d051b-6fef-c0b6-5aa8-0fe8fff41091">The normative provisions in this standard are denoted by the URI</p>
000511_​e16c7c75-f340-0144-­dc6e-81b9f59397f8Figure should have title
<figure id="_e16c7c75-f340-0144-dc6e-81b9f59397f8">
-  <image src="data:image/png;base64,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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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wAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZmfJCQwAYA0jLQgYQENgAAQFZ7IK+tP2AAAJrbeoAFdLT1BwwAAACtbT3TBDra+gMGAKC5rQdYQEdbf8AAAADQ2tYzTaCjrT9gAACa23qABXS09QcMAAAArW090wQ62voDBgCgua0HWEBHW3/AAAAA0NrWM02go60/YAAAmtt6gAV0tPUHDAAAAK1tPdMEOtr6AwYAoLmtB1hAR1t/wAAAANDa1jNNoKOtP2AAAJrbeoAFdLT1BwwAAACtbT3TBDra+gMGAKC5rQdYQEdbf8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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ALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALA4i1awPdo1AAAAAAAAi7NoBdujXQMAAAAAALC4R2Czlu5fAAAAAAAAuGNLL5YB7SzdvwAAAAAAAHDHll4sA9pZun8BAAAAAADgji29WAa0s3T/AgAAAAAAwB1berEMaGfp/gUAAAAAAIA7tvRiGdDO0v0LAAAAAAAAd2zpxTKgnaX7FwAAAAAAAO7Y0otlQDtL9y8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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owEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAA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AACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOokowEAAAAAAACoTjIaAAAAAAAAgOok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OQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMegwEOQCA1pkGgEQPgGoJGBDkAKAMtwDb5s4SADAX0wCQ6AFQLQEDghwAlGHus15AcebOEgAwF9MAkOgBUC0BA4IcAJRh7rNeQHHmzhIAMBfTAJDoAVAtAQOCHACUYe6zXkBx5s4SADAX0wCQ6AFQLQEDghwAlGHus15AcebOEgAwF9MAkOgBUC0BA4IcAJRh7rNeQHHmzhIAMBfTAJDoAVAtAQOCHACUYe6zXkBx5s4SADAX0wCQ6AFQLQEDghwAlGHus15AcebOEgAwF9MAkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAtAQOCHAAAAAAUxGYNkOgBUC0BA4IcAAAAABTEZg2Q6AFQLQEDghwAAAAAFMRmDZDoAVAt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" mimetype="image/png" id="_bc68bc3c-5867-fbb7-efd5-b2d3e98fe5d3" height="auto" width="auto"/>
-</figure>
000515core_​conceptsHanging paragraph in clause
<clause id="core_concepts" obligation="normative">
-<title>Requirements Class: Core Concepts (normative core)</title>
-<requirement id="_056c9de6-79cc-7051-3593-6b5c5d9c615f" model="ogc" type="class">
-<title>Core Concepts</title> <identifier>/req/core</identifier> <subject>Derived Models and Software Implementations</subject>
-
000562core_data_​repHanging paragraph in clause
<clause id="core_data_rep" obligation="normative">
-<title>Data Representation</title>
-<p id="_337dfc15-b3a1-b1c9-9c95-a41032d10358">Data representation deals with how property values are represented and stored digitally. Each component (or field) in a dataset carries a value that represents the state of a property. This representation will vary depending on the nature of the method used to capture the data and/or the target usage. For instance, a fluid temperature can be represented as a decimal number expressed in degrees Celsius (i.e. 25.4 °C), or as a categorical value taken from a list of possible choices (such as “freezing, cold, normal, warm, hot”).</p>
-
-<p id="_abe01dd2-6def-9a0e-85a0-299bb7cdf48e">The following types of representations have been identified: Boolean, Categorical, Continuous Numerical, Discrete Countable and Textual. The paragraphs below explain basic features of each of these representation types.</p>
000713core_data_​natureHanging paragraph in clause
<clause id="core_data_nature" obligation="normative">
-<title>Nature of Data</title>
-<p id="_34725401-5c2d-3eb7-9b2a-0a14f33c391e">We define “Nature of data” as the information needed to understand what property the value represents. It is thus connected to semantics and the semantic details are often provided by external sources such as dictionaries, taxonomies or ontologies. Note that it is independent of the type of representation used and it does not include information about how the data was actually measured or acquired. This lineage information should be described by other means as explained in <xref target="core_full_lineage"/>.</p>
-
-<clause id="core_human_readable_info" obligation="normative">
000790core_data_​qualityHanging paragraph in clause
<clause id="core_data_quality" obligation="normative">
-<title>Data Quality</title>
-<p id="_e9c6a2ca-7b94-23f5-0a41-95066c2323de">Quality information can be essential to the data consumer and the SWE Common Data Model provides simple and flexible ways to associate qualitative information with each component of a dataset.</p>
-
-<clause id="core_quality_info" obligation="normative">
000901uml_​modelsHanging paragraph in clause
<clause id="uml_models" obligation="normative">
-<title>UML Conceptual Models (normative)</title>
-<p id="_a44c9d55-47d1-525c-1248-9a5161eaf441">This standard defines normative UML models with which derived encoding models as well as all future separate extensions should be compliant. The standardization target type for the UML requirements classes defined in this clause is thus a software implementation or an encoding model that directly implements the conceptual models defined in this standard.</p>
-
-<clause id="_package_dependencies" obligation="normative">
000920uml_​simple_​componentsHanging paragraph in clause
<clause id="uml_simple_components" obligation="normative">
-<title>Requirements Class: Basic Types and Simple Components Packages</title>
-<requirement id="_e2776023-f091-0c76-b3a5-f83f23903205" model="ogc" type="class">
-<title>Simple Components UML Package</title> <identifier>/req/uml-simple-components</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/core</inherit>
-
001619uml_​record_​componentsHanging paragraph in clause
<clause id="uml_record_components" obligation="normative">
-<title>Requirements Class: Record Components Package</title>
-<requirement id="_2482225b-0e65-b85f-57ac-c5ac6d068358" model="ogc" type="class">
-<title>Record Components UML Package</title> <identifier>/req/uml-record-components</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/uml-simple-components</inherit>
-
001762_​b4a6b80f-3977-dcd6-­a436-d1f2aca96fb7Figure should have title
<figure id="_b4a6b80f-3977-dcd6-a436-d1f2aca96fb7" unnumbered="true">
-  <image src="data:image/png;base64,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" mimetype="image/png" id="_5861038d-f364-64d3-0405-486a36242574" height="auto" width="auto"/>
-</figure>
001774uml_​choice_​componentsHanging paragraph in clause
<clause id="uml_choice_components" obligation="normative">
-<title>Requirements Class: Choice Components Package</title>
-<requirement id="_7a84a684-db61-305d-4e88-784d9ee73536" model="ogc" type="class">
-<title>Choice Components UML Package</title> <identifier>/req/uml-choice-components</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/uml-simple-components</inherit>
-
001838uml_block_​components­Hanging paragraph in clause
<clause id="uml_block_components" obligation="normative">
-<title>Requirements Class: Block Components Package</title>
-<requirement id="_230ddecb-09b0-6911-19eb-045b86aa6eba" model="ogc" type="class">
-<title>Block Components UML Package</title> <identifier>/req/uml-block-components</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/uml-simple-components</inherit> <inherit>/req/uml-simple-encodings</inherit>
-
001930_​b2f495ef-8c17-9909-­e33d-ddee2783541eFigure should have title
<figure id="_b2f495ef-8c17-9909-e33d-ddee2783541e" unnumbered="true">
-  <image src="data:image/png;base64,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" mimetype="image/png" id="_1da2fea1-0737-3553-4b08-52b9a92a8495" height="auto" width="auto"/>
-</figure>
001936_​1b554c03-ae41-e820-­e28d-36905fb837f6Figure should have title
<figure id="_1b554c03-ae41-e820-e28d-36905fb837f6" unnumbered="true">
-  <image src="data:image/png;base64,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" mimetype="image/png" id="_559ff1e0-b75b-2d91-fa0a-b3e01187b979" height="auto" width="auto"/>
-</figure>
001947_​3e583759-fd51-f80a-­fe7a-942d5ce7e3e8Figure should have title
<figure id="_3e583759-fd51-f80a-fe7a-942d5ce7e3e8" unnumbered="true">
-  <image src="data:image/png;base64,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" mimetype="image/png" id="_6b616cf0-3d22-fa6b-623f-381b6c0a9390" height="auto" width="auto"/>
-</figure>
002068uml_geom_​componentsHanging paragraph in clause
<clause id="uml_geom_components" obligation="normative">
-<title>Requirements Class: Geometry Components Package</title>
-<requirement id="_d2632134-1a89-18cf-a0b9-38b5be589d64" model="ogc" type="class">
-<title>Geometry Components UML Package</title> <identifier>/req/uml-geom-components</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/uml-simple-components</inherit>
-
002148uml_​simple_​encodingsHanging paragraph in clause
<clause id="uml_simple_encodings" obligation="normative">
-<title>Requirements Class: Simple Encodings Package</title>
-<requirement id="_08c4500b-e118-1ba3-953b-be4890058f15" model="ogc" type="class">
-<title>Simple Encodings UML Package</title> <identifier>/req/uml-simple-encodings</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/core</inherit>
-
002223uml_​advanced_​encodingsHanging paragraph in clause
<clause id="uml_advanced_encodings" obligation="normative">
-<title>Requirements Class: Advanced Encodings Package</title>
-<requirement id="_ebcb3bde-1307-6818-4c8a-89d69894fa05" model="ogc" type="class">
-<title>Advanced Encodings UML Package</title> <identifier>/req/uml-advanced-encodings</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/uml-simple-encodings</inherit>
-
002303json_implHanging paragraph in clause
<clause id="json_impl" obligation="normative">
-<title>JSON Implementation (normative)</title>
-<p id="_31b60645-09e6-ce8f-1a77-5a3520eca393">This standard defines a normative JSON implementation of the conceptual models presented in <xref target="uml_models"/>. The standardization target type for all requirements classes in this clause is a JSON instance document that seeks compliance with this JSON encoding model.</p>
-
-<p id="_1cf4a114-de99-8706-0754-a23233d31e0a">JSON schemas defined in this section are a direct implementation of the UML conceptual models described in <xref target="uml_models"/>. They have been generated from these models by strictly following well-defined encoding rules. All attributes and composition/aggregation associations contained in the UML models are encoded as JSON object members.</p>
002323json_​simple_​componentsHanging paragraph in clause
<clause id="json_simple_components" obligation="normative">
-<title>Requirements Class: Basic Types and Simple Components JSON Schemas</title>
-<requirement id="_99b7f7b8-1019-5b0d-e920-eadec3efc268" model="ogc" type="class">
-<title>Basic Types and Simple Components JSON Schemas</title> <identifier>/req/json-simple-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-simple-components</inherit>
-
002883json_​record_​componentsHanging paragraph in clause
<clause id="json_record_components" obligation="normative">
-<title>Requirements Class: Record Components JSON Schema</title>
-<requirement id="_6c309e4e-6f02-20bb-fba5-7e91ad207e11" model="ogc" type="class">
-<title>Record Components JSON Schema</title> <identifier>/req/json-record-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-record-components</inherit> <inherit>/req/json-simple-components</inherit>
-
003095json_​choice_​componentsHanging paragraph in clause
<clause id="json_choice_components" obligation="normative">
-<title>Requirements Class: Choice Components JSON Schema</title>
-<requirement id="_bb59272d-3510-7da9-3247-df501dd3e841" model="ogc" type="class">
-<title>Choice Components JSON Schema</title> <identifier>/req/json-choice-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-choice-components</inherit> <inherit>/req/json-simple-components</inherit>
-
003179json_​block_​componentsHanging paragraph in clause
<clause id="json_block_components" obligation="normative">
-<title>Requirements Class: Block Components JSON Schema</title>
-<requirement id="_fa1e418c-cb12-4d18-981c-abd027ffe14f" model="ogc" type="class">
-<title>Block Components JSON Schema</title> <identifier>/req/json-block-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-block-components</inherit> <inherit>/req/json-simple-components</inherit>
-
003473json_geom_​components­Hanging paragraph in clause
<clause id="json_geom_components" obligation="normative">
-<title>Requirements Class: Geometry Components JSON Schema</title>
-<requirement id="_592e474e-c0ae-be08-40f0-e1037d58dd01" model="ogc" type="class">
-<title>Geometry Components JSON Schema</title> <identifier>/req/json-geom-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-geom-components</inherit> <inherit>/req/json-simple-components</inherit>
-
003540json_​simple_​encodingsHanging paragraph in clause
<clause id="json_simple_encodings" obligation="normative">
-<title>Requirements Class: Simple Encodings JSON Schema</title>
-<requirement id="_5941b0e3-b8ac-02c6-96a5-f8da75d20226" model="ogc" type="class">
-<title>Simple Encodings JSON Schema</title> <identifier>/req/json-simple-encodings</identifier> <subject>JSON Document</subject> <inherit>/req/json-simple-encodings</inherit> <inherit>/req/text-encoding-rules</inherit> <inherit>/req/json-encoding-rules</inherit>
-
003583json_​advanced_​encodingsHanging paragraph in clause
<clause id="json_advanced_encodings" obligation="normative">
-<title>Requirements Class: Advanced Encodings JSON Schema</title>
-<requirement id="_9acc1a88-e86e-a618-4410-7b27b372e782" model="ogc" type="class">
-<title>Advanced Encodings JSON Schema</title> <identifier>/req/json-advanced-encodings</identifier> <subject>JSON Document</subject> <inherit>/req/uml-advanced-encodings</inherit> <inherit>/req/json-simple-encodings</inherit> <inherit>/req/binary-encoding-rules</inherit>
-
003741_​requirements_class_​general_​encoding_​rulesHanging paragraph in clause
<clause id="_requirements_class_general_encoding_rules" obligation="normative">
-<title>Requirements Class: General Encoding Rules</title>
-<requirement id="_1907413d-16cf-2fff-31d1-00a12dbcc8c0" model="ogc" type="class">
-<title>General Encoding Rules</title> <identifier>/req/general-encoding-rules</identifier> <subject>Encoded Values Instance</subject> <classification> <tag>indirect-dependency</tag> <value>/req/uml-simple-encodings</value> </classification>
-
003784_​de9e5250-8795-38e5-­e509-4c8f2c816527Figure should have title
<figure id="_de9e5250-8795-38e5-e509-4c8f2c816527" unnumbered="true">
-  <image src="data:image/png;base64,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" mimetype="image/png" id="_85be1447-0888-37a1-d668-95e1b3230e09" height="auto" width="auto"/>
-</figure>
003801_​025f87f8-636c-0faa-­2e44-c7aa8fc127b5Figure should have title
<figure id="_025f87f8-636c-0faa-2e44-c7aa8fc127b5" unnumbered="true">
-  <image src="data:image/png;base64,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" mimetype="image/png" id="_046b115e-72a5-52de-9b15-aabd287b2031" height="auto" width="auto"/>
-</figure>
003820_​1c68e07d-7cd6-46ff-­7812-72b541333428Figure should have title
<figure id="_1c68e07d-7cd6-46ff-7812-72b541333428" unnumbered="true">
-  <image src="data:image/png;base64,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" mimetype="image/png" id="_b5cba205-cf8d-a952-f399-f9ac6d4cfae6" height="auto" width="auto"/>
-</figure>
003842encoding_​rules_jsonHanging paragraph in clause
<clause id="encoding_rules_json" obligation="normative">
-<title>Requirements Class: JSON Encoding Rules</title>
-<requirement id="_c2015f20-f489-6745-fd69-b92ab9886815" model="ogc" type="class">
-<title>JSON Encoding Rules</title> <identifier>/req/json-encoding-rules</identifier> <subject>Encoded Values Instance</subject> <inherit>/req/general-encoding-rules</inherit> <classification> <tag>indirect-dependency</tag> <value>/req/uml-simple-encodings</value> </classification>
-
004121encoding_​rules_textHanging paragraph in clause
<clause id="encoding_rules_text" obligation="normative">
-<title>Requirements Class: Text Encoding Rules</title>
-<requirement id="_cc4eb8a1-db2e-a8e9-78a6-1e923ad92b51" model="ogc" type="class">
-<title>Text Encoding Rules</title> <identifier>/req/text-encoding-rules</identifier> <subject>Encoded Values Instance</subject> <inherit>/req/general-encoding-rules</inherit> <classification> <tag>indirect-dependency</tag> <value>/req/uml-simple-encodings</value> </classification>
-
004366encoding_​rules_​binaryHanging paragraph in clause
<clause id="encoding_rules_binary" obligation="normative">
-<title>Requirements Class: Binary Encoding Rules</title>
-<requirement id="_b1ce9c3b-8a15-9fd0-be63-ac80b4fe0b44" model="ogc" type="class">
-<title>Binary Encoding Rules</title> <identifier>/req/binary-encoding-rules</identifier> <subject>Encoded Values Instance</subject> <inherit>/req/general-encoding-rules</inherit> <classification> <tag>indirect-dependency</tag> <value>/req/uml-advanced-encodings</value> </classification>
-
006199_xml_​encoding_rules_​examplesHanging paragraph in clause
<clause id="_xml_encoding_rules_examples" obligation="informative">
-<title>XML Encoding Rules Examples</title>
-<p id="_822a7111-bf90-a3eb-e553-28a3d8a3acec">The following examples build on the ones provided in the <xref target="enc_text_examples" style="basic"/> section. The datastream descriptions are kept the same, except that the encoding method would have to be changed to:</p>
-
-<sourcecode id="_8dc83268-df1a-1b27-df27-853b3c9f172a" lang="xml" unnumbered="true">&lt;swe:encoding&gt;
006428_json_​encoding_​rules_examplesHanging paragraph in clause
<clause id="_json_encoding_rules_examples" obligation="informative">
-<title>JSON Encoding Rules Examples</title>
-<p id="_f2759f82-3110-b6dc-9e02-69fc13362ef9">The following examples build on the ones provided in the <xref target="enc_text_examples" style="basic"/> section. The datastream descriptions are kept the same, except that the encoding method would have to be changed to:</p>
-
-<sourcecode id="_1fce0c5c-f767-b713-4925-8bea40e85823" lang="xml" unnumbered="true">&lt;swe:encoding&gt;
006720_​f9a0580f-73b5-c0aa-­10f1-badec38ae640Table should have title
<table id="_f9a0580f-73b5-c0aa-10f1-badec38ae640" unnumbered="true" width="90%"> <thead> <tr> <th valign="middle" align="left">Date</th>
-<th valign="middle" align="left">Release</th>
-<th valign="middle" align="left">Editor</th>
-<th valign="middle" align="left">Primary clauses modified</th>
-<th valign="middle" align="left">Description</th>
-

Requirements

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
LineIDMessageContext
000517_​056c9de6-79cc-7051-­3593-6b5c5d9c615fRequirement class /req/​core has no corresponding Requirement -
<requirement id="_056c9de6-79cc-7051-3593-6b5c5d9c615f" model="ogc" type="class">
-<title>Core Concepts</title> <identifier>/req/core</identifier> <subject>Derived Models and Software Implementations</subject>
-
-</requirement>
000922_​e2776023-f091-0c76-­b3a5-f83f23903205Requirement class /req/​uml-simple-com­ponents has no corresponding Requirement -
<requirement id="_e2776023-f091-0c76-b3a5-f83f23903205" model="ogc" type="class">
-<title>Simple Components UML Package</title> <identifier>/req/uml-simple-components</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/core</inherit>
-
-</requirement>
001621_​2482225b-0e65-b85f-­57ac-c5ac6d068358Requirement class /req/​uml-record-com­ponents has no corresponding Requirement -
<requirement id="_2482225b-0e65-b85f-57ac-c5ac6d068358" model="ogc" type="class">
-<title>Record Components UML Package</title> <identifier>/req/uml-record-components</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/uml-simple-components</inherit>
-
-</requirement>
001776_​7a84a684-db61-305d-­4e88-784d9ee73536Requirement class /req/​uml-choice-com­ponents has no corresponding Requirement -
<requirement id="_7a84a684-db61-305d-4e88-784d9ee73536" model="ogc" type="class">
-<title>Choice Components UML Package</title> <identifier>/req/uml-choice-components</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/uml-simple-components</inherit>
-
-</requirement>
001840_​230ddecb-09b0-6911-­19eb-045b86aa6ebaRequirement class /req/​uml-block-comp­onents has no corresponding Requirement -
<requirement id="_230ddecb-09b0-6911-19eb-045b86aa6eba" model="ogc" type="class">
-<title>Block Components UML Package</title> <identifier>/req/uml-block-components</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/uml-simple-components</inherit> <inherit>/req/uml-simple-encodings</inherit>
-
-</requirement>
002070_​d2632134-1a89-18cf-­a0b9-38b5be589d64Requirement class /req/​uml-geom-compo­nents has no corresponding Conformance class -
<requirement id="_d2632134-1a89-18cf-a0b9-38b5be589d64" model="ogc" type="class">
-<title>Geometry Components UML Package</title> <identifier>/req/uml-geom-components</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/uml-simple-components</inherit>
-
-</requirement>
002070_​d2632134-1a89-18cf-­a0b9-38b5be589d64Requirement class /req/​uml-geom-compo­nents has no corresponding Requirement -
<requirement id="_d2632134-1a89-18cf-a0b9-38b5be589d64" model="ogc" type="class">
-<title>Geometry Components UML Package</title> <identifier>/req/uml-geom-components</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/uml-simple-components</inherit>
-
-</requirement>
002089_​a909ecd4-6e57-4ca8-­331d-4d9b9767bdffRequirement /req/​uml-geom-compo­nents/​package-fully-­implemented has no corresponding Conformance test -
<requirement id="_a909ecd4-6e57-4ca8-331d-4d9b9767bdff" model="ogc">  <identifier>/req/uml-geom-components/package-fully-implemented</identifier>
-
-<description> <p id="_6dd4df75-174a-a4c2-c4b7-fec48e2bbb1f">The encoding or software shall correctly implement all classes defined in the “Geometry Components” UML package.</p> </description>
-</requirement>
002109_​9f47db81-b9da-c6e0-­fd10-8132673072fdRequirement /req/​uml-geom-compo­nents/​srs-valid has no corresponding Conformance test -
<requirement id="_9f47db81-b9da-c6e0-fd10-8132673072fd" model="ogc">  <identifier>/req/uml-geom-components/srs-valid</identifier>
-
-<description> <p id="_7cf76592-c182-2a96-178a-052570516ccf">The “srs” attribute shall reference the definition of a valid 2D or 3D spatial reference system.</p> </description>
-</requirement>
002125_​fb77236b-42c6-c559-­9ee2-1d27fde83d3aRequirement /req/​uml-geom-compo­nents/​geom-value-val­id has no corresponding Conformance test -
<requirement id="_fb77236b-42c6-c559-9ee2-1d27fde83d3a" model="ogc">  <identifier>/req/uml-geom-components/geom-value-valid</identifier>
-
-<description> <p id="_b7bb9a4c-bfa7-c330-dc03-8651ee95081f">The “value” attribute shall be one of the concrete geometry value classes defined in <eref type="inline" bibitemid="OGC_SFA" citeas="OGC 06-103r4"/>: “Point”, “MultiPoint”, “LineString”, “MultiLineString”, “Polygon”, or “MultiPolygon”.</p> </description>
-</requirement>
002150_​08c4500b-e118-1ba3-­953b-be4890058f15Requirement class /req/​uml-simple-enc­odings has no corresponding Requirement -
<requirement id="_08c4500b-e118-1ba3-953b-be4890058f15" model="ogc" type="class">
-<title>Simple Encodings UML Package</title> <identifier>/req/uml-simple-encodings</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/core</inherit>
-
-</requirement>
002225_​ebcb3bde-1307-6818-­4c8a-89d69894fa05Requirement class /req/​uml-advanced-e­ncodings has no corresponding Requirement -
<requirement id="_ebcb3bde-1307-6818-4c8a-89d69894fa05" model="ogc" type="class">
-<title>Advanced Encodings UML Package</title> <identifier>/req/uml-advanced-encodings</identifier> <subject>Software Implementation or Encoding of the Conceptual Models</subject> <inherit>/req/uml-simple-encodings</inherit>
-
-</requirement>
002325_​99b7f7b8-1019-5b0d-­e920-eadec3efc268Requirement class /req/​json-simple-co­mponents has no corresponding Conformance class -
<requirement id="_99b7f7b8-1019-5b0d-e920-eadec3efc268" model="ogc" type="class">
-<title>Basic Types and Simple Components JSON Schemas</title> <identifier>/req/json-simple-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-simple-components</inherit>
-
-</requirement>
002325_​99b7f7b8-1019-5b0d-­e920-eadec3efc268Requirement class /req/​json-simple-co­mponents has no corresponding Requirement -
<requirement id="_99b7f7b8-1019-5b0d-e920-eadec3efc268" model="ogc" type="class">
-<title>Basic Types and Simple Components JSON Schemas</title> <identifier>/req/json-simple-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-simple-components</inherit>
-
-</requirement>
002346_​232d0ef5-7bb4-7fa7-­efd9-26c925f18379Requirement /req/​json-simple-co­mponents/​schema-vali­d has no corresponding Conformance test -
<requirement id="_232d0ef5-7bb4-7fa7-efd9-26c925f18379" model="ogc">  <identifier>/req/json-simple-components/schema-valid</identifier>
-
-<description> <p id="_4a640195-32a4-a8a7-90f8-8e5669dbac1e">The JSON document instance shall be valid with respect to the JSON schema <link target="https://raw.githubusercontent.com/opengeospatial/connected-systems/master/swecommon/schemas/json/sweCommon.json">“sweCommon.json”</link>.</p> </description>
-</requirement>
002375_​72202d05-04cb-6b8d-­c945-88b72a913ce0Requirement /req/​json-simple-co­mponents/​special-num­erical-values has no corresponding Conformance test -
<requirement id="_72202d05-04cb-6b8d-c945-88b72a913ce0" model="ogc">  <identifier>/req/json-simple-components/special-numerical-values</identifier>
-
-<description> <p id="_e28a619e-76dd-9c5f-5d3d-6f0af644313d">The special JSON Strings <tt>NaN</tt>, <tt>-Infinity</tt> and <tt>+Infinity</tt> shall be allowed as the inline or out-of-band value for Quantity and Time <hi>(and Count?)</hi> components (except when the Time component uses the ISO 8601 format).</p> </description>
-</requirement>
002401_​54da0a70-966f-3b79-­a16c-32ac10ec7e01Requirement /req/​json-simple-co­mponents/​definition-­resolvable has no corresponding Conformance test -
<requirement id="_54da0a70-966f-3b79-a16c-32ac10ec7e01" model="ogc">  <identifier>/req/json-simple-components/definition-resolvable</identifier>
-
-<description> <p id="_9d3eac58-c5b2-b625-168a-d5627aa17ed9">The “definition” object member defined in the “AbstractDataComponent.json” schema shall contain a URI that can be resolved to the complete human readable definition of the property that is represented by the data component.</p> </description>
-</requirement>
002409_​e6f29c20-c75e-756b-­7c78-cd45a402a8ceRequirement /req/​json-simple-co­mponents/​inline-valu­e-constraint-valid has no corresponding Conformance test -
<requirement id="_e6f29c20-c75e-756b-7c78-cd45a402a8ce" model="ogc">  <identifier>/req/json-simple-components/inline-value-constraint-valid</identifier>
-
-<description> <p id="_1f16d48e-99a3-fdbd-7aa4-d9f2c4cb8a5a">The inline value included in a JSON instance validating against the “AbstractSimpleComponent.json” schema shall satisfy the constraints specified by this instance.</p> </description>
-</requirement>
002538_​9bb6b30c-4d7c-0486-­ec5c-5935d2cb9453Requirement /req/​json-simple-co­mponents/​ucum-code-u­sed has no corresponding Conformance test -
<requirement id="_9bb6b30c-4d7c-0486-ec5c-5935d2cb9453" model="ogc">  <identifier>/req/json-simple-components/ucum-code-used</identifier>
-
-<description> <p id="_0dde8e93-c881-192b-0e45-5b81b287fa80">Whenever it can be constructed using the <eref type="inline" bibitemid="UCUM" citeas="UCUM"/> specification, the unit of measure shall be specified using a UCUM code as the value of the “uom/code” property. Otherwise the “uom/href” property shall be used to reference an external unit definition.</p> </description>
-</requirement>
002588_​517c5d35-6327-fe06-­ceed-e91b31e00e1eRequirement /req/​json-simple-co­mponents/​iso8601-uom­-used has no corresponding Conformance test -
<requirement id="_517c5d35-6327-fe06-ceed-e91b31e00e1e" model="ogc">  <identifier>/req/json-simple-components/iso8601-uom-used</identifier>
-
-<description> <p id="_b9ed4610-2400-a1c3-e0e8-c3676dbb0783">When ISO 8601 notation is used to express the value associated to a “Time” element, the URI “http://www.opengis.net/def/uom/ISO-8601/0/Gregorian” shall be used as the value of the “uom/href” property.</p> </description>
-</requirement>
002885_​6c309e4e-6f02-20bb-­fba5-7e91ad207e11Requirement class /req/​json-record-co­mponents has no corresponding Conformance class -
<requirement id="_6c309e4e-6f02-20bb-fba5-7e91ad207e11" model="ogc" type="class">
-<title>Record Components JSON Schema</title> <identifier>/req/json-record-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-record-components</inherit> <inherit>/req/json-simple-components</inherit>
-
-</requirement>
002885_​6c309e4e-6f02-20bb-­fba5-7e91ad207e11Requirement class /req/​json-record-co­mponents has no corresponding Requirement -
<requirement id="_6c309e4e-6f02-20bb-fba5-7e91ad207e11" model="ogc" type="class">
-<title>Record Components JSON Schema</title> <identifier>/req/json-record-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-record-components</inherit> <inherit>/req/json-simple-components</inherit>
-
-</requirement>
003097_​bb59272d-3510-7da9-­3247-df501dd3e841Requirement class /req/​json-choice-co­mponents has no corresponding Conformance class -
<requirement id="_bb59272d-3510-7da9-3247-df501dd3e841" model="ogc" type="class">
-<title>Choice Components JSON Schema</title> <identifier>/req/json-choice-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-choice-components</inherit> <inherit>/req/json-simple-components</inherit>
-
-</requirement>
003097_​bb59272d-3510-7da9-­3247-df501dd3e841Requirement class /req/​json-choice-co­mponents has no corresponding Requirement -
<requirement id="_bb59272d-3510-7da9-3247-df501dd3e841" model="ogc" type="class">
-<title>Choice Components JSON Schema</title> <identifier>/req/json-choice-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-choice-components</inherit> <inherit>/req/json-simple-components</inherit>
-
-</requirement>
003181_​fa1e418c-cb12-4d18-­981c-abd027ffe14fRequirement class /req/​json-block-com­ponents has no corresponding Conformance class -
<requirement id="_fa1e418c-cb12-4d18-981c-abd027ffe14f" model="ogc" type="class">
-<title>Block Components JSON Schema</title> <identifier>/req/json-block-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-block-components</inherit> <inherit>/req/json-simple-components</inherit>
-
-</requirement>
003181_​fa1e418c-cb12-4d18-­981c-abd027ffe14fRequirement class /req/​json-block-com­ponents has no corresponding Requirement -
<requirement id="_fa1e418c-cb12-4d18-981c-abd027ffe14f" model="ogc" type="class">
-<title>Block Components JSON Schema</title> <identifier>/req/json-block-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-block-components</inherit> <inherit>/req/json-simple-components</inherit>
-
-</requirement>
003475_​592e474e-c0ae-be08-­40f0-e1037d58dd01Requirement class /req/​json-geom-comp­onents has no corresponding Conformance class -
<requirement id="_592e474e-c0ae-be08-40f0-e1037d58dd01" model="ogc" type="class">
-<title>Geometry Components JSON Schema</title> <identifier>/req/json-geom-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-geom-components</inherit> <inherit>/req/json-simple-components</inherit>
-
-</requirement>
003475_​592e474e-c0ae-be08-­40f0-e1037d58dd01Requirement class /req/​json-geom-comp­onents has no corresponding Requirement -
<requirement id="_592e474e-c0ae-be08-40f0-e1037d58dd01" model="ogc" type="class">
-<title>Geometry Components JSON Schema</title> <identifier>/req/json-geom-components</identifier> <subject>JSON Document</subject> <inherit>/req/uml-geom-components</inherit> <inherit>/req/json-simple-components</inherit>
-
-</requirement>
003542_​5941b0e3-b8ac-02c6-­96a5-f8da75d20226Requirement class /req/​json-simple-en­codings has no corresponding Conformance class -
<requirement id="_5941b0e3-b8ac-02c6-96a5-f8da75d20226" model="ogc" type="class">
-<title>Simple Encodings JSON Schema</title> <identifier>/req/json-simple-encodings</identifier> <subject>JSON Document</subject> <inherit>/req/json-simple-encodings</inherit> <inherit>/req/text-encoding-rules</inherit> <inherit>/req/json-encoding-rules</inherit>
-
-</requirement>
003542_​5941b0e3-b8ac-02c6-­96a5-f8da75d20226Requirement class /req/​json-simple-en­codings has no corresponding Requirement -
<requirement id="_5941b0e3-b8ac-02c6-96a5-f8da75d20226" model="ogc" type="class">
-<title>Simple Encodings JSON Schema</title> <identifier>/req/json-simple-encodings</identifier> <subject>JSON Document</subject> <inherit>/req/json-simple-encodings</inherit> <inherit>/req/text-encoding-rules</inherit> <inherit>/req/json-encoding-rules</inherit>
-
-</requirement>
003585_​9acc1a88-e86e-a618-­4410-7b27b372e782Requirement class /req/​json-advanced-­encodings has no corresponding Conformance class -
<requirement id="_9acc1a88-e86e-a618-4410-7b27b372e782" model="ogc" type="class">
-<title>Advanced Encodings JSON Schema</title> <identifier>/req/json-advanced-encodings</identifier> <subject>JSON Document</subject> <inherit>/req/uml-advanced-encodings</inherit> <inherit>/req/json-simple-encodings</inherit> <inherit>/req/binary-encoding-rules</inherit>
-
-</requirement>
003585_​9acc1a88-e86e-a618-­4410-7b27b372e782Requirement class /req/​json-advanced-­encodings has no corresponding Requirement -
<requirement id="_9acc1a88-e86e-a618-4410-7b27b372e782" model="ogc" type="class">
-<title>Advanced Encodings JSON Schema</title> <identifier>/req/json-advanced-encodings</identifier> <subject>JSON Document</subject> <inherit>/req/uml-advanced-encodings</inherit> <inherit>/req/json-simple-encodings</inherit> <inherit>/req/binary-encoding-rules</inherit>
-
-</requirement>
003618_​15046b98-8fe1-d39d-­671e-f764994f701cRequirement /req/​xsd-advanced-e­ncodings/​ref-syntax-­valid has no corresponding Conformance test -
<requirement id="_15046b98-8fe1-d39d-671e-f764994f701c" model="ogc">  <identifier>/req/xsd-advanced-encodings/ref-syntax-valid</identifier>
-
-<description> <p id="_04fc4bec-2c64-15ae-fee9-bc2614429b01">The “ref” attribute of the “Component” and “Block” elements shall contain a hierarchical ‘/’ separated list of data component names.</p> </description>
-</requirement>
003628_​84816db2-598f-b3fa-­10e5-3d188d5d011dRequirement /req/​xsd-advanced-e­ncodings/​scalar-ref-­component-valid has no corresponding Conformance test -
<requirement id="_84816db2-598f-b3fa-10e5-3d188d5d011d" model="ogc">  <identifier>/req/xsd-advanced-encodings/scalar-ref-component-valid</identifier>
-
-<description> <p id="_9c1216fb-06a2-1331-f16c-962d248f2674">The “ref” attribute of a “Component” element shall reference a scalar or range component.</p> </description>
-</requirement>
003638_​3665aee1-2ec8-849b-­5d5e-0a4f0e656202Requirement /req/​xsd-advanced-e­ncodings/​datatype-va­lid has no corresponding Conformance test -
<requirement id="_3665aee1-2ec8-849b-5d5e-0a4f0e656202" model="ogc">  <identifier>/req/xsd-advanced-encodings/datatype-valid</identifier>
-
-<description> <p id="_5f5149ae-99f9-b6b7-3c36-bf4588c5b855">The value of the “dataType” XML attribute of the “Component” element shall be one of the URIs listed in <xref target="binary-datatypes-table"/>.</p> </description>
-</requirement>
003714_​029e4bde-d12d-4add-­0e9d-35671234858aRequirement /req/​xsd-advanced-e­ncodings/​datatype-co­mpatible has no corresponding Conformance test -
<requirement id="_029e4bde-d12d-4add-0e9d-35671234858a" model="ogc">  <identifier>/req/xsd-advanced-encodings/datatype-compatible</identifier>
-
-<description> <p id="_ec1fc219-c4c4-a671-57c2-0332086d7114">The chosen data type shall be compatible with the scalar component representation, constraints and NIL values.</p> </description>
-</requirement>
003724_​4d5ffe24-8c67-fc21-­ef8a-a4ade56dc3c6Requirement /req/​xsd-advanced-e­ncodings/​no-datatype­-length has no corresponding Conformance test -
<requirement id="_4d5ffe24-8c67-fc21-ef8a-a4ade56dc3c6" model="ogc">  <identifier>/req/xsd-advanced-encodings/no-datatype-length</identifier>
-
-<description> <p id="_730ceb10-4f01-fa2e-0b5e-8108ff9929af">The “bitLength” and “byteLength” XML attributes shall not be set when a fixed size data type is used.</p> </description>
-</requirement>
003743_​1907413d-16cf-2fff-­31d1-00a12dbcc8c0Requirement class /req/​general-encodi­ng-rules has no corresponding Requirement -
<requirement id="_1907413d-16cf-2fff-31d1-00a12dbcc8c0" model="ogc" type="class">
-<title>General Encoding Rules</title> <identifier>/req/general-encoding-rules</identifier> <subject>Encoded Values Instance</subject> <classification> <tag>indirect-dependency</tag> <value>/req/uml-simple-encodings</value> </classification>
-
-</requirement>
003844_​c2015f20-f489-6745-­fd69-b92ab9886815Requirement class /req/​json-encoding-­rules has no corresponding Conformance class -
<requirement id="_c2015f20-f489-6745-fd69-b92ab9886815" model="ogc" type="class">
-<title>JSON Encoding Rules</title> <identifier>/req/json-encoding-rules</identifier> <subject>Encoded Values Instance</subject> <inherit>/req/general-encoding-rules</inherit> <classification> <tag>indirect-dependency</tag> <value>/req/uml-simple-encodings</value> </classification>
-
-</requirement>
003844_​c2015f20-f489-6745-­fd69-b92ab9886815Requirement class /req/​json-encoding-­rules has no corresponding Requirement -
<requirement id="_c2015f20-f489-6745-fd69-b92ab9886815" model="ogc" type="class">
-<title>JSON Encoding Rules</title> <identifier>/req/json-encoding-rules</identifier> <subject>Encoded Values Instance</subject> <inherit>/req/general-encoding-rules</inherit> <classification> <tag>indirect-dependency</tag> <value>/req/uml-simple-encodings</value> </classification>
-
-</requirement>
003866_​3b8c2409-b7a4-feb3-­ca1a-71604e23b107Requirement /req/​json-encodings­-rules/​json-valid has no corresponding Conformance test -
<requirement id="_3b8c2409-b7a4-feb3-ca1a-71604e23b107" model="ogc">  <identifier>/req/json-encodings-rules/json-valid</identifier>
-
-<description> <p id="_30f04319-33b6-1245-7d25-f0fa5c5d99ab">Data blocks and datastreams encoded using the JSON Encoding rules shall be valid JSON documents as defined by <eref type="inline" bibitemid="JSON" citeas="IETF RFC 8259"/>.</p> </description>
-</requirement>
003888_​46bffada-b372-7dd9-­8207-499d97fa4889Requirement /req/​json-encoding-­rules/​scalar-value-v­alid has no corresponding Conformance test -
<requirement id="_46bffada-b372-7dd9-8207-499d97fa4889" model="ogc">  <identifier>/req/json-encoding-rules/scalar-value-valid</identifier>
-
-<description> <p id="_eff9618f-a095-4d2f-a82d-630796a248d6">The value of a scalar component shall be represented using a JSON Number, a JSON String, or a boolean literal value, as defined in <xref target="json_value_types_mappings"/>.</p> </description>
-</requirement>
003946_​489031e3-0f6f-aca0-­6709-04b408d805f8Requirement /req/​json-encoding-­rules/​range-value-va­lid has no corresponding Conformance test -
<requirement id="_489031e3-0f6f-aca0-6709-04b408d805f8" model="ogc"> <identifier>/req/json-encoding-rules/range-value-valid</identifier> <component class="part"> <p id="_6490401e-7224-9245-f5a2-e327a2f7a66c">Values of range components shall be wrapped in a JSON Array with exactly 2 scalar values.</p>
-</component> <component class="part"> <p id="_a2028d3f-7bc4-b2d9-9d9f-7e50cd33f4f5">Each value is encoded in the same manner as the corresponding scalar component as defined in <xref target="json_value_types_mappings"/>.</p>
-</component>
-</requirement>
003987_​953406a4-525e-80cd-­0524-b9704a7dfde2Requirement /req/​json-encoding-­rules/​record-object-­valid has no corresponding Conformance test -
<requirement id="_953406a4-525e-80cd-0524-b9704a7dfde2" model="ogc"> <identifier>/req/json-encoding-rules/record-object-valid</identifier> <component class="part"> <p id="_016d3745-396f-71d9-6fa1-b61c1d7a3ca3">“DataRecord” values shall be wrapped in a JSON Object.</p>
-</component> <component class="part"> <p id="_beb46f4e-0820-ea0d-5311-f053a5ea6db2">The name of the JSON object members shall be the same as the “DataRecord” field names.</p>
-</component> <component class="part"> <p id="_3e5e5677-9e42-cf79-0ae5-37f974244410">The value of each JSON Object member shall be chosen by following the encoding rules of the data component used as the record field with the same name.</p>
-</component> <component class="part"> <p id="_2f119b7e-0c0b-8d41-44c9-cc0bb81c2ca8">If a record field is marked as ‘optional’, the corresponding JSON object member can be omitted or its JSON value can be set to <tt>null</tt>.</p>
-</component>
004005_​a1338f02-ad0f-421f-­9920-3f8cac2c246aRequirement /req/​json-encoding-­rules/​vector-object-­valid has no corresponding Conformance test -
<requirement id="_a1338f02-ad0f-421f-9920-3f8cac2c246a" model="ogc"> <identifier>/req/json-encoding-rules/vector-object-valid</identifier> <component class="part"> <p id="_e77ba825-07a2-8378-2f5c-443af93aef38">“Vector” values shall be wrapped in a JSON Object.</p>
-</component> <component class="part"> <p id="_1cfa451d-2873-16a7-75b8-d9bf7048b577">The name of the JSON object members shall be the same as the “Vector” coordinate names.</p>
-</component> <component class="part"> <p id="_50d7ad5a-6709-c5a9-bf08-88c5ca238445">The value of each JSON Object member shall be chosen by following the encoding rules of the data component used as the vector coordinate field with the same name.</p>
-</component>
-</requirement>
004037_​12c87431-1947-c69f-­15c5-0c43e75e6b74Requirement /req/​json-encoding-­rules/​choice-object-­valid has no corresponding Conformance test -
<requirement id="_12c87431-1947-c69f-15c5-0c43e75e6b74" model="ogc"> <identifier>/req/json-encoding-rules/choice-object-valid</identifier> <component class="part"> <p id="_d2a3e69f-6536-bc3a-5967-62879e1be820">“DataChoice” values shall be encapsulated in a JSON Object.</p>
-</component> <component class="part"> <p id="_84c88ab6-cc49-9594-99d6-4b9e32bd53f8">The JSON object shall contain a single member whose name is the same as the selected choice item.</p>
-</component> <component class="part"> <p id="_e2851041-0698-3652-7c6b-a68dd5fbf984">The JSON value of this unique member shall be chosen according to the encoding rules of the data component corresponding to the selected item.</p>
-</component>
-</requirement>
004059_​09dddaa8-1dd2-18dc-­190b-a09aebdd30ecRequirement /req/​json-encoding-­rules/​array-values-v­alid has no corresponding Conformance test -
<requirement id="_09dddaa8-1dd2-18dc-190b-a09aebdd30ec" model="ogc"> <identifier>/req/json-encoding-rules/array-values-valid</identifier> <component class="part"> <p id="_b7c62353-b69f-c82e-aa96-09bba20b29f4">“DataArray” and “Matrix” values shall be encapsulated in a JSON Array.</p>
-</component> <component class="part"> <p id="_cdce5754-a73d-9c3a-ceea-da90fbc49f3f">Each array element shall be encoded using the rules corresponding to the data component used as the array element type.</p>
-</component>
-</requirement>
004084_​80ea57d1-de9e-d411-­aa3a-ae26f74e3e6eRequirement /req/​json-encodings­-rules/​geometry-vali­d has no corresponding Conformance test -
<requirement id="_80ea57d1-de9e-d411-aa3a-ae26f74e3e6e" model="ogc"> <identifier>/req/json-encodings-rules/geometry-valid</identifier> <component class="part"> <p id="_6d429430-0736-1e67-8840-e81c6eb1bb94">The value of a “Geometry” component shall be encoded as a GeoJSON Geometry Object, following rules defined by <eref type="inline" bibitemid="GeoJSON" citeas="IETF RFC 7946"/>.</p>
-</component> <component class="part"> <p id="_6d878d22-dc4e-1a49-9ad5-83d329a2d3f0">The allowed GeoJSON geometry types shall be restricted to: <tt>Point</tt>, <tt>LineString</tt>, <tt>Polygon</tt>, <tt>MultiPoint</tt>, <tt>MultiLineString</tt>, and <tt>MultiPolygon</tt> </p>
-</component> <component class="part"> <p id="_c8c9b794-acd3-5126-ca39-857f7fa36301">The number of dimensions of the GeoJSON geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component.</p>
-</component>
-</requirement>
004123_​cc4eb8a1-db2e-a8e9-­78a6-1e923ad92b51Requirement class /req/​text-encoding-­rules has no corresponding Requirement -
<requirement id="_cc4eb8a1-db2e-a8e9-78a6-1e923ad92b51" model="ogc" type="class">
-<title>Text Encoding Rules</title> <identifier>/req/text-encoding-rules</identifier> <subject>Encoded Values Instance</subject> <inherit>/req/general-encoding-rules</inherit> <classification> <tag>indirect-dependency</tag> <value>/req/uml-simple-encodings</value> </classification>
-
-</requirement>
004145_​5a2935fe-255d-fb10-­0f4e-1957c185aa3fRequirement /req/​text-encodings­-rules/​abnf-syntax-v­alid has no corresponding Conformance test -
<requirement id="_5a2935fe-255d-fb10-0f4e-1957c185aa3f" model="ogc">  <identifier>/req/text-encodings-rules/abnf-syntax-valid</identifier>
-
-<description> <p id="_ec7d7999-d082-428e-97db-664995a0944b">The encoded values block shall be formatted as defined by the ABNF grammar defined in this clause.</p> </description>
-</requirement>
004159_​868cd68c-010f-f254-­2ed8-2fff5bdf8bc5Requirement /req/​text-encodings­-rules/​separators-va­lid has no corresponding Conformance test -
<requirement id="_868cd68c-010f-f254-2ed8-2fff5bdf8bc5" model="ogc">  <identifier>/req/text-encodings-rules/separators-valid</identifier>
-
-<description> <p id="_6aad5585-abb0-9fcb-fbb0-1432cf1a496d">Block and token separators used in the “TextEncoding” method shall be chosen as a sequence of characters that never occur in the data values themselves.</p> </description>
-</requirement>
004224_​6db1335b-3007-20b7-­9809-e49aca52bdebRequirement /req/​text-encodings­-rules/​optional-fiel­d-marker-present has no corresponding Conformance test -
<requirement id="_6db1335b-3007-20b7-9809-e49aca52bdeb" model="ogc">  <identifier>/req/text-encodings-rules/optional-field-marker-present</identifier>
-
-<description> <p id="_397248f2-0321-c29c-ad64-54385f304980">The ‘Y’ or ‘N’ token shall be inserted in a text encoded data block for all fields that have the “optional” attribute set to ‘true’.</p> </description>
-</requirement>
004259_​3c894731-50fe-75f7-­83d3-da90958c0f49Requirement /req/​text-encodings­-rules/​choice-select­ion-marker-valid has no corresponding Conformance test -
<requirement id="_3c894731-50fe-75f7-83d3-da90958c0f49" model="ogc">  <identifier>/req/text-encodings-rules/choice-selection-marker-valid</identifier>
-
-<description> <p id="_69177994-4ae9-b3f4-f6d6-2cd818171f3c">The selected-item-name token shall correspond to the value of the “name” attribute of the “item” property element that represents the selected item.</p> </description>
-</requirement>
004323_​dafd2c5a-fdf3-ae77-­d431-914df3143c22Requirement /req/​text-encodings­-rules/​geometry-vali­d has no corresponding Conformance test -
<requirement id="_dafd2c5a-fdf3-ae77-d431-914df3143c22" model="ogc"> <identifier>/req/text-encodings-rules/geometry-valid</identifier> <component class="part"> <p id="_5ce1a39a-c63a-574e-2369-6a6abde46240">The value of a “Geometry” component shall be encoded using the WKT format defined in <eref type="inline" bibitemid="OGC_SFA" citeas="OGC 06-103r4"/>, clause 7.</p>
-</component> <component class="part"> <p id="_6cb17868-8336-000b-2b13-fef82aeb4176">The WKT representation shall be either a “Two-Dimension Geometry WKT” (clause 7.2.2 of <eref type="inline" bibitemid="OGC_SFA" citeas="OGC 06-103r4"/>) or a “Three-Dimension Geometry WKT” (clause 7.2.3 of <eref type="inline" bibitemid="OGC_SFA" citeas="OGC 06-103r4"/>). The ‘M’ coordinate shall not be used.</p>
-</component> <component class="part"> <p id="_5047514d-e22c-343d-8aa4-c10a597b0c1e">The number of dimensions of the WKT geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component.</p>
-</component> <component class="part"> <p id="_23dd179f-70bc-3f5e-c27c-ab548034824d">When a geometry value is included in a text-encoded datastream, the token separator shall not be the comma character (ASCII code 44) to avoid conflicting with commas used inside the WKT representation.</p>
-</component>
004368_​b1ce9c3b-8a15-9fd0-­be63-ac80b4fe0b44Requirement class /req/​binary-encodin­g-rules has no corresponding Requirement -
<requirement id="_b1ce9c3b-8a15-9fd0-be63-ac80b4fe0b44" model="ogc" type="class">
-<title>Binary Encoding Rules</title> <identifier>/req/binary-encoding-rules</identifier> <subject>Encoded Values Instance</subject> <inherit>/req/general-encoding-rules</inherit> <classification> <tag>indirect-dependency</tag> <value>/req/uml-advanced-encodings</value> </classification>
-
-</requirement>
004543_​ca510e08-11ec-e6db-­02ab-eede857cfe5fRequirement /req/​binary-encodin­gs-rules/​geometry-va­lid has no corresponding Conformance test -
<requirement id="_ca510e08-11ec-e6db-02ab-eede857cfe5f" model="ogc"> <identifier>/req/binary-encodings-rules/geometry-valid</identifier> <component class="part"> <p id="_494f55d4-652b-27ea-3909-be55d54ea17e">The value of a “Geometry” component shall be encoded using the WKB format defined in <eref type="inline" bibitemid="OGC_SFA" citeas="OGC 06-103r4"/>, clause 8.</p>
-</component> <component class="part"> <p id="_1eac5982-66c9-dcda-be90-ab3f308cfabd">The WKB geometry type shall be one of the following types listed in <eref type="inline" bibitemid="OGC_SFA" citeas="OGC 06-103r4"/>, clause 8.2.3, table 7: <tt>Point</tt>, <tt>LineString</tt>, <tt>Polygon</tt>, <tt>MultiPoint</tt>, <tt>MultiLineString</tt>, <tt>MultiPolygon</tt>, <tt>Point Z</tt>, <tt>LineString Z</tt>, <tt>Polygon Z</tt>, <tt>MultiPoint Z</tt>, <tt>MultiLineString Z</tt>, <tt>MultiPolygon Z</tt>. Other geometry type codes shall not be used.</p>
-</component> <component class="part"> <p id="_d4169bac-78f6-f9b7-e6bc-a8046de39d34">The number of dimensions of the WKB geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component.</p>
-</component>
-</requirement>
004589_​2e94aa21-11f9-9580-­16b8-f4c966aa814bConformance class /conf/​core has no corresponding Conformance test -
<requirement id="_2e94aa21-11f9-9580-16b8-f4c966aa814b" model="ogc" type="conformanceclass"> <identifier>/conf/core</identifier> <classification> <tag>Target Type</tag> <value>Derived Models and Software Implementations</value> </classification> <classification> <tag>target</tag> <value>/req/core</value> </classification>
-</requirement>
004601_​1f55f341-eb03-7b04-­f1fe-1256a96a481eConformance test /conf/​core/​core-concepts-used has no corresponding Conformance class -
<requirement id="_1f55f341-eb03-7b04-f1fe-1256a96a481e" model="ogc" type="abstracttest">
-<title>Core concepts are the base of all derived models</title> <identifier>/conf/core/core-concepts-used</identifier> <classification> <tag>target</tag> <value>/req/core/core-concepts-used</value> </classification> <component class="test-purpose"> <p id="_2f02a668-5949-fb8a-f3c9-2d3bc3a590da">Verify that the target implementation correctly implements the core concepts.</p>
-</component>
-
-
004618_​b5365a63-e3ac-56b3-­b7e7-70afb3de616aConformance test /conf/​core/​boolean-rep-valid has no corresponding Conformance class -
<requirement id="_b5365a63-e3ac-56b3-b7e7-70afb3de616a" model="ogc" type="abstracttest">
-<title>A boolean representation consists of a boolean value</title> <identifier>/conf/core/boolean-rep-valid</identifier> <classification> <tag>target</tag> <value>/req/core/boolean-rep-valid</value> </classification> <component class="test-purpose"> <p id="_256cbb8e-ee15-e7d8-098e-05dc5208b009">Verify that the target implementation correctly implements the Boolean representation.</p>
-</component>
-
-
004635_​dd3d410f-0ced-ea27-­b3d7-0ab262f4d729Conformance test /conf/​core/​categorical-rep-valid has no corresponding Conformance class -
<requirement id="_dd3d410f-0ced-ea27-b3d7-0ab262f4d729" model="ogc" type="abstracttest">
-<title>A categorical representation consists of a token with a code space</title> <identifier>/conf/core/categorical-rep-valid</identifier> <classification> <tag>target</tag> <value>/req/core/categorical-rep-valid</value> </classification> <component class="test-purpose"> <p id="_086f347a-134e-ad51-f5fe-1529d7026bb3">Verify that the target implementation correctly implements the Categorical representation.</p>
-</component>
-
-
004652_​f42a5b56-be51-7cfa-­b705-c18183956649Conformance test /conf/​core/​numerical-rep-valid has no corresponding Conformance class -
<requirement id="_f42a5b56-be51-7cfa-b705-c18183956649" model="ogc" type="abstracttest">
-<title>A continuous numerical representation consists of a number with a scale</title> <identifier>/conf/core/numerical-rep-valid</identifier> <classification> <tag>target</tag> <value>/req/core/numerical-rep-valid</value> </classification> <component class="test-purpose"> <p id="_0c44d3cb-1337-24fa-3638-7988f2e0701f">Verify that the target implementation correctly implements the Numerical representation.</p>
-</component>
-
-
004669_​3d541508-03c4-983d-­3164-b82379f718dbConformance test /conf/​core/​countable-rep-valid has no corresponding Conformance class -
<requirement id="_3d541508-03c4-983d-3164-b82379f718db" model="ogc" type="abstracttest">
-<title>A countable representation consists of an integer number</title> <identifier>/conf/core/countable-rep-valid</identifier> <classification> <tag>target</tag> <value>/req/core/countable-rep-valid</value> </classification> <component class="test-purpose"> <p id="_2492a9bc-cf7d-4c0a-8f5e-a0871a18b132">Verify that the target implementation correctly implements the Countable representation.</p>
-</component>
-
-
004686_​0fcd9892-59a5-f7c6-­a371-9a12278fe563Conformance test /conf/​core/​textual-rep-valid has no corresponding Conformance class -
<requirement id="_0fcd9892-59a5-f7c6-a371-9a12278fe563" model="ogc" type="abstracttest">
-<title>A textual representation is implemented as a character string</title> <identifier>/conf/core/textual-rep-valid</identifier> <classification> <tag>target</tag> <value>/req/core/textual-rep-valid</value> </classification> <component class="test-purpose"> <p id="_5253fd0c-887a-0557-e248-af1881411898">Verify that the target implementation correctly implements the Textual representation.</p>
-</component>
-
-
004703_​62ae396f-d39a-3929-­4947-8cf2acea2049Conformance test /conf/​core/​semantics-defined has no corresponding Conformance class -
<requirement id="_62ae396f-d39a-3929-4947-8cf2acea2049" model="ogc" type="abstracttest">
-<title>A semantic definition of each property shall be provided</title> <identifier>/conf/core/semantics-defined</identifier> <classification> <tag>target</tag> <value>/req/core/semantics-defined</value> </classification> <component class="test-purpose"> <p id="_fb3b14fc-148a-8208-0d55-883033901091">Verify that the target implementation allows attaching a semantic definition to all property representations.</p>
-</component>
-
-
004720_​f6ca1eff-5254-37bb-­860a-72bf5e3373c7Conformance test /conf/​core/​semantics-resolvable has no corresponding Conformance class -
<requirement id="_f6ca1eff-5254-37bb-860a-72bf5e3373c7" model="ogc" type="abstracttest">
-<title>References to semantical information shall be resolvable</title> <identifier>/conf/core/semantics-resolvable</identifier> <classification> <tag>target</tag> <value>/req/core/semantics-resolvable</value> </classification> <component class="test-purpose"> <p id="_62ab3857-3c55-4966-cbaa-9741496f35e7">Verify that the target implementation encodes the semantic links in a way that they can be resolved to an actual concept definition.</p>
-</component>
-
-
004737_​9b17e49c-0a5e-ff47-­cd32-aa6532b308b0Conformance test /conf/​core/​temporal-frame-defined has no corresponding Conformance class -
<requirement id="_9b17e49c-0a5e-ff47-cd32-aa6532b308b0" model="ogc" type="abstracttest">
-<title>A temporal quantity is associated to a temporal reference frame</title> <identifier>/conf/core/temporal-frame-defined</identifier> <classification> <tag>target</tag> <value>/req/core/temporal-frame-defined</value> </classification> <component class="test-purpose"> <p id="_b79bfe4c-3d20-6477-b397-0215007f0859">Verify that the target implementation allows providing a temporal reference frame along with any date/time quantity.</p>
-</component>
-
-
004754_​d1e381f3-ef78-b336-­5679-f9f664cd2a44Conformance test /conf/​core/​spatial-frame-defined has no corresponding Conformance class -
<requirement id="_d1e381f3-ef78-b336-5679-f9f664cd2a44" model="ogc" type="abstracttest">
-<title>A spatial quantity is associated to an axis of a spatial reference frame</title> <identifier>/conf/core/spatial-frame-defined</identifier> <classification> <tag>target</tag> <value>/req/core/spatial-frame-defined</value> </classification> <component class="test-purpose"> <p id="_aa5c2d2a-3bb2-9a4c-3a16-d39aabcc2c9c">Verify that the target implementation allows providing a spatial reference frame and axis along with any quantity that is projected along a spatial dimension.</p>
-</component>
-
-
004771_​6d591855-e9df-7057-­3484-d1792560969bConformance test /conf/​core/​nil-reasons-defined has no corresponding Conformance class -
<requirement id="_6d591855-e9df-7057-3484-d1792560969b" model="ogc" type="abstracttest">
-<title>A NIL value maps a reserved value to a reason</title> <identifier>/conf/core/nil-reasons-defined</identifier> <classification> <tag>target</tag> <value>/req/core/nil-reasons-defined</value> </classification> <component class="test-purpose"> <p id="_42a01bb7-0eee-b4d4-fc08-0529973b9f27">Verify that the target implementation allows providing a reason along with each NIL (reserved) value.</p>
-</component>
-
-
004788_​f5349524-3e6e-097b-­b4bb-68e196ad1c50Conformance test /conf/​core/​aggregates-model-valid has no corresponding Conformance class -
<requirement id="_f5349524-3e6e-097b-b4bb-68e196ad1c50" model="ogc" type="abstracttest">
-<title>Aggregate data types are modeled according to ISO 11404</title> <identifier>/conf/core/aggregates-model-valid</identifier> <classification> <tag>target</tag> <value>/req/core/aggregates-model-valid</value> </classification> <component class="test-purpose"> <p id="_23a81749-cdfb-777a-8ef1-88e0215d6ec8">Verify that the target implementation models aggregate data types according to ISO 11404 definitions.</p>
-</component>
-
-
004805_​e7e68016-7366-6985-­4d98-1e070fdefaa3Conformance test /conf/​core/​encoding-method-valid has no corresponding Conformance class -
<requirement id="_e7e68016-7366-6985-4d98-1e070fdefaa3" model="ogc" type="abstracttest">
-<title>Encoding methods shall be defined for all possible data structures</title> <identifier>/conf/core/encoding-method-valid</identifier> <classification> <tag>target</tag> <value>/req/core/encoding-method-valid</value> </classification> <component class="test-purpose"> <p id="_5294388b-bacd-f967-5383-e644e1ae050d">Verify that the target implementation provides encoding methods for all representations and all implemented data structures.</p>
-</component>
-
-
004828_​8fd371be-e163-3e07-­276d-169b28da25a8Conformance class /conf/​uml-simple-co­mponents has no corresponding Conformance test -
<requirement id="_8fd371be-e163-3e07-276d-169b28da25a8" model="ogc" type="conformanceclass">
-<title>Basic Types and Simple Components UML Packages</title> <identifier>/conf/uml-simple-components</identifier> <inherit>/conf/core</inherit> <classification> <tag>Target Type</tag> <value>Derived Models and Software Implementations</value> </classification> <classification> <tag>target</tag> <value>/req/uml-simple-components</value> </classification>
-
-</requirement>
004845_​ec727618-01a0-8bb7-­1264-c3e3bbfdd161Conformance test /conf/​uml-simple-co­mponents/​package-ful­ly-implemented has no corresponding Conformance class -
<requirement id="_ec727618-01a0-8bb7-1264-c3e3bbfdd161" model="ogc" type="abstracttest">
-<title>Compliance with UML models defined in this package</title> <identifier>/conf/uml-simple-components/package-fully-implemented</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/package-fully-implemented</value> </classification> <component class="test-purpose"> <p id="_78469ee7-6c95-1179-6ed5-cc3f6f367b25">Verify that the target implements all classes in the UML package.</p>
-</component>
-
-
004862_​1d593a64-81e0-f014-­2bfb-a19bf4c56cc0Conformance test /conf/​uml-simple-co­mponents/​iso19103-im­plemented has no corresponding Conformance class -
<requirement id="_1d593a64-81e0-f014-2bfb-a19bf4c56cc0" model="ogc" type="abstracttest">
-<title>Compliance with UML models defined in ISO 19103</title> <identifier>/conf/uml-simple-components/iso19103-implemented</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/iso19103-implemented</value> </classification> <component class="test-purpose"> <p id="_bd6f96f1-b0f9-91a4-e761-f6af31d3cb2e">Verify that the target implements all classes imported from ISO 19103 UML packages.</p>
-</component>
-
-
004879_​7763f80b-6944-f333-­64d9-d3c4ca4eeccbConformance test /conf/​uml-simple-co­mponents/​iso19108-im­plemented has no corresponding Conformance class -
<requirement id="_7763f80b-6944-f333-64d9-d3c4ca4eeccb" model="ogc" type="abstracttest">
-<title>Compliance with UML models defined in ISO 19108</title> <identifier>/conf/uml-simple-components/iso19108-implemented</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/iso19108-implemented</value> </classification> <component class="test-purpose"> <p id="_038d6de7-e81c-b94a-f31e-8f1bd8fbf386">Verify that the target implements all classes imported from ISO 19108 UML packages.</p>
-</component>
-
-
004896_​7b84a17a-c4ea-7d68-­00af-f64e12752a61Conformance test /conf/​uml-simple-co­mponents/​definition-­present has no corresponding Conformance class -
<requirement id="_7b84a17a-c4ea-7d68-00af-f64e12752a61" model="ogc" type="abstracttest">
-<title>A definition URI is mandatory on all simple components</title> <identifier>/conf/uml-simple-components/definition-present</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/definition-present</value> </classification> <component class="test-purpose"> <p id="_61e29fa4-1e81-8e60-09ca-d8d0cf323257">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
004913_​2f72e808-9edb-3f01-­fa1c-c98ae66ef95cConformance test /conf/​uml-simple-co­mponents/​axis-valid has no corresponding Conformance class -
<requirement id="_2f72e808-9edb-3f01-fa1c-c98ae66ef95c" model="ogc" type="abstracttest">
-<title>The value of the axisID and axisAbbrev attributes match</title> <identifier>/conf/uml-simple-components/axis-valid</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/axis-valid</value> </classification> <component class="test-purpose"> <p id="_2486f6cd-b3d9-8827-fead-23b50aad67ae">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
004930_​38a63c29-32d4-39cf-­1288-280f6ed20fd6Conformance test /conf/​uml-simple-co­mponents/​axis-define­d has no corresponding Conformance class -
<requirement id="_38a63c29-32d4-39cf-1288-280f6ed20fd6" model="ogc" type="abstracttest">
-<title>The axis ID is always specified on scalar spatial properties</title> <identifier>/conf/uml-simple-components/axis-defined</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/axis-defined</value> </classification> <component class="test-purpose"> <p id="_f2e36aab-3076-fecf-4920-ddcb3e07f8b0">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
004947_​918c07b5-7c56-dfee-­4cc5-87a36991e593Conformance test /conf/​uml-simple-co­mponents/​ref-frame-d­efined has no corresponding Conformance class -
<requirement id="_918c07b5-7c56-dfee-4cc5-87a36991e593" model="ogc" type="abstracttest">
-<title>The reference frame is specified on scalar spatial properties not part of a vector</title> <identifier>/conf/uml-simple-components/ref-frame-defined</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/ref-frame-defined</value> </classification> <component class="test-purpose"> <p id="_ffa013bf-dac0-0fd9-b46a-7fd453538b43">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
004964_​9df5ed8c-0cc7-c93e-­962f-8827f8ccfa48Conformance test /conf/​uml-simple-co­mponents/​value-const­raint-valid has no corresponding Conformance class -
<requirement id="_9df5ed8c-0cc7-c93e-962f-8827f8ccfa48" model="ogc" type="abstracttest">
-<title>The value of a component satisfies the constraints</title> <identifier>/conf/uml-simple-components/value-constraint-valid</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/value-constraint-valid</value> </classification> <component class="test-purpose"> <p id="_2423401b-0e48-9093-ee9b-f00863fe70a7">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
004981_​7608113c-e18e-1477-­7a54-944cc143cc17Conformance test /conf/​uml-simple-co­mponents/​value-attri­bute-present has no corresponding Conformance class -
<requirement id="_7608113c-e18e-1477-7a54-944cc143cc17" model="ogc" type="abstracttest">
-<title>All derived simple components have an optional value attribute</title> <identifier>/conf/uml-simple-components/value-attribute-present</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/value-attribute-present</value> </classification> <component class="test-purpose"> <p id="_0a68cde6-05a3-62f3-ec9a-99b391bc6120">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
004998_​a3642a51-c9e0-329d-­84e2-412a89e90aadConformance test /conf/​uml-simple-co­mponents/​category-co­nstraint-valid has no corresponding Conformance class -
<requirement id="_a3642a51-c9e0-329d-84e2-412a89e90aad" model="ogc" type="abstracttest">
-<title>The list of values allowed in a Category component is a subset of the code space</title> <identifier>/conf/uml-simple-components/category-constraint-valid</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/category-constraint-valid</value> </classification> <component class="test-purpose"> <p id="_ad1652c1-d167-1c79-a6cf-7e34b339fddd">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
005015_​e593b018-a5d6-95aa-­e3c1-ba12b38bec01Conformance test /conf/​uml-simple-co­mponents/​category-en­um-defined has no corresponding Conformance class -
<requirement id="_e593b018-a5d6-95aa-e3c1-ba12b38bec01" model="ogc" type="abstracttest">
-<title>A Category component always specifies a list of possible values</title> <identifier>/conf/uml-simple-components/category-enum-defined</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/category-enum-defined</value> </classification> <component class="test-purpose"> <p id="_95200efc-bd62-29cd-e0d9-5c71f4a7ad2a">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
005032_​4551a35a-a720-e0b0-­2946-f3a671a26a23Conformance test /conf/​uml-simple-co­mponents/​category-va­lue-valid has no corresponding Conformance class -
<requirement id="_4551a35a-a720-e0b0-2946-f3a671a26a23" model="ogc" type="abstracttest">
-<title>The value of a Category component is one defined in the code space</title> <identifier>/conf/uml-simple-components/category-value-valid</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/category-value-valid</value> </classification> <component class="test-purpose"> <p id="_0b57b77e-33fa-df83-8337-0508afea6432">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
005049_​1a840f67-2ed8-3e75-­6c20-eb09d63ad675Conformance test /conf/​uml-simple-co­mponents/​time-ref-fr­ame-defined has no corresponding Conformance class -
<requirement id="_1a840f67-2ed8-3e75-6c20-eb09d63ad675" model="ogc" type="abstracttest">
-<title>The temporal reference frame is defined</title> <identifier>/conf/uml-simple-components/time-ref-frame-defined</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/time-ref-frame-defined</value> </classification> <component class="test-purpose"> <p id="_ad2547d9-09f0-81b5-203f-034546f275eb">Verify that the implementation correctly assumes the default value when the attribute is not set.</p>
-</component>
-
-
005066_​76c2de34-aa20-6e9d-­8877-d380a5559faaConformance test /conf/​uml-simple-co­mponents/​time-ref-ti­me-valid has no corresponding Conformance class -
<requirement id="_76c2de34-aa20-6e9d-8877-d380a5559faa" model="ogc" type="abstracttest">
-<title>The time of reference is expressed relative to the origin of the reference frame</title> <identifier>/conf/uml-simple-components/time-ref-time-valid</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/time-ref-time-valid</value> </classification> <component class="test-purpose"> <p id="_4c9f348a-8a51-bedd-c365-7a0d5eba32ee">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
005083_​f2ed762a-89f8-e545-­e171-5decf3d35e93Conformance test /conf/​uml-simple-co­mponents/​time-local-­frame-valid has no corresponding Conformance class -
<requirement id="_f2ed762a-89f8-e545-e171-5decf3d35e93" model="ogc" type="abstracttest">
-<title>The local and reference frames of a Time component are different</title> <identifier>/conf/uml-simple-components/time-local-frame-valid</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/time-local-frame-valid</value> </classification> <component class="test-purpose"> <p id="_5274fb50-5742-a627-f873-610bca243b9b">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
005100_​358d5b78-7db5-6804-­6ed1-8d00446d33cbConformance test /conf/​uml-simple-co­mponents/​range-value­-valid has no corresponding Conformance class -
<requirement id="_358d5b78-7db5-6804-6ed1-8d00446d33cb" model="ogc" type="abstracttest">
-<title>Values of range components satisfy the same requirements as scalar values</title> <identifier>/conf/uml-simple-components/range-value-valid</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/range-value-valid</value> </classification> <component class="test-purpose"> <p id="_fe752f10-e73e-413b-a3d4-77cc964ce930">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
005117_​a6405909-acf8-e472-­2eb2-777032902bdaConformance test /conf/​uml-simple-co­mponents/​category-ra­nge-valid has no corresponding Conformance class -
<requirement id="_a6405909-acf8-e472-2eb2-777032902bda" model="ogc" type="abstracttest">
-<title>CategoryRange components satisfy all requirements of a Category component</title> <identifier>/conf/uml-simple-components/category-range-valid</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/category-range-valid</value> </classification> <component class="test-purpose"> <p id="_d8064e91-f066-9562-4678-1bef1d8609a5">Verify that the target implementation has constraints that enforce the requirement.</p>
-</component>
-
-
005143_​b9358381-d3b4-8ad3-­925f-981da87ff61fConformance test /conf/​uml-simple-co­mponents/​category-ra­nge-codespace-order has no corresponding Conformance class -
<requirement id="_b9358381-d3b4-8ad3-925f-981da87ff61f" model="ogc" type="abstracttest">
-<title>The code space of a CategoryRange component is well-ordered</title> <identifier>/conf/uml-simple-components/category-range-codespace-order</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/category-range-codespace-order</value> </classification> <component class="test-purpose"> <p id="_f977898b-f9f7-ac2c-ff0a-32a4cbf7fb26">Verify that the code space contains elements that have a specific order (either implied or defined).</p>
-</component>
-
-
005160_​86eb7b36-a3e6-f16b-­7dcd-2cc5bc65c7daConformance test /conf/​uml-simple-co­mponents/​time-range-­valid has no corresponding Conformance class -
<requirement id="_86eb7b36-a3e6-f16b-7dcd-2cc5bc65c7da" model="ogc" type="abstracttest">
-<title>TimeRange components satisfy all requirements of the Time class</title> <identifier>/conf/uml-simple-components/time-range-valid</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/time-range-valid</value> </classification> <component class="test-purpose"> <p id="_579f376f-2337-605e-1637-e1680334271f">Verify that the target implementation has constraints that enforce the requirement.</p>
-</component>
-
-
005186_​0e46c606-0125-38a8-­1ffe-7e80633fa5a0Conformance test /conf/​uml-simple-co­mponents/​nil-reason-­resolvable has no corresponding Conformance class -
<requirement id="_0e46c606-0125-38a8-1ffe-7e80633fa5a0" model="ogc" type="abstracttest">
-<title>The reason attribute is a URI that is resolvable to a definition</title> <identifier>/conf/uml-simple-components/nil-reason-resolvable</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/nil-reason-resolvable</value> </classification> <component class="test-purpose"> <p id="_5a7c7878-bd9d-c551-2d4c-7e045038199a">Verify that the target implementation allows the value of a NIL reason identifier to be either:</p>
-<ul id="_47a17258-17c9-0c47-d53f-7cdbe01a1b69"> <li> <p id="_761eb6c6-739a-cdf3-bdc7-f4e05244fa91">a well known reason code defined by OGC</p>
-</li>
-<li> <p id="_4c921710-3d9b-7c1c-40d2-13a3ce58027e">a URI that can be resolved to the textual description of a custom reason.</p>
005208_​47a7ce47-e6c4-84b9-­1703-6fab0c9186e5Conformance test /conf/​uml-simple-co­mponents/​nil-value-t­ype-coherent has no corresponding Conformance class -
<requirement id="_47a7ce47-e6c4-84b9-1703-6fab0c9186e5" model="ogc" type="abstracttest">
-<title>Values reserved for NIL reasons are compatible with the component data type</title> <identifier>/conf/uml-simple-components/nil-value-type-coherent</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/nil-value-type-coherent</value> </classification> <component class="test-purpose"> <p id="_ac5a7d5b-83a0-177f-f3fc-6a299586e295">Verify that the target implementation has a constraint that enforces the requirement.</p>
-</component>
-
-
005225_​87f9c85a-c75d-4250-­e7bc-f767f62ebe1aConformance test /conf/​uml-simple-co­mponents/​allowed-val­ues-unit-coherent has no corresponding Conformance class -
<requirement id="_87f9c85a-c75d-4250-e7bc-f767f62ebe1a" model="ogc" type="abstracttest">
-<title>The scale of constraints is the same as the scale of the component value</title> <identifier>/conf/uml-simple-components/allowed-values-unit-coherent</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-components/allowed-values-unit-coherent</value> </classification> <component class="test-purpose"> <p id="_00331a01-f980-a49a-2a8e-4ffe5f924cee">Verify that numerical constraints are expressed with the correct scale.</p>
-</component>
-
-
005245_​2a52852a-766d-5abd-­96f6-906c472153c5Conformance class /conf/​uml-record-co­mponents has no corresponding Conformance test -
<requirement id="_2a52852a-766d-5abd-96f6-906c472153c5" model="ogc" type="conformanceclass">
-<title>Record Components UML Package</title> <identifier>/conf/uml-record-components</identifier> <inherit>/conf/uml-simple-components</inherit> <classification> <tag>Target Type</tag> <value>Derived Models and Software Implementations</value> </classification> <classification> <tag>target</tag> <value>/req/uml-record-components</value> </classification>
-
-</requirement>
005262_​edd69f9a-ff81-a141-­baae-cd2e10f96446Conformance test /conf/​uml-record-co­mponents/​package-ful­ly-implemented has no corresponding Conformance class -
<requirement id="_edd69f9a-ff81-a141-baae-cd2e10f96446" model="ogc" type="abstracttest">
-<title>Compliance with UML models defined in this package</title> <identifier>/conf/uml-record-components/package-fully-implemented</identifier> <classification> <tag>target</tag> <value>/req/uml-record-components/package-fully-implemented</value> </classification> <component class="test-purpose"> <p id="_3dcb7362-d240-d94c-0949-80fec6eac33c">Verify that the target implements all classes in the UML package.</p>
-</component>
-
-
005279_​25a6b420-ac60-03d4-­a909-441eaa7c9399Conformance test /conf/​uml-record-co­mponents/​record-fiel­d-name-unique has no corresponding Conformance class -
<requirement id="_25a6b420-ac60-03d4-a909-441eaa7c9399" model="ogc" type="abstracttest">
-<title>Each DataRecord field has a unique name</title> <identifier>/conf/uml-record-components/record-field-name-unique</identifier> <classification> <tag>target</tag> <value>/req/uml-record-components/record-field-name-unique</value> </classification> <component class="test-purpose"> <p id="_6228d4ef-39bd-8f4a-b051-f433ccfa03c7">Verify that the implementation of the “DataRecord” class has a constraint that enforces the requirement.</p>
-</component>
-
-
005296_​39c41aab-68b6-6473-­42e8-53619743ad93Conformance test /conf/​uml-record-co­mponents/​vector-coor­d-name-unique has no corresponding Conformance class -
<requirement id="_39c41aab-68b6-6473-42e8-53619743ad93" model="ogc" type="abstracttest">
-<title>Each Vector coordinate has a unique name</title> <identifier>/conf/uml-record-components/vector-coord-name-unique</identifier> <classification> <tag>target</tag> <value>/req/uml-record-components/vector-coord-name-unique</value> </classification> <component class="test-purpose"> <p id="_72146362-7b61-2363-50d5-5900c437cf35">Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.</p>
-</component>
-
-
005313_​46ba33b2-f68c-9801-­fc66-b8d3ffbba236Conformance test /conf/​uml-record-co­mponents/​vector-comp­onent-no-ref-frame has no corresponding Conformance class -
<requirement id="_46ba33b2-f68c-9801-fc66-b8d3ffbba236" model="ogc" type="abstracttest">
-<title>The reference frame is not specified on individual coordinates of a Vector</title> <identifier>/conf/uml-record-components/vector-component-no-ref-frame</identifier> <classification> <tag>target</tag> <value>/req/uml-record-components/vector-component-no-ref-frame</value> </classification> <component class="test-purpose"> <p id="_1eda1423-e2d8-5fb4-d4d3-25015d57df24">Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.</p>
-</component>
-
-
005331_​3f8c9ae6-012f-4fa1-­f3ce-422be445d9b5Conformance test /conf/​uml-record-co­mponents/​vector-comp­onent-axis-defined has no corresponding Conformance class -
<requirement id="_3f8c9ae6-012f-4fa1-f3ce-422be445d9b5" model="ogc" type="abstracttest">
-<title>The axis ID is specified on all coordinates of a Vector</title> <identifier>/conf/uml-record-components/vector-component-axis-defined</identifier> <classification> <tag>target</tag> <value>/req/uml-record-components/vector-component-axis-defined</value> </classification> <component class="test-purpose"> <p id="_e6caa5f4-1751-c555-76e0-e02110e14ad2">Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.</p>
-</component>
-
-
005349_​79d162ad-847a-fc42-­ebfa-696cdacf9991Conformance test /conf/​uml-record-co­mponents/​vector-loca­l-frame-valid has no corresponding Conformance class -
<requirement id="_79d162ad-847a-fc42-ebfa-696cdacf9991" model="ogc" type="abstracttest">
-<title>The local and reference frames of a Vector component are different</title> <identifier>/conf/uml-record-components/vector-local-frame-valid</identifier> <classification> <tag>target</tag> <value>/req/uml-record-components/vector-local-frame-valid</value> </classification> <component class="test-purpose"> <p id="_707460cf-dda0-77c9-29b5-03c8a18a80ee">Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.</p>
-</component>
-
-
005369_​14e2586d-b8e3-5d67-­3f65-d624dc72f4c9Conformance class /conf/​uml-choice-co­mponents has no corresponding Conformance test -
<requirement id="_14e2586d-b8e3-5d67-3f65-d624dc72f4c9" model="ogc" type="conformanceclass">
-<title>Choice Components UML Package</title> <identifier>/conf/uml-choice-components</identifier> <inherit>/conf/uml-simple-components</inherit> <classification> <tag>Target Type</tag> <value>Derived Models and Software Implementations</value> </classification> <classification> <tag>target</tag> <value>/req/uml-choice-components</value> </classification>
-
-</requirement>
005386_​f77b7d75-af93-72a4-­c268-40cc8730a7d3Conformance test /conf/​uml-choice-co­mponents/​package-ful­ly-implemented has no corresponding Conformance class -
<requirement id="_f77b7d75-af93-72a4-c268-40cc8730a7d3" model="ogc" type="abstracttest">
-<title>Compliance with UML models defined in this package</title> <identifier>/conf/uml-choice-components/package-fully-implemented</identifier> <classification> <tag>target</tag> <value>/req/uml-choice-components/package-fully-implemented</value> </classification> <component class="test-purpose"> <p id="_199c8856-a324-9b62-6cb0-523dfa4d0082">Verify that the target implements all classes in the UML package.</p>
-</component>
-
-
005403_​85afff80-9532-e68f-­27fa-d4759d33a770Conformance test /conf/​uml-choice-co­mponents/​choice-item­-name-unique has no corresponding Conformance class -
<requirement id="_85afff80-9532-e68f-27fa-d4759d33a770" model="ogc" type="abstracttest">
-<title>Each DataChoice item has a unique name</title> <identifier>/conf/uml-choice-components/choice-item-name-unique</identifier> <classification> <tag>target</tag> <value>/req/uml-choice-components/choice-item-name-unique</value> </classification> <component class="test-purpose"> <p id="_cb97450d-39e6-5bff-814e-0363c13ca85e">Verify that the implementation of the “DataChoice” class has a constraint that enforces the requirement.</p>
-</component>
-
-
005423_​138f715c-32c3-5a93-­1e29-24e2b4f803c1Conformance class /conf/​uml-block-com­ponents has no corresponding Conformance test -
<requirement id="_138f715c-32c3-5a93-1e29-24e2b4f803c1" model="ogc" type="conformanceclass">
-<title>Block Components UML Package</title> <identifier>/conf/uml-block-components</identifier> <inherit>/conf/uml-simple-components</inherit> <classification> <tag>Target Type</tag> <value>Derived Models and Software Implementations</value> </classification> <classification> <tag>target</tag> <value>/req/uml-block-components</value> </classification>
-
-</requirement>
005440_​475c549d-10c9-c16e-­08b3-bd3c4ff8e02dConformance test /conf/​uml-block-com­ponents/​package-full­y-implemented has no corresponding Conformance class -
<requirement id="_475c549d-10c9-c16e-08b3-bd3c4ff8e02d" model="ogc" type="abstracttest">
-<title>Compliance with UML models defined in this package</title> <identifier>/conf/uml-block-components/package-fully-implemented</identifier> <classification> <tag>target</tag> <value>/req/uml-block-components/package-fully-implemented</value> </classification> <component class="test-purpose"> <p id="_941b78b3-7780-4a34-0f09-588ddf05c475">Verify that the target implements all classes in the UML package.</p>
-</component>
-
-
005457_​5adc2646-f7bf-ce36-­316d-d267851fddefConformance test /conf/​uml-block-com­ponents/​array-compon­ent-no-value has no corresponding Conformance class -
<requirement id="_5adc2646-f7bf-ce36-316d-d267851fddef" model="ogc" type="abstracttest">
-<title>Components nested in a block component are data descriptors</title> <identifier>/conf/uml-block-components/array-component-no-value</identifier> <classification> <tag>target</tag> <value>/req/uml-block-components/array-component-no-value</value> </classification> <component class="test-purpose"> <p id="_7787389d-4441-8dc1-c51b-cfa216b727b1">Verify that implementations of the block component classes have a constraint that enforces the requirement.</p>
-</component>
-
-
005475_​4469e3d1-0cd7-cd41-­4556-885c54e2373eConformance test /conf/​uml-block-com­ponents/​array-values­-properly-encoded has no corresponding Conformance class -
<requirement id="_4469e3d1-0cd7-cd41-4556-885c54e2373e" model="ogc" type="abstracttest">
-<title>An encoding method is specified whenever an encoded data block is included</title> <identifier>/conf/uml-block-components/array-values-properly-encoded</identifier> <classification> <tag>target</tag> <value>/req/uml-block-components/array-values-properly-encoded</value> </classification> <classification> <tag>target</tag> <value>/req/uml-block-components/datastream-array-valid</value> </classification> <component class="test-purpose"> <p id="_91c9f7f6-5258-36ad-3a19-fee1bd6daad1">Verify that the implementation of block component classes have a constraint that enforces the requirement.</p>
-</component>
-
-
005497_​aef43362-ff0f-f27a-­f969-87663b1ebe04Conformance test /conf/​uml-block-com­ponents/​matrix-eleme­nt-type-valid has no corresponding Conformance class -
<requirement id="_aef43362-ff0f-f27a-f969-87663b1ebe04" model="ogc" type="abstracttest">
-<title>Elements of a matrix are of scalar types or nested matrices</title> <identifier>/conf/uml-block-components/matrix-element-type-valid</identifier> <classification> <tag>target</tag> <value>/req/uml-block-components/matrix-element-type-valid</value> </classification> <component class="test-purpose"> <p id="_b3f992dd-570b-c038-c8f6-115146236782">Verify that the implementation of the “Matrix” class has a constraint that enforces the requirement.</p>
-</component>
-
-
005517_​d47f7506-c7d2-149d-­d973-83523e116cacConformance class /conf/​uml-simple-en­codings has no corresponding Conformance test -
<requirement id="_d47f7506-c7d2-149d-d973-83523e116cac" model="ogc" type="conformanceclass">
-<title>Simple Encodings UML Package</title> <identifier>/conf/uml-simple-encodings</identifier> <inherit>/conf/core</inherit> <classification> <tag>Target Type</tag> <value>Derived Models and Software Implementations</value> </classification> <classification> <tag>target</tag> <value>/req/uml-simple-encodings</value> </classification>
-
-</requirement>
005534_​695183a2-547d-e1ae-­3007-95bc968c1d56Conformance test /conf/​uml-simple-en­codings/​package-full­y-implemented has no corresponding Conformance class -
<requirement id="_695183a2-547d-e1ae-3007-95bc968c1d56" model="ogc" type="abstracttest">
-<title>Compliance with UML models defined in this package</title> <identifier>/conf/uml-simple-encodings/package-fully-implemented</identifier> <classification> <tag>target</tag> <value>/req/uml-simple-encodings/package-fully-implemented</value> </classification> <component class="test-purpose"> <p id="_6b62ef17-dd85-000d-7f34-c8df7a654721">Verify that the target implements all classes in the UML package.</p>
-</component>
-
-
005554_​8b91f92c-80ad-78ca-­2248-da82000fb0e9Conformance class /conf/​uml-advanced-­encodings has no corresponding Conformance test -
<requirement id="_8b91f92c-80ad-78ca-2248-da82000fb0e9" model="ogc" type="conformanceclass">
-<title>Advanced Encodings UML Package</title> <identifier>/conf/uml-advanced-encodings</identifier> <inherit>/conf/uml-simple-encodings</inherit> <classification> <tag>Target Type</tag> <value>Derived Models and Software Implementations</value> </classification> <classification> <tag>target</tag> <value>/req/uml-advanced-encodings</value> </classification>
-
-</requirement>
005571_​b043d1fe-abed-54bc-­f6dd-5094f8fd5c4fConformance test /conf/​uml-advanced-­encodings/​package-fu­lly-implemented has no corresponding Conformance class -
<requirement id="_b043d1fe-abed-54bc-f6dd-5094f8fd5c4f" model="ogc" type="abstracttest">
-<title>Compliance with UML models defined in this package</title> <identifier>/conf/uml-advanced-encodings/package-fully-implemented</identifier> <classification> <tag>target</tag> <value>/req/uml-advanced-encodings/package-fully-implemented</value> </classification> <component class="test-purpose"> <p id="_fcb039bf-d174-d67f-2bc8-0d2cc995f897">Verify that the target implements all classes in the UML package.</p>
-</component>
-
-
005594_​d040ba3a-ce52-3759-­013e-ce2f4017a481Conformance class /conf/​general-encod­ing-rules has no corresponding Conformance test -
<requirement id="_d040ba3a-ce52-3759-013e-ce2f4017a481" model="ogc" type="conformanceclass">
-<title>General Encoding Rules</title> <identifier>/conf/general-encoding-rules</identifier> <classification> <tag>Target Type</tag> <value>Encoded Values Instance</value> </classification> <classification> <tag>target</tag> <value>/req/general-encoding-rules</value> </classification>
-
-</requirement>
005608_​14c3ca23-b495-0275-­5a90-9f1e54f27f96Conformance test /conf/​general-encod­ing-rules/​record-enc­oding-rule has no corresponding Conformance class -
<requirement id="_14c3ca23-b495-0275-5a90-9f1e54f27f96" model="ogc" type="abstracttest">
-<title>DataRecord fields and Vector coordinates are encoded recursively</title> <identifier>/conf/general-encoding-rules/record-encoding-rule</identifier> <classification> <tag>target</tag> <value>/req/general-encoding-rules/record-encoding-rule</value> </classification>
-
-
-<description> <example id="_11b58026-da15-6a97-e45d-d6ad04b7b94f"> <p id="_41aee896-2c9c-2ae9-0e97-102c4770de62">Verify that the sequence of scalar values (obtained after decoding the section of the encoded data block corresponding to the “DataRecord” or “Vector”) includes values for the successive fields/coordinates in the right order.</p>
005622_​de1c18f7-0079-9ecc-­9be9-fc98f8eceb25Conformance test /conf/​general-encod­ing-rules/​choice-enc­oding-rule has no corresponding Conformance class -
<requirement id="_de1c18f7-0079-9ecc-9be9-fc98f8eceb25" model="ogc" type="abstracttest">
-<title>DataChoice selected item is properly encoded</title> <identifier>/conf/general-encoding-rules/choice-encoding-rule</identifier> <classification> <tag>target</tag> <value>/req/general-encoding-rules/choice-encoding-rule</value> </classification>
-
-
-<description> <example id="_54e640c2-0a55-7e40-945e-be57155302a4"> <p id="_9a6a841e-c1d8-79b5-8c61-434bc7057d00">Verify that the sequence of scalar values (obtained after decoding the section of the encoded data block corresponding to the “DataChoice”) includes a value identifying the selected item as well as values for the item itself.</p>
005636_​49b21f4f-933f-a99b-­5dd8-150927fe3702Conformance test /conf/​general-encod­ing-rules/​array-enco­ding-rule has no corresponding Conformance class -
<requirement id="_49b21f4f-933f-a99b-5dd8-150927fe3702" model="ogc" type="abstracttest">
-<title>DataArray elements are encoded recursively</title> <identifier>/conf/general-encoding-rules/array-encoding-rule</identifier> <classification> <tag>target</tag> <value>/req/general-encoding-rules/array-encoding-rule</value> </classification>
-
-
-<description> <example id="_6ff65d02-a858-808a-6ef2-f59927cbe917"> <p id="_4f91fcfb-0ca1-b090-760e-6a17ec6ce290">Verify that the sequence of scalar values obtained after decoding the section of the encoded data block corresponding to the “DataArray” includes values for the successive elements of the array.</p>
005650_​5a50d1f4-113f-c19f-­bc57-d49767a242d8Conformance test /conf/​general-encod­ing-rules/​array-size­-encoding-rule has no corresponding Conformance class -
<requirement id="_5a50d1f4-113f-c19f-bc57-d49767a242d8" model="ogc" type="abstracttest">
-<title>The length of variable size arrays is encoded in the data block</title> <identifier>/conf/general-encoding-rules/array-size-encoding-rule</identifier> <classification> <tag>target</tag> <value>/req/general-encoding-rules/array-size-encoding-rule</value> </classification>
-
-
-<description> <example id="_257e715e-4701-d169-45e3-ac322f31e253"> <p id="_a0efae92-5871-d446-350a-76b4c3da24e5">Verify that the sequence of values obtained after decoding the section of the encoded data block corresponding to a variable size “DataArray” includes a value specifying the size of the array.</p>
005667_​761a4897-4cf7-3bb3-­694a-7c35267ad7a2Conformance class /conf/​text-encoding­-rules has no corresponding Conformance test -
<requirement id="_761a4897-4cf7-3bb3-694a-7c35267ad7a2" model="ogc" type="conformanceclass">
-<title>Text Encoding Rules</title> <identifier>/conf/text-encoding-rules</identifier> <inherit>/conf/general-encoding-rules</inherit> <classification> <tag>Target Type</tag> <value>Encoded Values Instance</value> </classification> <classification> <tag>target</tag> <value>/req/text-encoding-rules</value> </classification>
-
-</requirement>
005684_​a5e7f904-8cea-6519-­2ea1-1bc52af69a97Conformance test /conf/​text-encoding­-rules/​abnf-syntax-v­alid has no corresponding Conformance class -
<requirement id="_a5e7f904-8cea-6519-2ea1-1bc52af69a97" model="ogc" type="abstracttest">
-<title>Compliance with ABNF grammar</title> <identifier>/conf/text-encoding-rules/abnf-syntax-valid</identifier> <classification> <tag>target</tag> <value>/req/text-encoding-rules/abnf-syntax-valid</value> </classification>
-
-
-<description> <example id="_52277c20-20c8-0cfd-a4b4-2fd0c88f87d1"> <p id="_7e587001-ed07-35e5-77bd-6fc8fbb7ea70">Verify that the text encoded data block is correct with respect to the ABNF grammar corresponding to the particular dataset (The complete ABNF grammar of the dataset should be dynamically constructed from the ABNF snippets provided in the specification).</p>
005684_​a5e7f904-8cea-6519-­2ea1-1bc52af69a97Conformance test /conf/​text-encoding­-rules/​abnf-syntax-v­alid has no corresponding Requirement -
<requirement id="_a5e7f904-8cea-6519-2ea1-1bc52af69a97" model="ogc" type="abstracttest">
-<title>Compliance with ABNF grammar</title> <identifier>/conf/text-encoding-rules/abnf-syntax-valid</identifier> <classification> <tag>target</tag> <value>/req/text-encoding-rules/abnf-syntax-valid</value> </classification>
-
-
-<description> <example id="_52277c20-20c8-0cfd-a4b4-2fd0c88f87d1"> <p id="_7e587001-ed07-35e5-77bd-6fc8fbb7ea70">Verify that the text encoded data block is correct with respect to the ABNF grammar corresponding to the particular dataset (The complete ABNF grammar of the dataset should be dynamically constructed from the ABNF snippets provided in the specification).</p>
005698_​6ee28b95-a4d2-cdaa-­6dfe-bccc288a401bConformance test /conf/​text-encoding­-rules/​separators-va­lid has no corresponding Conformance class -
<requirement id="_6ee28b95-a4d2-cdaa-6dfe-bccc288a401b" model="ogc" type="abstracttest">
-<title>Separator characters are well chosen</title> <identifier>/conf/text-encoding-rules/separators-valid</identifier> <classification> <tag>target</tag> <value>/req/text-encoding-rules/separators-valid</value> </classification>
-
-
-<description> <example id="_47e10d7c-6bf8-12a2-51ed-8ffbadf7cab2"> <p id="_65971efc-2b70-3a68-cb29-68ee1f51dca4">Verify that the values encoded in the data block never include the reserved separator characters. This can be detected by looking for invalid or superfluous values.</p>
005698_​6ee28b95-a4d2-cdaa-­6dfe-bccc288a401bConformance test /conf/​text-encoding­-rules/​separators-va­lid has no corresponding Requirement -
<requirement id="_6ee28b95-a4d2-cdaa-6dfe-bccc288a401b" model="ogc" type="abstracttest">
-<title>Separator characters are well chosen</title> <identifier>/conf/text-encoding-rules/separators-valid</identifier> <classification> <tag>target</tag> <value>/req/text-encoding-rules/separators-valid</value> </classification>
-
-
-<description> <example id="_47e10d7c-6bf8-12a2-51ed-8ffbadf7cab2"> <p id="_65971efc-2b70-3a68-cb29-68ee1f51dca4">Verify that the values encoded in the data block never include the reserved separator characters. This can be detected by looking for invalid or superfluous values.</p>
005712_​ef28f08b-c84a-4368-­fed2-7e9ebc93a8e1Conformance test /conf/​text-encoding­-rules/​optional-fiel­d-marker-present has no corresponding Conformance class -
<requirement id="_ef28f08b-c84a-4368-fed2-7e9ebc93a8e1" model="ogc" type="abstracttest">
-<title>Special flags are inserted before optional component values</title> <identifier>/conf/text-encoding-rules/optional-field-marker-present</identifier> <classification> <tag>target</tag> <value>/req/text-encoding-rules/optional-field-marker-present</value> </classification>
-
-
-<description> <example id="_44beacc8-6275-5525-74b1-a92a7a7cfb41"> <p id="_5d4130ff-a010-36a2-f724-f7db060693ab">Verify that the sequence of values corresponding to the optional field starts with the ‘Y’ or ‘N’ flag.</p>
005712_​ef28f08b-c84a-4368-­fed2-7e9ebc93a8e1Conformance test /conf/​text-encoding­-rules/​optional-fiel­d-marker-present has no corresponding Requirement -
<requirement id="_ef28f08b-c84a-4368-fed2-7e9ebc93a8e1" model="ogc" type="abstracttest">
-<title>Special flags are inserted before optional component values</title> <identifier>/conf/text-encoding-rules/optional-field-marker-present</identifier> <classification> <tag>target</tag> <value>/req/text-encoding-rules/optional-field-marker-present</value> </classification>
-
-
-<description> <example id="_44beacc8-6275-5525-74b1-a92a7a7cfb41"> <p id="_5d4130ff-a010-36a2-f724-f7db060693ab">Verify that the sequence of values corresponding to the optional field starts with the ‘Y’ or ‘N’ flag.</p>
005726_​fe53757f-7b2c-30f0-­132d-57d1144a36ddConformance test /conf/​text-encoding­-rules/​choice-select­ion-marker-valid has no corresponding Conformance class -
<requirement id="_fe53757f-7b2c-30f0-132d-57d1144a36dd" model="ogc" type="abstracttest">
-<title>The name of a selected choice item is inserted in the stream</title> <identifier>/conf/text-encoding-rules/choice-selection-marker-valid</identifier> <classification> <tag>target</tag> <value>/req/text-encoding-rules/choice-selection-marker-valid</value> </classification>
-
-
-<description> <example id="_a625b6fa-c96a-b48c-d8a7-2edd3ba96079"> <p id="_fd2c83bd-e10a-bf05-f3cb-b95b1c1ee025">Verify that the sequence of values corresponding to the “DataChoice” starts with a character string matching the name of one item of the choice descriptor.</p>
005726_​fe53757f-7b2c-30f0-­132d-57d1144a36ddConformance test /conf/​text-encoding­-rules/​choice-select­ion-marker-valid has no corresponding Requirement -
<requirement id="_fe53757f-7b2c-30f0-132d-57d1144a36dd" model="ogc" type="abstracttest">
-<title>The name of a selected choice item is inserted in the stream</title> <identifier>/conf/text-encoding-rules/choice-selection-marker-valid</identifier> <classification> <tag>target</tag> <value>/req/text-encoding-rules/choice-selection-marker-valid</value> </classification>
-
-
-<description> <example id="_a625b6fa-c96a-b48c-d8a7-2edd3ba96079"> <p id="_fd2c83bd-e10a-bf05-f3cb-b95b1c1ee025">Verify that the sequence of values corresponding to the “DataChoice” starts with a character string matching the name of one item of the choice descriptor.</p>
005743_​3b48707a-46b3-39ca-­de01-673ce695653bConformance class /conf/​binary-encodi­ng-rules has no corresponding Conformance test -
<requirement id="_3b48707a-46b3-39ca-de01-673ce695653b" model="ogc" type="conformanceclass">
-<title>Binary Encoding Rules</title> <identifier>/conf/binary-encoding-rules</identifier> <inherit>/conf/general-encoding-rules</inherit> <classification> <tag>Target Type</tag> <value>Encoded Values Instance</value> </classification> <classification> <tag>target</tag> <value>/req/binary-encoding-rules</value> </classification>
-
-</requirement>
005760_​e9efe42b-2464-8e2e-­89d1-24f2683c94d6Conformance test /conf/​binary-encodi­ng-rules/​abnf-syntax­-valid has no corresponding Conformance class -
<requirement id="_e9efe42b-2464-8e2e-89d1-24f2683c94d6" model="ogc" type="abstracttest">
-<title>Compliance with ABNF grammar</title> <identifier>/conf/binary-encoding-rules/abnf-syntax-valid</identifier> <classification> <tag>target</tag> <value>/req/binary-encoding-rules/abnf-syntax-valid</value> </classification>
-
-
-<description> <example id="_abb3a3b5-1b78-876f-b968-a75259cbf833"> <p id="_efca0ce5-e285-4295-b505-3c7d9b54a3b9">Verify that the binary encoded data block is correct with respect to the ABNF grammar of the particular dataset (The complete ABNF grammar of the dataset should be dynamically constructed from the ABNF snippets provided in the specification).</p>
005774_​21c9feea-e955-f828-­4647-8bef11f3a8b6Conformance test /conf/​binary-encodi­ng-rules/​type-encodi­ng-valid has no corresponding Conformance class -
<requirement id="_21c9feea-e955-f828-4647-8bef11f3a8b6" model="ogc" type="abstracttest">
-<title>Data types are encoded as specified in this standard</title> <identifier>/conf/binary-encoding-rules/type-encoding-valid</identifier> <classification> <tag>target</tag> <value>/req/binary-encoding-rules/type-encoding-valid</value> </classification>
-
-
-<description> <example id="_00b19140-d2f6-bba8-dd81-caedaf0de1f6"> <p id="_a24b30d2-c9b4-eec6-a5f7-5b1dfc356e75">Verify that valid and realistic scalar values are obtained when the binary data block is parsed by extracting the number of bits specified in the table and decoding the resulting bytes in the order specified by the “byteOrder” attribute. When the encoded data and the encoding parameters are not consistent, abberant values (such as -65502 for a temperature field, etc…) are usually obtained, which can be easily detected.</p>
005788_​62985ee3-a525-0e83-­7ea9-1e2b791daba7Conformance test /conf/​binary-encodi­ng-rules/​base64-tran­slation-applied has no corresponding Conformance class -
<requirement id="_62985ee3-a525-0e83-7ea9-1e2b791daba7" model="ogc" type="abstracttest">
-<title>Base64 encoding is implemented as defined by IETF</title> <identifier>/conf/binary-encoding-rules/base64-translation-applied</identifier> <classification> <tag>target</tag> <value>/req/binary-encoding-rules/base64-translation-applied</value> </classification>
-
-
-<description> <example id="_0ddc7ba7-ee3e-356b-112d-cf56741a0604"> <ul id="_362e2967-5f4a-4991-ba1f-06c25ea0e163"> <li> <p id="_b42ae5f9-12d7-da28-7dd8-c93df3d3d207">Verify that only characters allowed by base64 encoding are used in the encoded data content.</p>
005806_​b7b58a36-dcf8-be23-­b04e-d873c4be83c3Conformance test /conf/​binary-encodi­ng-rules/​optional-fi­eld-marker-present has no corresponding Conformance class -
<requirement id="_b7b58a36-dcf8-be23-b04e-d873c4be83c3" model="ogc" type="abstracttest">
-<title>Special flags are inserted before optional component values</title> <identifier>/conf/binary-encoding-rules/optional-field-marker-present</identifier> <classification> <tag>target</tag> <value>/req/binary-encoding-rules/optional-field-marker-present</value> </classification>
-
-
-<description> <example id="_4387bb95-ba8d-932c-61a8-d2b9f064162f"> <ul id="_c31ffe69-7cb6-8932-46bd-84b64467e6d9"> <li> <p id="_33cca6ed-7701-0d97-673c-21bcaa1131a0">Verify that any optional field is preceded by the a 1-byte ASCII character with value ‘Y’ or ‘N’.</p>
005824_​5bfaf0c3-a4ed-b179-­95ee-dd9171ca2a8cConformance test /conf/​binary-encodi­ng-rules/​choice-sele­ction-marker-valid has no corresponding Conformance class -
<requirement id="_5bfaf0c3-a4ed-b179-95ee-dd9171ca2a8c" model="ogc" type="abstracttest">
-<title>The name of a selected choice item is inserted in the stream</title> <identifier>/conf/binary-encoding-rules/choice-selection-marker-valid</identifier> <classification> <tag>target</tag> <value>/req/binary-encoding-rules/choice-selection-marker-valid</value> </classification>
-
-
-<description> <example id="_65547ce1-3fbd-be45-2899-7a754002365c"> <ul id="_1fe4db90-440e-b343-20f3-01fe83b94bd3"> <li> <p id="_3fde4108-4f6a-4b7c-669c-d2e307c702c4">Verify that the sequence of bytes corresponding to the “DataChoice” starts with a byte value that is greater or equal to 0 and less than the total number of items defined in the choice descriptor.</p>
-

Document Attributes

- - - - -
LineIDMessageContext
--draft is not an allowed status for standard
-

Metanorma XML Syntax

- - - - - - - - - - - - -
LineIDMessageContext
XML Line 000005:218character content of element "on" invalid; must be a string matching the regular expression "([\+\-]?​\d{4})((-?​)((0[1-9]​|1[0-2]​)((-?)([12]​\d|0[1-9]​|3[01]))?​|W([0-4]​\d|5[0-2])(-?​[1-7])?​|(00[1-9]|0[1-9]​\d|[12]​\d{2}|3([0-5]​\d|6[1-6]​))))?"
XML Line 000005:264character content of element "on" invalid; must be a string matching the regular expression "([\+\-]?​\d{4})((-?​)((0[1-9]​|1[0-2]​)((-?)([12]​\d|0[1-9]​|3[01]))?​|W([0-4]​\d|5[0-2])(-?​[1-7])?​|(00[1-9]|0[1-9]​\d|[12]​\d{2}|3([0-5]​\d|6[1-6]​))))?"
XML Line 000005:312character content of element "on" invalid; must be a string matching the regular expression "([\+\-]?​\d{4})((-?​)((0[1-9]​|1[0-2]​)((-?)([12]​\d|0[1-9]​|3[01]))?​|W([0-4]​\d|5[0-2])(-?​[1-7])?​|(00[1-9]|0[1-9]​\d|[12]​\d{2}|3([0-5]​\d|6[1-6]​))))?"
XML Line 000079:60element "clause" not allowed here; expected the element end-tag or element "submitters"
XML Line 000096:89element "clause" not allowed here; expected the element end-tag or element "submitters"
XML Line 000220:107IDREF "ISO19156" without matching ID
XML Line 000232:107IDREF "ISO19156" without matching ID
XML Line 000243:107IDREF "ISO19143" without matching ID
XML Line 000341:15element "definitions" incomplete; missing required element "dl"
- diff --git a/swecommon/standard/24-014.html b/swecommon/standard/24-014.html deleted file mode 100644 index 57569edb..00000000 --- a/swecommon/standard/24-014.html +++ /dev/null @@ -1,4676 +0,0 @@ - - -OGC SWE Common Data Model Encoding Standard - - - - - - - - - - - - - - - - -
-

Draft

-
- -
-

OGC Standard

-
- - - -
- -
- - -
-
- -
- -
- OGC SWE Common Data Model Encoding Standard - -
-
- - - - - -
- - - - - - - Alexandre Robin Editor - - -
- - - -
- - Version: 3.0.0
- - -
- -
- -
- -
-
- OGC Standard -
- -
-

Draft

-
-
- -
- -
- - - -
- - - - - - -
Document number:24-014
Document type:OGC Standard
Document subtype:Implementation
Document stage:Draft
Document language:English
-
- -
- - -
-
-
-

-
- -

License Agreement

- -

Use of this document is subject to the license agreement at https://www.ogc.org/license

-
-
- - -
- -
-

Suggested additions, changes and comments on this document are welcome and encouraged. Such suggestions may be submitted using the online change request form on OGC web site: http://ogc.standardstracker.org/

-
-
- - -
- - - - -
-

- - - - - - -


I.  Abstract

The primary focus of the SWE Common Data Model is to define and package data in a self-describing and semantically enabled way. The main objective is to achieve interoperability, first at the syntactic level, and later at the semantic level (by using ontologies and probably semantic mediation) so that (sensor) data can be better understood by machines, processed automatically in complex workflows and easily shared between intelligent nodes.

This standard is one of several implementation standards produced under OGC’s Connected Systems activity, and is a revision of content that was previously developed in the context of the Sensor Web Enablement initiative. These common data models are intended to be used in various OGC standards, and in particular, SensorML and OGC API — Connected Systems.

II.  Keywords

The following are keywords to be used by search engines and document catalogues.

ogcdoc, OGC document, html, SWE, sensor, sensorweb, connected systems, json, encoding, observation, command, tasking, property


III.  Preface

The OGC SWE Common Data Model Encoding Standard is the result of worked done by the Connected Systems Working Group of the OGC, with the aim of modernizing the Sensor Wen Enablement (SWE) suite of Standards.

To increase the brevity and readability of this Standard, many OGC document titles are shortened and/or abbreviated. Therefore, in the context of this document, the following phrases are defined:

“this Standard” shall be interpreted as equivalent to “OGC SWE Common Data Model Encoding Standard”. -“SensorML” or “SensorML Standard” shall be interpreted as equivalent to “OGC Sensor Modeling Language Encoding Standard”

IV.  Security considerations

No security considerations have been made for this Standard.

V.  Submitting Organizations

The following organizations submitted this Document to the Open Geospatial Consortium (OGC):

  • GeoRobotix, Inc.
  • -
  • Botts Innovative Research, Inc.
  • -
  • Cesium GS, Inc.
  • -
  • 52° North Initiative for Geospatial Open Source Software GmbH
  • -
  • Pelagis Data Solutions
  • -
  • National Geospatial-Intelligence Agency (NGA)

VI.  Submitters

All questions regarding this submission should be directed to the editor or the submitters:

NameAffiliation
Alex Robin (Editor)GeoRobotix, Inc.
Christian Autermann52° North Initiative
Chuck HeazelHeazeltech
Mike BottsBotts Innovative Research, Inc.

Additional contributors to this Standard include the following:

NameAffiliation
Arne Broering52° North Initiative
Barry ReffUS DHS
Ingo SimonisiGSI
Johannes EchterhoffiGSI
John HerringOracle USA
Luis BermudezSURA
Nick GarayBotts Innovative Research, Inc.
Peter TaylorCSIRO

VII.  Foreword

This document deprecates version 2.0 of the OGC® SWE Common Data Model Encoding Standard (OGC 08-094r2).

The following changes have been made:

  • Addition of the JSON encodings and schemas

    -
  • -
  • Addition of the Geometry data component (modeled on OGC simple feature geometries)

    -
  • -
  • Deprecation of the XML encodings

    -
  • -
  • Technical revision and improved explanations in various clauses

    -
  • -

This release is not fully backward compatible with version 2.0 even though changes were kept to a minimum.

1.  Scope

This standard defines low level data models for exchanging sensor related data between nodes of the OGC® Connected Systems framework (previously Sensor Web Enablement (SWE) framework). These models allow applications and/or servers to structure, encode and transmit sensor datasets in a self describing and semantically enabled way.

More precisely, the SWE Common Data Model is used to define the representation, nature, structure and encoding of sensor related data. These four pieces of information, essential for fully describing a data stream, are further defined in section 6.

The SWE Common Data Model is intended to be used for describing static data (files) as well as dynamically generated datasets (on the fly processing), data subsets, process and web service inputs and outputs, and real time streaming data and commands. All categories of sensor observations are in scope ranging from simple in-situ temperature data to satellite imagery and full motion video.

This standard defines JSON encodings for the dataset/datastream description, while the data itself can be encoded in JSON, text or binary form. This standard is used by other existing OGC standards such as the Sensor Model Language (SensorML) and OGC API — Connected Systems. One goal of the SWE Common Data Model is to maintain the functionality and consistency between these related standards.

2.  Conformance

This standard has been written to be compliant with the OGC Specification Model – A Standard for Modular Specification (OGC 08-131r3). Extensions of this standard shall themselves be conformant to the OGC Specification Model.

Conformance with this specification shall be checked using all the relevant tests specified in Annex A. The framework, concepts, and methodology for testing, and the criteria to be achieved to claim conformance are specified in ISO 19105: Geographic information — Conformance and Testing. In order to conform to this OGC™ encoding standard, a standardization target shall implement the core conformance class, and choose to implement any one of the other conformance classes.

Additionally, it is highly recommended that JSON based implementations of the conceptual models do implement requirement classes from clause 8 and clause 9 of this standard, respectively, and pass the corresponding conformance classes instead of defining new encodings.

TODO

This standard defines XXXX.

Requirements for N standardization target types are considered:

  • AAAA

    -
  • -
  • BBBB

    -
  • -

Conformance with this standard shall be checked using all the relevant tests specified in Annex A (normative) of this document. The framework, concepts, and methodology for testing, and the criteria to be achieved to claim conformance are specified in the OGC Compliance Testing Policies and Procedures and the OGC Compliance Testing web site.

In order to conform to this OGC® interface standard, a software implementation shall choose to implement:

  • Any one of the conformance levels specified in Annex A (normative).

    -
  • -
  • Any one of the Distributed Computing Platform profiles specified in Annexes TBD through TBD (normative).

    -
  • -

All requirements-classes and conformance-classes described in this document are owned by the standard(s) identified.

3.  Normative references

-

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

- - - - -

Policy SWG: OGC 08-131r3, The Specification Model — Standard for Modular specifications. Open Geospatial Consortium (2009).

-

John Herring: OGC 06-103r4, OpenGIS Implementation Specification for Geographic information — Simple feature access — Part 1: Common architecture. Open Geospatial Consortium (2011). http://www.opengis.net/doc/is/sfa/1.2.1.

-

Linda van den Brink, Clemens Portele, Panagiotis (Peter) A. Vretanos: OGC 10-100r3, Geography Markup Language (GML) simple features profile (with Corrigendum). Open Geospatial Consortium (2011).

-

ISO: ISO 8601:2019, Date and time — Representations for information interchange — Part 1: Basic rules. International Organization for Standardization, Geneva (2019). .. ISO (2019).

-

ISO: ISO 8601:2019, Date and time — Representations for information interchange — Part 2: Extensions. International Organization for Standardization, Geneva (2019). .. ISO (2019).

-

ISO/IEC: ISO/IEC 11404:2007, Information technology. International Organization for Standardization, International Electrotechnical Commission, Geneva (2007). https://www.iso.org/standard/39479.html.

-

ISO: ISO 19101-1:2014, Geographic information. International Organization for Standardization, Geneva (2014). https://www.iso.org/standard/59164.html.

-

ISO: ISO 19103:2005, Conceptual Schema Language. ISO (2005).

-

ISO: ISO 19107:2003, Spatial Schema. ISO (2003).

-

ISO: ISO 19108:2002, Geographic information. International Organization for Standardization, Geneva (2002). https://www.iso.org/standard/26013.html.

-

ISO: ISO 19111:2007, Spatial Referencing by Coordinates. ISO (2007).

-

Unified Code for Units of Measure (UCUM), Version 2.1, November 2017, https://ucum.org/ucum

-

Unicode Technical Std #18, Unicode Regular Expressions, Version 13, Aug. 2009

-

The Unicode Standard, Version 5.2, October 2009

- -

T. Bray (ed.): IETF RFC 8259, The JavaScript Object Notation (JSON) Data Interchange Format. RFC Publisher (2017). https://www.rfc-editor.org/info/rfc8259.

-

H. Butler, M. Daly, A. Doyle, S. Gillies, S. Hagen, T. Schaub: IETF RFC 7946, The GeoJSON Format. RFC Publisher (2016). https://www.rfc-editor.org/info/rfc7946.

-

M. Nottingham: IETF RFC 8288, Web Linking. RFC Publisher (2017). https://www.rfc-editor.org/info/rfc8288.

-

JSON Schema Validation: A Vocabulary for Structural Validation of JSON, Version 2020-12, https://json-schema.org/draft/2020-12/json-schema-validation.html

-

N. Freed, N. Borenstein: IETF RFC 2045, Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies. RFC Publisher (1996). https://www.rfc-editor.org/info/rfc2045.

-

P. Overell: IETF RFC 5234, Augmented BNF for Syntax Specifications: ABNF. RFC Publisher (2008). https://www.rfc-editor.org/info/rfc5234.

-

IEEE: IEEE 754-2008, IEEE Standard for Floating-Point Arithmetic. Institute of Electrical and Electronics Engineers (2013). https://ieeexplore.ieee.org/document/4610935.

-

4.  Terms and definitions

-

This document uses the terms defined in OGC Policy Directive 49, which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this document and OGC documents do not use the equivalent phrases in the ISO/IEC Directives, Part 2.

-

This document also uses terms defined in the OGC Standard for Modular specifications (OGC 08-131r3), also known as the ‘ModSpec’. The definitions of terms such as standard, specification, requirement, and conformance test are provided in the ModSpec.

-

For the purposes of this document, the following additional terms and definitions apply.

- -

This document uses the terms defined in Sub-clause 5.3 of [OGC06-121r9], which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this standard.

- -

For the purposes of this document, the following additional terms and definitions apply.

- -

TODO

- -

4.1. Feature

-

Abstraction of real-world phenomena

- - -

[SOURCE: ISO-19101, definition 4.11]

- -

4.2. Observation

-

Act of observing a property

- - -

[SOURCE: ISO-19156, definition 4.10]

- -

4.3. Observation Procedure

-

Method, algorithm or instrument, or system of these which may be used in making an observation

Note: In the context of the sensor web, an observation procedure is often composed of one or more sensors that transform a real world phenomenon into digital information, plus additional processing steps.

- - - - -

[SOURCE: ISO-19156, definition 4.11]

- -

4.4. Property

-

Facet or attribute of an object referenced by a name -Example : Abby’s car has the colour red, where “colour red” is a property of the car instance

- - -

[SOURCE: ISO-19143]

- -

4.5. Sensor

-

Type of observation procedure that provides the estimated value of an observed property at its output -Note: A sensor uses a combination of physical, chemical or biological means in order to estimate the underlying observed property. At the end of the measuring chain electronic devices often produce signals to be processed

- - -

4.6. Sensor Network

-

A collection of sensors and processing nodes, in which information on properties observed by the sensors may be transferred and processed -Note: A particular type of a sensor network is an ad hoc sensor network.

- - -

4.7. Sensor Data

-

List of digital values produced by a sensor that represents estimated values of one or more observed properties of one or more features -Note: Sensor data is usually available in the form of data streams or computer files.

- - - -

List of digital values produced by a sensor that contains auxiliary information that is not directly related to the value of observed properties -Example: sensor status, quality of measure, quality of service, etc… When such data is measured, it is sometimes considered sensor data as well.

- - -

4.9. Data Component

-

Element of sensor data definition corresponding to an atomic or aggregate data type -Note: A data component is a part of the overall dataset definition. The dataset structure can then be seen as a hierarchical tree of data components.

- -

6.  Conventions

6.1.  Identifiers

- -

The normative provisions in this standard are denoted by the URI

- -

http://www.opengis.net/spec/SWE/3.0

- -

All requirements and conformance tests that appear in this document are denoted by partial URIs which are relative to this base.

-

6.2.  Abbreviated terms

- -

In this document the following abbreviations and acronyms are used or introduced:

- -
  • CRS: Coordinate Reference System

    -
  • -
  • CSML: Climate Science Modeling Language

    -
  • -
  • GPS: Global Positioning System

    -
  • -
  • ISO International Organization for Standardization

    -
  • -
  • MISB Motion Imagery Standards Board

    -
  • -
  • OGC Open Geospatial Consortium

    -
  • -
  • SAS Sensor Alert Service

    -
  • -
  • SensorML Sensor Model Language

    -
  • -
  • SI Système International (International System of Units)

    -
  • -
  • SOS Sensor Observation Service

    -
  • -
  • SPS Sensor Planning Service

    -
  • -
  • SWE Sensor Web Enablement

    -
  • -
  • TAI Temps Atomique International (International Atomic Time)

    -
  • -
  • UML Unified Modeling Language

    -
  • -
  • UTC Coordinated Universal Time

    -
  • -
  • XML eXtended Markup Language

    -
  • -
  • 1D One Dimensional

    -
  • -
  • 2D Two Dimensional

    -
  • -
  • 3D Three Dimensional

    -
  • -
-

6.3.  UML Notation

- -

The diagrams that appear in this standard are presented using the Unified Modeling Language (UML) static structure diagram. The UML notations used in this standard are described in the diagram below.

- -

Figure 1

-

7.  Requirements Class: Core Concepts (normative core)

Requirements class 1: Core Concepts

Identifier/req/core
Target typeDerived Models and Software Implementations
Conformance classConformance class A.1: /conf/core

7.1.  Introduction

- -

The generic SWE Common data model defined by this standard aims at providing verbose information to robustly describe sensor related datasets. We define Sensor Data as data resulting from the observation of properties of virtual or real world objects (or features) by any type of Observation Procedure (See the Observation and Measurements specification OGC 07-022r1 for a more complete description of the observation model used in SWE).

- -

Sensor related datasets however are not limited to sensor observation values, but can also include auxiliary information such as status or ancillary data. In the following sections, we will use the term ‘property’ in a broader sense, which does not necessarily imply “property measured by a sensor”.

- -

A dataset is composed of Data Components whose values need to be put into context in order to be fully understood and interpreted, by either humans or machines. The SWE Common Data Model provides several pieces of information that are necessary to achieve this goal. More precisely, the SWE Common Data Model covers the following aspects of datasets description:

- -
  • Representation

    -
  • -
  • Nature of data and semantics (by using identifiers pointing to external semantics)

    -
  • -
  • Quality

    -
  • -
  • Structure

    -
  • -
  • Encoding

    -
  • -
- -

This requirement class constitutes the core of this standard. The standardization target types of this core are all models or software implementations seeking compliance with this standard.

- -

Requirement 1

Identifier/req/core/core-concepts-used
Statement

A derived model or software implementation shall correctly implement the concepts defined in the core of this standard.

-

7.2.  Data Representation

- -

Data representation deals with how property values are represented and stored digitally. Each component (or field) in a dataset carries a value that represents the state of a property. This representation will vary depending on the nature of the method used to capture the data and/or the target usage. For instance, a fluid temperature can be represented as a decimal number expressed in degrees Celsius (i.e. 25.4 °C), or as a categorical value taken from a list of possible choices (such as “freezing, cold, normal, warm, hot”).

- -

The following types of representations have been identified: Boolean, Categorical, Continuous Numerical, Discrete Countable and Textual. The paragraphs below explain basic features of each of these representation types.

- -

7.2.1.  Boolean

- -

A Boolean representation of a property can take only two values that should be “true/false” or “yes/no”. In a sense, this type of representation is a particular case of the categorical representation with only two predefined options.

- -

Examples

- -

Motion detectors output can be represented by a boolean value -– TRUE if there is motion in the room, FALSE otherwise.

- -

On/Off status of a measurement system can be represented by a boolean value -– TRUE if the system in on, FALSE if the system is off.

-
- -

Requirement 2

Identifier/req/core/boolean-rep-valid
Statement

A boolean representation shall at least consist of a boolean value.

- -

The “Boolean” class described in Clause 8.2.4 is used to define a data component with a Boolean representation.

-
- -

7.2.2.  Categorical

- -

A categorical representation is a type of discrete representation of a property that only allows picking a value from a well defined list of possibilities (i.e. categories). This list is called a code space in this standard, following ISO 19103 terminology.

- -

The different possible values constituting a code space are usually listed explicitly in an out-of-band dictionary or ontology. This is necessary because each value should be defined formally and unambiguously, so that it can be interpreted correctly.

- -

Examples

- -

Biological or chemical species data is usually represented by a categorical data component that can leverage on existing controlled vocabulary.

- -

A camera mode can be represented by a categorical value: AUTO_FOCUS, MANUAL_FOCUS, etc…​

-
- -

Requirement 3

Identifier/req/core/categorical-rep-valid
Statement

A categorical representation shall at least consist of a category identifier and information describing the value space of this identifier.

- -

The “Category” class described in Clause 8.2.6 is used to define a data component with a categorical representation.

-
- -

7.2.3.  Numerical (continuous)

- -

Perhaps the most used representation of a property value, especially in the science and technical communities, is the numerical one, as the majority of properties measured by sensors can be represented by numbers.

- -

Numerical representation is often used for continuous values and, in this case, the representation consists of a decimal (often floating point) number associated to a scale or unit of measure. The unit specification is mandatory even for quantities such as ratios that have no physical unit (in this case a scale factor is provided such as 1, 1/100 for percents, 1/1000 for per thousands, etc.).

- -

Examples

- -

Temperature measurements can be represented by a number associated to a unit such as degrees Celsius or Fahrenheit: 23.51°C, 94°F

- -

A velocity vector is composed of several values (usually 2 or 3) associated to a unit of speed: [1.0 2.0 3.0] m/s.

-
- -

Requirement 4

Identifier/req/core/numerical-rep-valid
Statement

A continuous numerical representation shall at least consist of a decimal number and the scale (or unit) used to express this number.

- -

The “Quantity” class described in Clause 8.2.8 is used to define a data component with a decimal representation and a unit of measure.

-
- -

7.2.4.  Countable (discrete)

- -

Discrete countable properties are also of interest and are most accurately captured with a numerical integer representation. They do not require a unit since the unit is always the unit of count (i.e. the person if we are counting persons, the pixel if we are counting pixels, etc). Note that continuous properties can also be represented as integers with certain combinations of scale and precision. This case should not be confused with the countable properties described here.

- -

Examples

- -

Array indices and sizes are countable properties with no unit.

- -

There are numerous other countable properties such as number of persons, number of bytes, number of frames, etc. for which the unit is obvious from the definition of the property itself.

-
- -

A discrete countable representation should not be confused with a continuous numerical representation whose scale and precision allow encoding the property value as an integer.

- -

Requirement 5

Identifier/req/core/countable-rep-valid
Statement

A countable representation shall at least consist of an integer number.

- -

The “Count” class described in Clause 8.2.7 is used to define a data component with an integer representation and no unit of measure.

-
- -

7.2.5.  Textual

- -

A textual representation is useful for providing human readable data, expressed in natural language, as well as various alpha numeric tokens that cannot be assigned to well-defined categories.

- -

Examples

- -

Comments or notes written by humans (ex: data annotations, quality assessments).

- -

Machine generated messages for which there is no taxonomy (ex: automatic alert messages).

- -

Alphanumeric identifier schemes leading to a large number of possibilities that cannot be explicitly enumerated (ex: UUID, ISBN code, URN).

-
- -

Requirement 6

Identifier/req/core/textual-rep-valid
Statement

A textual representation shall at least consist of a character string.

- -

The “Text” class described in Clause 8.2.5 is used to define a data component with a textual representation.

-
- -

7.2.6.  Constraints

- -

Constraints can be added to some representation types to further restrict the set of possible values allowed for a given property:

- -
  • A boolean representation cannot be restricted further since it is already limited to only two possibilities.

    -
  • -
  • A numerical representation can be constrained by a list of allowed values and/or bounded or unbounded intervals. A decimal representation can also be constrained by the number of significant digits after the decimal point.

    -
  • -
  • A categorical representation can be constrained by a list of possible choices, which should be a subset of the list of possibilities defined by the code space.

    -
  • -
  • A textual representation can be constrained by a pattern expressed in a well known language such as regular expression syntax.

    -
  • -
- -

These constraints apply only to the value of the data component to which they are associated. They shall not be used to express constraints on other data components or on any other information than the value.

- -

Examples

- -

A decimal representation of an angular property such as latitude can be constrained to the [-90° 90°] interval.

- -

A temperature reading produced by a sensor can be constrained to the [-50°C +250°C] range.

-
-
-

7.3.  Nature of Data

- -

We define “Nature of data” as the information needed to understand what property the value represents. It is thus connected to semantics and the semantic details are often provided by external sources such as dictionaries, taxonomies or ontologies. Note that it is independent of the type of representation used and it does not include information about how the data was actually measured or acquired. This lineage information should be described by other means as explained in Clause 7.4.3.

- -

7.3.1.  Human readable information

- -

The first means by which nature of data can be communicated is through human readable text. The data component’s description, which is present in all data types defined in this specification, can hold any length of text for this purpose. The data component’s label is used to carry short human readable information (i.e. a short name); this is useful to allow data consumers to quickly identify the represented property.

- -

It is not recommended to use the concepts of “description” and “label” in a way that they contain robust semantic information (i.e. that machines can rely upon). The content of such fields is intended to be interpretable solely by humans.

-
- -

7.3.2.  Robust semantics

- -

All SWE Common data types allow for associating each data component in a dataset with the definition of the Property that it represents.

- -

Requirement 7

Identifier/req/core/semantics-defined
Statement

All data values shall be associated with a clear definition of the property that the value represents.

- -

It is recommended that a model uses references to out-of-band dictionaries rather than inline information because semantics are supposed to be shared by multiple datasets. Using references also helps by providing a framework that is independent from the actual semantic technology used.

- -

The SWE Common UML models and XML schemas desribed in this standard can be used in combination with any semantic web technology. It is thus possible to connect a SWE dataset description to an existing taxonomy provided the external register exposes a unique identifier for each entry.

- -

These semantic references point to out-of-band semantic information that can be encoded in various languages, such as the Ontology Web Language (OWL) or GML dictionary.

- -

Requirement 8

Identifier/req/core/semantics-resolvable
Statement

If semantic information is provided by referencing out-of-band data, the locators or identifiers used to point to this information shall be resolvable by some well-defined method.

-
- -

7.3.3.  Time, space and projected quantities

- -

Temporal, spatial and other projected quantities need to be further defined by specifying the reference frame and axis with respect to which the quantity is expressed. In SWE Common, any simple component type can be associated to a particular axis of a given reference frame.

- -

Examples

- -

Satellite position data can be defined as a vector of 3 components, expressed in the J2000 ECI Cartesian frame, the 1st component being associated to the X axis, the 2nd to the Y axis and the 3rd to the Z axis.

- -

Angular velocity data from an Inertial Measurement Unit can be defined as a vector of 3 components, expressed in the plane reference frame (for instance ENU defined by local East, North, Up directions), the Euler components being mapped to X, Y, Z respectively.

- -

Relative time data can be given with respect to an arbitrary epoch itself positioned in a well defined reference frame such as TAI (from the French “Temps Atomique International” = International Atomic Time).

-
- -

Requirement 9

Identifier/req/core/temporal-frame-defined
Statement

A temporal quantity shall be expressed with respect to a well defined temporal reference frame and this frame shall be specified.

- -

Requirement 10

Identifier/req/core/spatial-frame-defined
Statement

A spatial quantity shall be expressed with respect to the axes of a well defined spatial reference frame and this frame shall be specified.

- -

The “Time” class described in Clause 8.2.9 is designed for carrying a temporal reference frame or a time of reference in the case of relative time data.

- -

The “Vector” class detailed in Clause 8.3.2 is a special type of record used to assign a reference frame to all its child-components.

- -

The “Matrix” class defined in Clause 8.5.2 allows the definition of higher order tensor quantities.

- -

This standard does not impose requirements on the type of reference frames that a standardization target shall support. Standards that are dependent on this specification can (and often should) however define a minimum set of reference frames that shall be supported by all implementations.

-
-

7.4.  Data Quality

- -

Quality information can be essential to the data consumer and the SWE Common Data Model provides simple and flexible ways to associate qualitative information with each component of a dataset.

- -

7.4.1.  Simple quality information

- -

Simple quality information can be associated with any scalar data component, in the form of another scalar or range value. The quality information defined here applies solely to the value of the associated data component (i.e. the measurement value) and, depending on its data type, quality can be represented by a numerical, categorical or textual value, or by a range of values.

- -

This quality information can be static, i.e. constant over the whole dataset, or dynamic and provided with the data itself. In this case, the quality value is in fact carried by another component of the dataset (and described in SWE Common as such).

- -

The exact type of quality information provided should be specified via semantic tagging just like with any other property in SWE Common.

- -

Examples

- -

Examples of quality measures are “absolute accuracy”, “relative accuracy”, “absolute precision”, “tolerance”, and “confidence level”.

- -

Quality related comments can also describe operating conditions, such as “sensor contained blockage and was removed” or “engineer on site, values may be affected”. This information can inform the user of potential inaccuracy in the data across certain periods.

-
-
- -

7.4.2.  Nil Values

- -

The concept of NIL value is used to indicate that the actual value of a property cannot be given in the data stream, and that a special code (i.e. reserved value) is used instead. It is thus a kind of quality information. The reason for which the value is not included is essential for a good interpretation of the data, so each reserved value is associated to a well-defined reason. In that sense, a NIL value definition is essentially a mapping between a reserved value and a reason.

- -

Each component of a dataset can define one or several NIL values corresponding to one or more reasons.

- -

Example

- -

In low level satellite imagery with, for instance, 8-bits per channel, the imagery metadata often defines: -- A reserved value to indicate that a pixel value was “Below Detection Limit” usually set to ‘0’ -- A reserved value to indicate that a pixel value was “Above Detection Limit” usually set to ‘255’

-
- -

Requirement 11

Identifier/req/core/nil-reasons-defined
Statement

A model of a NIL value shall always include a mapping between the selected reserved value and a well-defined reason.

-
- -

7.4.3.  Full lineage and traceability

- -

Full lineage and traceability is not in the scope of this specification. It is fully addressed by the OGC® Sensor Model Language Standard, which allows robust definition of measurement chains, with detailed information about the processing that takes place at each stage of the chain. This means that complex lineage guarantying full traceability can be recorded in a SensorML process chain, separately from the data itself.

- -

Datasets can be associated to lineage information described using the Sensor Model Language by using a metadata wrapper such as the “Observation” object defined in the OGC® Observations and Measurements Standard (O&M). In this standard, the “procedure” property of the “Observation” class allows attaching detailed information about the measurement procedure, that is to say a description of how the data was obtained (i.e. lineage), to the data itself.

-
-

7.5.  Data Structure

- -

Data structure defines how individual pieces of data are grouped, ordered, repeated and interleaved to form a complete data stream. The SWE Common models are based on data structures commonly accepted in computer science and formalized in ISO 11404. -Classical aggregate datatypes are defined below:

- -
  • Record: consists of a list of fields, each of them being keyed by a field identifier and defining its own type that can be any scalar or aggregate structure.

    -
  • -
  • Array: consists of many elements of the same type, usually indexed by an integer. The element type can be any data structure including scalars and aggregates. The array size constitutes the upper bound of the index.

    -
  • -
  • Choice: consists of a list of alternatives, each of them being keyed by a tag value and having its own type. Only values for one alternative at a time are actually present in the data stream described by such a structure.

    -
  • -
- -

Requirement 12

Identifier/req/core/aggregates-model-valid
Statement

Aggregate data structures shall be implemented in a way that is consistent with definitions of ISO 11404.

- -

This standard also defines the concept of “data component” as any part of the structure of a dataset, aggregate or not. It is thus the superset of all the aggregate structures described above and of all scalar elements implementing the representations described in Clause 7.2.

- -

Example

- -

A dataset representing a time series of observations acquired by a mobile sensor can be encoded with various methods depending on the requirements:

- -
  • XML encoding can be used when data needs to be easily styled to other markup formats (such as HTML) or when precise error localization (in the case of an error in the stream) is needed.

    -
  • -
  • ASCII encoding can be used to achieve a good compromise between readability and size efficiency.

    -
  • -
  • Binary encoding can be used (eventually with embedded compression) when pure performance (i.e. size but also reading and writing throughput) is the main concern.

    -
  • -
-
- -

A data component can be both a data descriptor and a data container:

- -
  • A data component used as a data descriptor defines the structure, representation, semantics, quality, and other metadata of a data set but does not include the actual data values.

    -
  • -
  • A data component used as a data container equally defines the dataset but also includes the actual property values.

    -
  • -
-

7.6.  Data Encoding

- -

A key concept of the SWE Common Data Model is the ability to separate data values themselves from the description of the data structure, semantics and representation. This allows verbose metadata to be used in order to robustly define the content and meaning of a dataset while still being able to package the data values in very efficient manners.

- -

Data encoding methods define how the data is packed as blocks that can efficiently be transferred or stored using various protocols and formats. Different methods allow encoding the data as JSON, text (CSV like), binary and even compressed or encrypted formats in a way that is agnostic to a particular structure. This allows any of the encodings methods to be selected and used based on a particular requirement, such as performance, re-use of tools, alignment with existing standards and so on.

- -

Requirement 13

Identifier/req/core/encoding-method-valid
Statement

All encoding methods shall be applicable to any arbitrarily complex data structures as long as they are made of the data components described in Clause 7.5.

-

8.  UML Conceptual Models (normative)

This standard defines normative UML models with which derived encoding models as well as all future separate extensions should be compliant. The standardization target type for the UML requirements classes defined in this clause is thus a software implementation or an encoding model that directly implements the conceptual models defined in this standard.

8.1.  Package Dependencies

- -

The following packages are defined by the SWE Common Data Model:

- -
- -

Figure 2 — Internal Package Dependencies

- -

This standard also has dependencies on external packages defined by other standards, namely ISO 19103, ISO 19108 and ISO 19111, as show below:

- -
- -

Figure 3 — External Package Dependencies

-

8.2.  Requirements Class: Basic Types and Simple Components Packages

- -

Requirements class 2: Simple Components UML Package

Identifier/req/uml-simple-components
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.2: /conf/uml-simple-components
PrerequisiteRequirements class 1: /req/core
- -

Data components are the most essential part of the SWE Common Data Model. They are used to describe all types of data structures, whether they represent data stream contents, tasking messages, alert messages or process inputs/outputs.

- -

The “Simple Components” UML package contains classes modeling simple data components, that is to say scalar components and range components (i.e. value extents). These classes implement concepts defined in the core section of this standard, and are designed to collect information about nature, representation and quality of data. These include six scalar types – Boolean, Text, Category, Count, Quantity, and Time – as well as four range types – CategoryRange, CountRange, QuantityRange and TimeRange.

- -

The “Basic Types” UML package from which the “Simple Components” package is dependent is also included in this requirements class.

- -

As an overview, conceptual models of the six scalar component types are shown on the following UML class diagram:

- -
- -

Figure 4 — Scalar Data Components

- -

Classes representing the four range data components are shown on the diagram below:

- -
- -

Figure 5 — Range Data Components

- -

Details and requirements about each of these classes are given in the following sections.

- -

Requirement 14

Identifier/req/uml-simple-components/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Simple Components” and “Basic Types” UML packages.

- -

Several dependencies to ISO standards exist and are detailed below.

- -

Data types from several packages of the ISO 19103 standard are used directly which makes this requirement class dependent on it. These data types are “CharacterString”, “Boolean”, “Real”, “Integer”, “Date”, “Time”, “DateTime”, “ScopedName”, “UnitOfMeasure” and “UomTime”.

- -

Requirement 15

Identifier/req/uml-simple-components/iso19103-implemented
Statement

The encoding or software shall correctly implement all UML classes defined in ISO 19103 that are referenced directly or indirectly by this standard.

- -

The “TM_Position” data type from the “Temporal Reference System” package of the ISO 19108 standard is also used.

- -

Requirement 16

Identifier/req/uml-simple-components/iso19108-implemented
Statement

The encoding or software shall correctly implement all UML classes defined in ISO 19108 that are referenced directly or indirectly by this standard.

- -

The “SC_CRS” and “TM_Temporal_CRS” classifiers are referenced conceptually from ISO 19111 but their implementation is not required by this standard. Implementations are allowed to simply use a CRS identifier as a mean of recognizing predefined coordinate reference systems. The use of identifiers from the EPSG database is recommended in this case. However, when new CRS definitions need to be created (e.g. engineering CRS attached to sensors or platforms), the models defined in ISO 19111 shall be used.

- -

8.2.1.  Basic Data Types

- -

This requirement class also includes requirements for the “Basic Types” UML package. This package defines low level data types that are used as property types by classes defined in the other packages.

- -

Data types defined in this package relate to defining pairs of data types defined in ISO 19103 for use within classes describing value extents:

- -
- -

Figure 6 — Basic types for pairs of scalar types

-
- -

8.2.2.  Attributes shared by all data components

- -

All SWE Common data component classes carry standard attributes inherited (transitively) from the “AbstractDataComponent” and “AbstractSWEValue” classes (The “AbstractSWEValue” class is actually defined in the “Basic Types” package but is shown here for clarity). The class hierarchy is shown on the following UML diagram:

- -
- -

Figure 7 — AbstractDataComponent Class

- -

Extension Slot

- -

The “extension” attribute is used as a container for future extensions. It allows adding new extended properties to an existing class at the instance level.

- -

Name and Description

- -

The optional “name” and “description” attributes can be used to provide human readable information describing what property the component represents. The “name” is meant to hold a short descriptive name whereas “description” can carry any length of plain text. These two fields should not be used to specify robust semantic information (see Clause 7.3.2). Instead, the “definition” attribute described below should be used for that purpose.

- -

Identifier

- -

The optional “identifier” attribute allows assigning a unique identifier to the component, so that it can be referenced later on. It can be used, for example, when defining the unique identifier of a universal constant.

- -

Definition

- -

The “definition” attribute identifies the property (often an observed property in our context) that the data component represents by using a scoped name. It should map to a controlled term defined in an (web accessible) dictionary, registry or ontology. Such terms provide the formal textual definition agreed upon by one or more communities, eventually illustrated by pictures and diagrams as well as additional semantic information such as relationships to units and other concepts, ontological mappings, etc.

- -

Examples

- -

The definition may indicate that the value represents an atmospheric temperature using a URN such as “urn:ogc:def:property:OGC::SamplingTime” referencing the complete definition in a register.

- -

The definition may also be a URL linking to a concept defined in an ontology such as [http//www.opengis.net/def/OGC/0/SamplingTime]. -The label could be “Sampling Time”, which allows quick identification by human data consumers.

- -

The description could be “Time at which the observation was made as measured by the on-board clock” which adds contextual details.

-
- -

Flags

- -

The “optional” attribute is an optional flag indicating if the component value can be omitted in the data stream. It is only meaningful if the component is used as a schema descriptor (i.e. not for a component containing an inline value). It is ‘false’ by default.

- -

The “updatable” attribute is an optional flag indicating if the component value is fixed or can be updated. It is only applicable if the data component is used to define the input of a process (i.e. when used to define the input or parameter of a service, process or sensor, but not when used to define the content of a dataset).

- -

Examples

- -

The “updatable” flag can be used to identify what parameters of a system are changeable. The exact semantics depends on the context. For example:

- -
  • In SensorML process chains, the “updatable” flag is used to identify process parameters that can accept an incoming connection (and thus can get changed while the process is in execution).

    -
  • -
  • In a SensorML System it is used to indicate whether or not a system parameter is changeable, either by an operator (i.e. by turning a screw or inserting a jumper) or remotely by sending a command.

    -
  • -
  • In the Sensor Planning Service it is used to indicate if tasking parameters are changeable by the client (i.e. by using the Update operation) after a task has been submitted.

    -
  • -
-
-
- -

8.2.3.  Attributes shared by all simple data components

- -

As shown on Figures 4 and 5, classes modeling simple data components inherit attributes from the “AbstractSimpleComponent” class from which they are directly derived. This abstract class is shown again below:

- -
- -

Figure 8 — AbstractSimpleComponent Class

- -

The definition attribute inherited from the “AbstractDataComponent” class is mandatory on this class and thus on all its descendants.

- -

Requirement 17

Identifier/req/uml-simple-components/definition-present
Statement

The “definition” attribute shall be specified by all instances of concrete classes derived from “AbstractSimpleComponent”.

- -

Reference Frames and Axes

- -

It provides two attributes allowing the association of a data component to a reference frame and an axis and thus implements core concepts introduced in Clause 7.3.3. These attributes are used for a component which value is the projection of a property along a temporal or spatial axis.

- -

The “referenceFrame” attribute identifies the reference frame (as defined by the “SC_CRS” object) relative to which the coordinate value is given. The “axisID” attribute takes a string that uniquely identifies one of the reference frame’s axes along which the coordinate value is given.

- -

Requirement 18

Identifier/req/uml-simple-components/axis-valid
Statement

The value of the “axisID” attribute shall correspond to the “axisAbbrev” attribute of one of the coordinate system axes listed in the specified reference frame definition.

- -

The union of these two attributes thus uniquely identifies one axis of one given reference frame along which the value of the component is expressed. Note that even though the ISO 19111 model assigns units to CRS axes in addition to a direction, only the direction is used in this standard and the unit is defined by the data component itself. This allows expressing other quantities than the one predefined along the CRS’s axes such as velocity, acceleration or rotation.

- -

A component representing a projected quantity can be defined in isolation or can be contained within a “Vector” or ”Matrix” aggregate when it contributes to the specification of a multi-dimensional quantity (see Clauses 8.3.2 and 8.5.2). In this last case the reference frame definition is usually inherited from the parent “Vector” or ”Matrix” instance and is thus omitted from the scalar component itself. However, the “axisID” attribute still needs to be specified on “Vector” components.

- -

Requirement 19

Identifier/req/uml-simple-components/axis-defined
Statement

The “axisID” attribute shall be specified by all instances of concrete classes derived from “AbstractSimpleComponent” and representing a property projected along a spatial axis.

- -

Requirement 20

Identifier/req/uml-simple-components/ref-frame-defined
Statement

The “referenceFrame” attribute shall be specified by all instances of concrete classes derived from “AbstractSimpleComponent” and representing a property projected along a spatial or temporal axis, except if it is inherited from a parent aggregate (Vector or Matrix).

- -

Quality

- -

The optional “quality” attribute is used to provide simple quality information as discussed in Clause 7.4.1. It is of type “Quality” which is a union of several classes as defined in Clause 8.2.15. Its multiplicity is more than one which means that several quality measures can be given on for a single data component.

- -

Example

- -

Both precision and accuracy of the value associated to a data component can be specified concurrently (see http://en.wikipedia.org/wiki/Accuracy_and_precision for a good explanation of the difference between the two).

-
- -

Nil Values

- -

The optional “nilValues” attribute is used to provide a list (i.e. one or more) of NIL values as defined in Clause 7.4.2. The model of the “NilValues” class is detailed in Clause 8.2.16.

- -

Concrete sub-classes of “AbstractSimpleComponent” can also define a “constraint” attribute that allows further restriction of the possible values allowed by the corresponding representation. This implements concepts defined in Clause 7.2.6. These constraints always apply to the value of the property as represented by the corresponding data component whether this value is given inline (data container case) or out-of-band (data descriptor case).

- -

Constraints

- -

Requirement 21

Identifier/req/uml-simple-components/value-constraint-valid
Statement

The property value (formally the representation of the property value) attached to an instance of a class derived from “AbstractSimpleComponent” shall satisfy the constraints specified by this instance.

- -

All concrete sub-classes of “AbstractSimpleComponent” also define a “value” attribute. This attribute is not defined in this abstract class because it has a different primitive type in each concrete data component class (See following clauses).

- -

Requirement 22

Identifier/req/uml-simple-components/value-attribute-present
Statement

All concrete classes derived from the “AbstractSimpleComponent” class (directly or indirectly) shall define an optional “value” attribute and use it as defined by this standard.

- -

The “value” attribute is always optional on any simple data component in order to allow for both data descriptor and data container cases:

- -
  • When the data component is used as a data container, this attribute always carries the value of the associated property (formally the representation of the estimated or asserted value of the property). Quality information, nil values definitions and constraints thus apply to the value taken by this attribute.

    -
  • -
  • When the data component is used as a data descriptor, its actual value is provided somewhere else, often encoded as part of a larger data block. In this case, quality information, nil values definitions and constraints apply to the out-of-band value and not to the “value” attribute. Instead, the “value” attribute can then be used to specify a default value.

    -
  • -
- -

Whether the data component is used as a descriptor or a container depends on the context and should be explicitly stated by any standard that makes use of the SWE Common Data Model.

- -

All UML classes in this package that derive from “AbstractSimpleComponent” define a “value” attribute with the adequate primitive type and whose meaning is the one explained above.

-
- -

8.2.4.  Boolean Class

- -

The “Boolean” class is used to specify a scalar data component with a Boolean representation as defined in Clause 7.2.1. It derives from “AbstractSimpleComponent” and is shown below:

- -
- -

Figure 9 — Boolean Class

- -

The “value” attribute of this class is of the boolean primitive type.

NOTE:    The boolean primitive type is defined in ISO19103 and is not to be confused with the “Boolean” class defined in this standard. This clause is the only place in this standard where the ISO 19103 boolean data type is referenced. All other occurrences of the “Boolean” class in this standard refer to the class defined in this clause.

- - -
- -

8.2.5.  Text Class

- -

The “Text” class is used to specify a component with a textual representation as defined in Clause 7.2.5. It derives from “AbstractSimpleComponent” and is shown below:

- -
- -

Figure 10 — Text Class

- -

Constraints

- -

The “constraint” attribute allows further restricting the range of possible values by using the “AllowedTokens” class defined in Clause 8.2.17. This class allows the definition of the constraint by either enumerating the allowed tokens and/or by specifying a pattern that the value must match.

- -

Value

- -

The “value” attribute (or the corresponding value in out-of-band data) is a string that must match the constraint.

NOTE:    The “Text” component can be used to wrap a string representing complex content such as an expression in a programming language, xml or html content. This practice should however be used only for systems that don’t require high level of interoperability since the client must know how to interpret the content. Also care must be taken to properly escape such content before it is inserted in an XML document or in a SWE Common data stream.

- - -
- -

8.2.6.  Category Class

- -

The “Category” class is used to specify a scalar data component with a categorical representation as defined in Clause 7.2.2. It derives from “AbstractSimpleComponent” and is shown below:

- -
- -

Figure 11 — Category Class

- -

Code Space

- -

The “codeSpace” attribute is of type “Dictionary” and allows listing and defining the meaning of all possible values for this component. It is expected that instances of the “Dictionary” class will usually be referenced (rather than included inline) by implementations of this class since the code space definition is usually obtained from a controlled vocabulary maintained at a remote location. This type of implementation is the one chosen in the XML encodings defined by this standard.

- -

Constraints

- -

The “constraint” attribute allows further restricting the list of possible values by using the “AllowedTokens” class defined in Clause 8.2.17. This is usually done by specifying a limited list of possible values, which have to be extracted from the code space.

- -

Requirement 23

Identifier/req/uml-simple-components/category-constraint-valid
Statement

When an instance of the “Category” class specifies a code space, the list of allowed tokens provided by the “constraint” property of this instance shall be a subset of the values listed in this code space.

- -

It is also possible to use this class without a code space, even though it is not recommended as values allowed in the component would then not be formally defined. However, as the intent of this class is to always represent a value extracted from a set of possible options, a constraint shall be defined if no code space is specified.

- -

Requirement 24

Identifier/req/uml-simple-components/category-enum-defined
Statement

An instance of the “Category” class shall either specify a code space or an enumerated list of allowed tokens, or both.

- -

Value

- -

The “value” attribute (or the corresponding value in out-of-band data) is a string that must be one of the items of the code space and also match the constraint.

- -

Requirement 25

Identifier/req/uml-simple-components/category-value-valid
Statement

When an instance of the “Category” class specifies a code space, the value of the property represented by this instance shall be equal to one of the entries of the code space.

-
- -

8.2.7.  Count Class

- -

The “Count” class is used to specify a scalar data component with a discrete countable representation as defined in Clause 7.2.4. It derives from “AbstractSimpleComponent” and is shown below:

- -
- -

Figure 12 — Count Class

- -

Constraints

- -

The “constraint” attribute can be used to restrict the range of possible values to a list of inclusive intervals and/or single values using the “AllowedValues” class defined in Clause 8.2.18. Numbers used to define these constraints should be integers and expressed in the same scale as the count value itself. The “significantFigures” constraint allowed by the “AllowedValues” class is not applicable to the “Count” class.

- -

Value

- -

The “value” attribute (or the corresponding value in out-of-band data) is an integer that must be within one of the constraint intervals or exactly one of the enumerated values.

-
- -

8.2.8.  Quantity Class

- -

The “Quantity” class is used to specify a component with a continuous numerical representation as defined in Clause 7.2.3. It derives from “AbstractSimpleComponent” and is shown below:

- -
- -

Figure 13 — Quantity Class

- -

Unit of Measure (UoM)

- -

In addition to attributes inherited from the “AbstractSimpleComponent” class, this class provides a unit of measure declaration through the “uom” attribute. This unit is essential for the correct interpretation of data represented as decimal numbers and is thus mandatory. Quantities with no physical unit still have a scale (such as unity, percent, per thousands, etc.) that must be specified with this property.

- -

Constraints

- -

The “constraint” attribute is used to restrict the range of possible values to a list of inclusive intervals and/or single values using the “AllowedValues” class defined in Clause 8.2.18. Numbers used to define these constraints must be expressed in the same unit as the quantity value itself. Additionally, it is possible to constrain the number of significant digits that can be added after the decimal point.

- -

Value

- -

The “value” attribute (or the corresponding value in out-of-band data) is a real value that is within one of the constraint intervals or exactly one of the enumerated values, and most importantly is expressed in the unit specified.

-
- -

8.2.9.  Time Class

- -

The “Time” class is used to specify a component with a date-time representation and whose value is projected along the axis of a temporal reference frame. This class is also necessary to specify that a time value is expressed in a calendar system. This class derives from “AbstractSimpleComponent” and is shown below:

- -
- -

Figure 14 — Time Class

- -

Time is treated as a special type of continuous numerical quantity that can be either expressed as a scalar number with a temporal unit or a calendar date with or without a time of day. Consequently, this class has all properties of the “Quantity” class, plus some others that are specific to the treatment of time.

- -

Reference Frame

- -

As time is always expressed relative to a particular reference frame, the “referenceFrame” attribute inherited from the parent class “AbstractSimpleComponent” shall always be set on instances on this class unless the default ‘UTC’ is meant.

- -

Requirement 26

Identifier/req/uml-simple-components/time-ref-frame-defined
Statement

The “referenceFrame” attribute inherited from “AbstractSimple Component” shall always be set on instance of the “Time” class unless the UTC temporal reference system is used.

- -

Note that specifying the frame of reference is required even when using ISO notation because there can be ambiguities between several universal time references such as UTC, TAI, GPS, UT1, etc… Differences between these different time reference systems are indeed in the order of a few seconds (and increasing), that is to say not negligible in various situations.

- -

Example

- -

J2000 is a well known epoch in astronomy and is equal to:

- -
  • January 1, 2000, 11:59:27.816 in the TAI time reference system

    -
  • -
  • January 1, 2000, 11:58:55.816 in the UTC time reference system

    -
  • -
  • January 1, 2000, 11:59:08.816 in the GPS time reference system

    -
  • -
- -

These offsets are not always constant and depend on the irregular insertion of leap seconds in UTC.

-
- -

The “axisID” attribute inherited from the parent class does not need to be set since a time reference system always has a single dimension. However it can be set to ‘T’ for consistency with spatial axes.

- -

Reference Time

- -

The “referenceTime” attribute is used to specify a different time origin than the one sometimes implied by the “referenceFrame”. This is used to express a time relative to an arbitrary epoch (i.e. different from the origin of a well known reference frame). The new time origin specified by “referenceTime” shall be expressed with respect to the reference frame specified and is of type “DateTime”. This forces the definition of this origin as a calendar date/time combination.

- -

Requirement 27

Identifier/req/uml-simple-components/time-ref-time-valid
Statement

The value of the “referenceTime” attribute shall be expressed with respect to the system of reference indicated by the “referenceFrame” attribute.

- -

Example

- -

This class can be used to define a value expressed as a UNIX time (i.e. number of seconds elapsed since January 1, 1970, 00:00:00 GMT) by:

- -
  • Specifying that the reference frame is the UTC reference system

    -
  • -
  • Setting the reference time to January 1, 1970, 00:00:00 GMT.

    -
  • -
  • Setting the unit of measure to seconds

    -
  • -
- -

See definitions of some commonly accepted time standards at http://en.wikipedia.org/wiki/Time_standard or http://stjarnhimlen.se/comp/time.html.

-
- -

Local Frame

- -

The optional “localFrame” attribute allows for the definition of a local temporal frame of reference through the value of the component (i.e. we are specifying a time origin), as opposed to the referenceFrame which specifies that the value of the component is in reference to this frame.

- -

Requirement 28

Identifier/req/uml-simple-components/time-local-frame-valid
Statement

The “localFrame” attribute of an instance of the “Time” class shall have a different value than the “referenceFrame” attribute.

- -

This feature allows chaining several relative time positions. This is similar to what is done with spatial position in a geopositioning algorithm (and which is also supported by this standard using the “Vector” class).

- -

Example 1

- -

In the case of a whiskbroom scanner instrument, the “sampling time” is often expressed relative to the “scan start time” which is itself given relative to the “mission start time”. It is important to properly identify the chain of time reference systems at play so that the adequate process can compute the absolute time of every measurement made (Note that it is often not practical to record the absolute time of each single measurement when high sampling rates are used).

- -

Example 2

- -

A model forecast may represent its result times relative to the “run time” of the model for efficient encoding. The values of the output will be in reference to this base epoch. In this example the “referenceFrame” attribute of the model time is set to UTC and the “localFrame” set as “ModelTime”. The model result would then define its “referenceFrame” as “ModelTime”, allowing the time values to be encoded relative to the specified time origin.

-
- -

Unit of Measure (UoM)

- -

The “uom” attribute is mandatory since time is a continuous property that shall always be expressed in a well defined scale. The only units allowed are obviously time units.

- -

Constraints

- -

Similarly to the “Quantity” class, the “constraint” attribute allows further restricting the range of possible time values by using the “AllowedTimes” class defined in Clause 8.2.19.

- -

Value

- -

The “value” attribute (or the corresponding value in out-of-band data) is of type “TimePosition” (see Clause 8.2.1) and must match the constraint.

-
- -

8.2.10.  Requirements applicable to all range classes

- -

This UML package defines four classes “CategoryRange”, “CountRange”, “QuantityRange” and “TimeRange” that are used for representing extents of property values. These classes have common requirements that are expressed in this clause.

- -

The “value” attribute of all these classes takes a pair of values (with a datatype corresponding to the representation) that represent the inclusive minimum and maximum bounds of the extent. These values must both satisfy the constraints specified by an instance of the class, and be expressed in the unit specified when applicable.

- -

Requirement 29

Identifier/req/uml-simple-components/range-value-valid
Statement

Both values specified in the “value” property of an instance of a class representing a property range (i.e. “CategoryRange”, “CountRange”, “QuantityRange” and “TimeRange”) shall satisfy the same requirements as the scalar value used in the corresponding scalar classes.

- -

NOTE:    These classes are intentionally not derived from their scalar counterparts because they are aggregates of two values and should be treated as such by implementations (especially by encoding methods defined in this standard).

-
- -

8.2.11.  CategoryRange Class

- -

The “CategoryRange” class is used to express a value extent using the categorical representation of a property. It defines the same attributes as the “Category” class and those should be used in the same way (see Clause 8.2.6):

- -
- -

Figure 15 — CategoryRange Class

- -

Requirement 30

Identifier/req/uml-simple-components/category-range-valid
Statement

All requirements associated to the “Category” class defined in Clause 8.2.6 apply to the “CategoryRange” class.

- -

Code Space

- -

The “CategoryRange” class also requires that the underlying code space is well-ordered (i.e. the ordering of the different categories in the code space is clearly defined) so that the range is meaningful.

- -

Requirement 31

Identifier/req/uml-simple-components/category-range-codespace-order
Statement

The code space specified by the “codeSpace” attribute of an instance of the “CategoryRange” class shall define a well-ordered set of categories.

- -

Example

- -

A “CategoryRange” can be used to specify the approximate time of a geological event by using names of geological eons, eras or periods such as [Archean — Proterozoic] or [Jurassic — Cretaceous].

-
- -

Value

- -

The “value” attribute of the “CategoryRange” class takes a pair of tokens representing the inclusive minimum and maximum bounds of the extent.

-
- -

8.2.12.  CountRange Class

- -

The “CountRange” class is used to express a value extent using the discrete countable representation of a property. It defines the same attributes as the “Count” class and those should be used in the same way (see Clause 8.2.7):

- -
- -

Figure 16 — CountRange Class

- -

Value

- -

The “value” attribute of the “CountRange” class takes a pair of integer numbers representing the inclusive minimum and maximum bounds of the extent.

-
- -

8.2.13.  QuantityRange Class

- -

The “QuantityRange” class is used to express a value extent using the discrete countable representation of a property. It defines the same attributes as the “Quantity” class and those should be used in the same way (see Clause 8.2.8):

- -
- -

Figure 17 — QuantityRange Class

- -

Value

- -

The “value” attribute of the “QuantityRange” class takes a pair of real numbers representing the inclusive minimum and maximum bounds of the extent.

-
- -

8.2.14.  TimeRange Class

- -

The “TimeRange” class is used to express a value extent of a time property. It defines the same attributes as the “Time” class and those should be used in the same way (see Clause 8.2.9):

- -
- -

Figure 18 — TimeRange Class

- -

Requirement 32

Identifier/req/uml-simple-components/time-range-valid
Statement

All requirements associated to the “Time” class defined in Clause 8.2.9 apply to the “TimeRange” class.

- -

The “value” attribute of the “TimeRange” class takes a pair of values of type “TimePosition” representing the inclusive minimum and maximum bounds of the extent.

-
- -

8.2.15.  Quality Union

- -

The “Quality” class is a union allowing the use of different representations of quality.

- -

Quality can be indeed be specified as a decimal value, an interval, a categorical value or a textual statement. In our model, quality objects are in fact data components used in a recursive way, as shown on the following diagram:

- -
- -

Figure 19 — Quality Union

- -

These different representations of quality are useful to cover most use cases where simple quality information is provided with the data.

- -

Examples

- -

“Quantity” is used to specify quality as a decimal number such as accuracy, variance and mean, or probability.

- -

“QuantityRange” is used to specify a bounded interval of variation such as a bi-directional tolerance.

- -

“Category” is used for a quality statement based on a well defined taxonomy such as certification levels.

- -

“Text” is used to include a textual quality statement such as a comment written by a field operator.

-
- -

The “definition” attribute of the chosen quality component helps to further define the type of quality information given just like any other data component, and the “uom” should be specified in the case of a decimal quality value or interval.

NOTE:    Reusing data components to specify quality also allows the inclusion of quality values in the data stream itself. This is useful if the quality is varying and re-estimated for each measurement. This is for example the case in a GPS receiver where both horizontal and vertical errors are given along with the geographic position. See the XML implementation clause for more information on this use case.

- - -
- -

8.2.16.  NilValues Class

- -

The “NilValues” class is used by all classes deriving from “AbstractSimpleComponent”. It allows the specification of one or more reserved values that may be included in a data stream when the normal measurement value is not available (see Clause 7.4.2). The UML model of this class is given below:

- -
- -

Figure 20 — NilValues Class

- -

An instance of the “NilValues” class is composed of one to many “NilValue” objects, each of which specifies a mapping between a reserved value and a reason.

- -

The mandatory “reason” attribute indicates the reason why a measurement value is not available. It is a resolvable reference to a controlled term that provides the formal textual definition of this reason (usually agreed upon by one or more communities).

- -

Requirement 33

Identifier/req/uml-simple-components/nil-reason-resolvable
Statement

The “reason” attribute of an instance of the “NilValue” class shall map to the complete human readable definition of the reason associated with the NIL value.

- -

The mandatory “value” attribute specifies the data value that would be found in the stream to indicate that a measurement value is missing for the corresponding reason. The range of values allowed here is the range of values allowed by the datatype of the parent data component.

- -

Requirement 34

Identifier/req/uml-simple-components/nil-value-type-coherent
Statement

The value used in the “value” property of an instance of the “NilValue” class shall be compatible with the datatype of the parent data component object.

- -

This means that when specifying NIL values for a “Quantity” component, only real values are allowed (in most implementations, this includes NaN, -INF and INF) and for a “Count” component only integer values are allowed.

- -

Consequently, it is also impossible to specify NIL values for a “Boolean” data component since it allows only two possible values. In this case a “Category” component should be used.

- -

There are no restrictions on the choice of NIL values for “Category” and “Text” components since their datatype is String.

-
- -

8.2.17.  AllowedTokens Class

- -

The “AllowedTokens” class is used to express constraints on the value of a data component represented by a “Text” or a “Category” class. The UML class is shown below:

- -
- -

Figure 21 — AllowedTokens Class

- -

This class allows defining the constraint either by enumerating a list of allowed values by using one or more “value” attributes and/or by specifying a pattern that the value must match. The value must then either be one of the enumerated tokens or match the pattern.

-
- -

8.2.18.  AllowedValues Class

- -

The “AllowedValues” class is used to express constraints on the value of a data component represented by a “Count” or a “Quantity” class. The UML class is shown below:

- -
- -

Figure 22 — AllowedValues Class

- -

This class allows constraints to be defined either by enumerating a list of allowed values and/or a list of inclusive intervals. To be valid, the value must either be one of the enumerated values or included in one of the intervals. The numbers used in the “value” and “interval” properties shall be expressed in the same unit as the parent data component.

- -

Requirement 35

Identifier/req/uml-simple-components/allowed-values-unit-coherent
Statement

The scale of the numbers used in the “enumeration” and “interval” properties of an instance of the “AllowedValues” class shall be expressed in the same scale as the value(s) that the constraint applies to.

- -

If the parent data component instance is used to define a projected quantity (i.e. when the “axisID” is set), then the constraints given by this class are expressed along the same spatial reference frame axis.

- -

The number of significant digits can also be specified with the “significantFigures” property though it is only applicable when used with a decimal representation (i.e. within the “Quantity” class). This limits the total number of digits that can be included in the number represented whether a scientific notation is used or not.

- -

Examples

- -

All non-zero digits are considered significant. 123.45 has five significant figures: 1, 2, 3, 4 and 5.

- -

Zeros between two non-zero digits are significant. 101.12 has five significant figures: 1, 0, 1, 1 and 2.

- -

Leading zeros are not significant. 0.00052 has two significant figures: 5 and 2 and is equivalent to 5.2×10-4 and would be valid even if the number of significant figures is restricted to 2.

- -

Trailing zeros are significant. 12.2300 has six significant figures: 1, 2, 2, 3, 0 and 0 and would thus be invalid if the number of significant figures is restricted to 4.

-
- -

NOTE:    The number of significant figures and/or an interval constraint (i.e. min/max values) can help a software implementation choosing the best data type to use (i.e. ‘float’ or ‘double’, ‘short’, ‘int’ or ‘long’) to store values associated to a given data component.

-
- -

8.2.19.  AllowedTimes Class

- -

The “AllowedTimes” class is used to express constraints on the value of a data component represented by a “Time” class. The UML class is shown below:

- -
- -

Figure 23 — AllowedTimes Class

- -

This class is almost identical to the “AllowedValues” class and in fact all properties are used in the same way. The only difference with this class is that the “value” and “interval” properties allow the use of time data types as defined in Clause 8.2.1.

- -

The constraints given by this class are expressed along the same time reference frame axis as the value attached to the parent data component.

-
- -

8.2.20.  Unions of simple component classes

- -

Several useful groups of classes are also defined in this package. These unions can be used as attribute types and they are shown on the following diagram:

- -
- -

Figure 24 — Simple Component Unions

- -

The “AnyScalar” union groups all classes representing scalar components, numerical or not. The “AnyNumerical” union includes all classes corresponding to numerical scalar representations. The “AnyRange” union regroups all range components.

-
-

8.3.  Requirements Class: Record Components Package

- -

Requirements class 3: Record Components UML Package

Identifier/req/uml-record-components
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.3: /conf/uml-record-components
PrerequisiteRequirements class 2: /req/uml-simple-components
- -

As detailed in the following clauses, this package defines classes modeling record style component types that can be nested to build complex structures from the simple component types introduced in Clause 8.2.

- -

The classes defined in this package are “DataRecord” and “Vector” (other aggregates are defined in the “Choice Components” and “Block Components” packages defined in Clauses 8.4 and 8.5 respectively). The UML model is exposed below:

- -
- -

Figure 25 — Record Data Components

- -

Requirement 36

Identifier/req/uml-record-components/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Record Components” UML package.

- -

As with simple component types, all data aggregates inherit attributes from the “AbstractDataComponent” class. In this case, however, these attributes provide information about the group as a whole rather than its individual components.

- -

Examples

- -

A particular “DataRecord” might represent a standard collection of error codes coming from a GPS device.

- -

A particular “Vector” might represent the linear or angular velocity vector of an aircraft.

- -

In these two cases, the “definition” attribute should reference a semantic description in a registry, so that the data consumer knows what kind of data the aggregate represents. This semantic description can then be interpreted appropriately by consuming clients: for example to automatically decide how to style the data in visualization software.

-
- -

8.3.1.  DataRecord Class

- -

The “DataRecord” class is modeled on the definition of ‘Record’ from ISO 11404. In this definition, a record is a composite data type composed of one to many fields, each of which having its own name and type definition. Thus it defines some logical collection of components of any type that are grouped for a given purpose.

- -

As shown on the following figure, the “DataRecord” class in SWE Common is based on a full composite design pattern, such that each one of its “field” can be of a different type, including simple component types as well as any aggregate component type.

- -
- -

Figure 26 — DataRecord Class

- -

The “DataRecord” class derives from the “AbstractDataComponent” class, which is necessary to enable the full composite pattern in which a “DataRecord” can be used to group scalar components, but also other records, arrays and choices recursively.

- -

Fields

- -

Each “field” attribute can take an instance of any concrete sub-class of “AbstractDataComponent”, which is the superset of all data component types defined in this standard. The name of each field must be unique within a given “DataRecord” instance so that it can be used as a key to uniquely identify and/or index each one of the record components.

- -

Requirement 37

Identifier/req/uml-record-components/record-field-name-unique
Statement

Each “field” attribute in a given instance of the “DataRecord” class shall be identified by a name that is unique to this instance.

- -

Example

- -

A “DataRecord” can group related values such as “temperature”, “pressure” and “wind speed” into a structure called “weather measurements”. This feature is often used to organize the data and present it in a clear way to the user.

- -

Similarly a “DataRecord” can be used to group values of several spectral bands in multi-spectral sensor data. However, using a “DataArray” may be easier to describe hyper spectral datasets with several hundreds of bands.

-
- -

NOTE:    The slightly different definition of record found in ISO 19103 provides for its schema to be specified in an associated “RecordType”. When used as a descriptor, the “DataRecord” implements the ISO 19103 “RecordType”. When used as a data container, it is self-describing: the descriptive information is then interleaved with the record values.

-
- -

8.3.2.  Vector Class

- -

The “Vector” class is used to express multi-dimensional quantities with respect to a well defined referenced frame (usually a spatial or spatio-temporal reference frame). This is done by projecting the quantity on one or several axes that define the reference frame and assigning a value to each of the axis projections.

- -

The “Vector” class is a special case of a record that takes a collection of coordinates that are restricted to a numerical representation. Coordinates of a “Vector” can thus only be of type “Quantity”, “Count” or “Time”. Its UML diagram is shown below:

- -
- -

Figure 27 — Vector Class

- -

Coordinates

- -

Just like record fields, vector coordinates must have a unique name:

- -

Requirement 38

Identifier/req/uml-record-components/vector-coord-name-unique
Statement

Each “coordinate” attribute in a given instance of the “Vector” class shall be identified by a name that is unique to this instance.

- -

Reference Frame

- -

This class contains a mandatory “referenceFrame” attribute that identifies the frame of reference with respect to which the vector quantity is expressed. The coordinates of the vector correspond to values projected on the axes of this frame.

- -

The “referenceFrame” attribute is inherited by all components of the “Vector”, so that it shall not be redefined for each coordinate. However the “axisID” attribute shall be specified for each coordinate, in order to unambiguously indicate what axis of the reference frame it corresponds to.

- -

Requirement 39

Identifier/req/uml-record-components/vector-component-no-ref-frame
Statement

The “referenceFrame” attribute shall be ommited from all data components used to define coordinates of a “Vector” instance.

- -

Requirement 40

Identifier/req/uml-record-components/vector-component-axis-defined
Statement

The “axisID” attribute shall be specified on all data components used as children of a “Vector” instance.

- -

Local Frame

- -

The optional “localFrame” attribute allows identifying the frame of interest, that is to say the frame we are positioning with the coordinate values associated to this component (by opposition to the “referenceFrame” that specifies the frame with respect to which the values of the coordinates are expressed).

- -

Requirement 41

Identifier/req/uml-record-components/vector-local-frame-valid
Statement

The “localFrame” attribute of an instance of the “Vector” class shall have a different value than the “referenceFrame” attribute.

- -

Correctly identifying the local and reference frame is an important feature that allows chaining several relative positions, something that is essential to correctly compute accurate position of sensor data (especially remote sensing data).

- -

Example 1

- -

A position vector (or location vector) is used to locate the origin of a frame of interest (the local frame) relative to the origin of a frame of reference (the reference frame) through a linear translation. It is composed of three coordinates of type “Quantity”, each with a definition indicating that the coordinate represents a length expressed in the desired unit. The definition of the “Vector” itself should also indicate that it is a “location vector”.

- -
- -

Example 2

- -

An orientation vector is used to indicate the rotation of the axes of a frame of interest (the local frame) relative to a frame of reference (the reference frame). It is composed of three coordinates of type “Quantity” with a definition indicating an angular property. The “Vector” definition should indicate the type of orientation vector such as “Euler Angles” or “Quaternion”. Depending on the exact definition, the order in which the coordinates are listed in the vector may matter.

-
- -

NOTE:    “Vector” aggregates are most commonly used to describe position, orientation, velocity, and acceleration within temporal and spatial domains, but can also be used to express relationships between any two coordinate frames.

-
-

8.4.  Requirements Class: Choice Components Package

- -

Requirements class 4: Choice Components UML Package

Identifier/req/uml-choice-components
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.4: /conf/uml-choice-components
PrerequisiteRequirements class 2: /req/uml-simple-components
- -

As detailed in the following clauses, this package defines a class modeling a disjoint union component type. This aggregate type can be nested with other aggregate components to build complex structures.

- -

Requirement 42

Identifier/req/uml-choice-components/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Choice Components” UML package.

- -

8.4.1.  DataChoice Class

- -

The “DataChoice” class (also called Disjoint Union) is modeled on the definition of ‘Choice’ from ISO 11404. It is a composite component that allows for a choice of child components. By opposition to records that carry all their fields simultaneously, only one item at a time can be present in the data when wrapped in a “DataChoice”. The following diagram shows the “DataChoice” class as implemented in the SWE Common Data Model:

- -
- -

Figure 28 — DataChoice Class

- -

This class implements a full composite pattern, so that each “item” can be any data component, including simple and aggregate types.

- -

The “choiceValue” attribute is used to represent the token value that would be present in the data stream and that indicates the actual choice selection before the corresponding data can be given (i.e. knowing what choice item was selected ahead of time is necessary for proper decoding of encoded data streams).

- -

Items

- -

Each “item” attribute can take an instance of any concrete sub-class of “AbstractDataComponent”, which is the superset of all data component types defined in this standard. The name of each item shall be unique within a given “DataChoice” instance so that it can be used as a key to uniquely identify and/or index each one of the choice components.

- -

Requirement 43

Identifier/req/uml-choice-components/choice-item-name-unique
Statement

Each “item” attribute in a given instance of the “DataChoice” class shall be identified by a name that is unique to this instance.

- -

The “DataChoice” component is used to describe a data structure (or a part of the structure) that can alternatively contain different types of objects. It can also be used to define the input of a service or process that allows a choice of structures as its input.

- -

Examples

- -

NMEA 0183 compatible devices can output several types of sentences in the same data stream. Some sentences include GPS location, while some others contain heading or status data. This can be described by a “DataChoice” which items represent all the possible types of sentences output by the device.

- -

A Sensor Planning Service (SPS) can define a choice in the tasking messages that the service can accept, thus leaving more possibilities to the users.

-
-
-

8.5.  Requirements Class: Block Components Package

- -

Requirements class 5: Block Components UML Package

Identifier/req/uml-block-components
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.5: /conf/uml-block-components
PrerequisitesRequirements class 2: /req/uml-simple-components
Requirements class 7: /req/uml-simple-encodings
- -

This package defines additional aggregate components for describing arrays of values that are designed to be encoded as efficient data blocks. These additional aggregate components are purposely defined in a separate requirement class because they require a more advanced implementation for handling data values as encoded blocks.

- -

The UML models for these additional aggregate components are shown below:

- -
- -

Figure 29 — Array Components

- -

Requirement 44

Identifier/req/uml-block-components/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Block Components” UML package.

- -

The principle of these two classes is that the number and type of elements contained in the array is defined once, while the actual array values are listed separately without being redefined with each value. In order to achieve this, all array values are encoded as a single data block in the “values” attribute. Consequently, these classes are restricted to cases where all elements are homogeneous and thus can be described only once even though the array data may in fact contain many of them.

- -

This package also defines the “DataStream” class that is similar in principle to the “DataArray” class but cannot be nested within other aggregate data components. It is a top level class that encapsulates the description of a full data stream.

- -

8.5.1.  DataArray Class

- -

The “DataArray” class is modeled on the corresponding definition of ISO 11404. This definition states that an array is a collection of elements of the same type (as opposed to a record where each field can have a different type), with a defined size. This class is shown on the following UML diagram:

- -
- -

Figure 30 — DataArray Class

- -

This class implements a full composite pattern, so that the “elementType” can be any data component, including simple and aggregate types. It can be used to group identical scalar components as well as records, choices and arrays in a recursive manner.

- -

Element Count

- -

The “elementCount” attribute is used to indicate the size of the array, that is to say the number of elements of the given type in the array. Note that each element is not necessarily scalar but can be a record, another array, etc.

- -

Element Type

- -

The content of the “elementType” attribute defines the exact structure of each element in the array. The data component used and all of its children shall not include any inline values, as these will be block encoded in the “values” attribute of the parent “DataArray”.

- -

Requirement 45

Identifier/req/uml-block-components/array-component-no-value
Statement

Data components that are children of an instance of a block component shall be used solely as data descriptors. Their values shall be block encoded in the “values” attribute of the block component rather than included inline.

- -

However, the “DataArray” class itself, like any other data component can be used either as a data descriptor or as a data container. To use it as a data descriptor the “encoding” and “values” attributes are not set. To use it as a data container, these attributes are both set as described below.

- -

Encoding and Values

- -

The “encoding” and “values” fields are there to provide array data as an efficient block which can be encoded in several ways. The different encoding methods are described in Clauses 8.7 and 8.8. The “encoding” field shall have a value if the “values” field is present, and the data shall be encoded using the specified encoding.

- -

Requirement 46

Identifier/req/uml-block-components/array-values-properly-encoded
Statement

Whenever an instance of a block component contains values, an encoding method shall be specified by the “encoding” property and array values shall be encoded as specified by this method.

- -

The choice of simple encodings (defined in the “Simple Encodings” package) allows encoding data as text using a delimiter separated values (DSV, a variant of CSV) format or as XML tagged values. The “Advanced Encodings” package defines binary encodings that can be used to efficiently package large datasets.

- -

Nested Components

- -

By combining instances of “DataArray”, “DataRecord” and scalar components, one can obtain the complex data structures that are necessary to fully describe any kind of sensor data. In particular, the possibility of nesting a “DataRecord” or “Vector” inside a “DataArray” allows defining structures such as trajectories, profiles, multi-band images, etc.

- -

Example 1

- -

The “DataArray” class can be used to describe a simple 1D array of measurements such as radiance values obtained using a 12000 cells (1 row) CCD strip for instance. This can be done by using the “Quantity” class as the element type. In such a case, describing the dataset as a “DataRecord” would be a very repetitive task given the number of elements (12000 in this case!).

- -
- -

Example 2

- -

The “DataArray” class can be used as a descriptor for a trajectory dataset by using a vector of [latitude, longitude] coordinates as its element type. Note that this can also be considered as a 1D coverage in a 2D CRS.

- -
-
- -

Multi-dimensional Arrays

- -

Since the “DataArray” class alone can only represent 1-dimensional arrays, the construction of multi-dimensional arrays is done by nesting “DataArray” objects inside each other.

- -

Example

- -

The structure of panchromatic imagery data can be described with two nested arrays, which sizes indicate the two dimensions of the image. A “Quantity” is used as the element type of the nested array in order to indicate that the repeated element of the 2D array is of type infrared radiance with a given unit.

- -
- -

In this example, the image is described as an array of rows, each row being an array of samples. It is also possible to describe an image as an array of columns by reversing the two dimensions. Note that this would change the order in which the data values would appear in a stream (by rows vs. by columns).

-
- -

Array Size

- -

One powerful feature of the “DataArray” model is that it allows for the element count to be either fixed or variable, thus allowing the description of data streams with variable number of repetitive elements as is often the case with many kinds of sensor.

- -

In a fixed size array, the number of elements can be provided in the descriptor as an instance of the “Count” class with an inline value. This value is only present in the data description and not in the encoded block of array values. The definition of the “Count” instance is not required.

- -

In a variable size array, the “elementCount” attribute either contains an instance of the “Count” class with no value or references an instance of a “Count” class in a parent or sibling data component. The value giving the actual array size is then included in the stream, before the array values themselves, so that the block can be properly decoded. One obvious implementation constraint is that the value representing the array size must be received before the array values. This is detailed further in the XML implementation section.

- -

Examples

- -

Argo profiling floats can measure ocean salinity and temperature profiles of variable lengths by diving at different depths and depending on the conditions. A variable size “DataArray” could be used to describe their output data as well as a dataset aggregating data from several Argo floats.

- -

Variable size arrays can often be used to avoid unnecessary padding of fixed size array data. However for efficiency reasons (usually to enable fast random access w/o preliminary indexation), padding can also be specified in SWE Common when using the binary encoding.

-
- -

Array Semantics

- -

As with any other data component, the “name” and “description” can be used to better describe the array and more importantly the “definition” attribute can be used to formally indicate the semantics behind the array.

- -

Example

- -

When a “DataArray” is used to package data relative to the spectral response of a sensor, the array “definition” attribute can be used to point to the formal out-of-band definition of the “spectral response” concept.

- -

Similarly a “DataArray” used to describe the output data of an Argo float would have its “definition” attribute reference the formal definition of a “profile”.

-
- -

The value of the “definition” attribute of the “Count” instance used as the “elementCount” is also especially important, since it is used to define the meaning of the array dimension. Thanks to this, it is possible to tag the dimension of an array as spatial, temporal, spectral, or any other kind. However it is not mandatory as it is on other simple components.

- -

Examples

- -

In the CCD strip example described as a 1D array, the array index is the cell number in the strip.

- -

In the 2D image example, the outer array index is the row number, while the inner array index is the column (or sample) number.

- -

In a 1D array representing a time series, the array index is along the temporal dimension.

- -

In a 2D array representing a spatial coverage, the two array indices are along spatial dimensions.

- -

In a 3D array representing hyper-spectral imagery, the two first arrays have indices along spatial dimension while the most inner array is indexed along the spectral dimension.

-
- -

This extra information can be used by software to make decisions (or at least ask the user by providing him this information) about how to represent or even interpolate the data.

-
- -

8.5.2.  Matrix Class

- -

The “Matrix” extends the “DataArray” class by providing a reference frame within which the matrix elements are expressed and a local frame of interest. The UML diagram of this class is shown below:

- -
- -

Figure 31 — Matrix Class

- -

The “Matrix” class is usually used to represent a position matrix or a tensor quantity of second or higher order. Each matrix element is expressed along the axis of a well defined reference frame.

- -

Element Type

- -

The “elementType” attribute inherited from the “DataArray” class can only take a nested “Matrix” instance or a scalar numerical component. Nested matrix objects allow the full description of N-dimensional matrices.

- -

Requirement 47

Identifier/req/uml-block-components/matrix-element-type-valid
Statement

The “elementType” attribute of an instance of the “Matrix” class can only be an instance of “Matrix” or of the classes listed in the “AnyNumerical” union.

- -

Reference Frame

- -

The “referenceFrame” attribute is used in the same way as with the “Vector” class to specify the frame of reference with respect to which the matrix element values are expressed. It is inherited by all child components.

- -

Local Frame

- -

The “localFrame” attribute is used to identify the frame of interest, that is to say the frame whose orientation or position is given with the matrix in the case where it is a position matrix. If the matrix does not specify position, “localFrame” should not be used. Whether an instance of the “Matrix” class represents a position matrix or not should be disambiguated by setting the value of its “definition” attribute.

- -

Examples

- -

The “Matrix” class can be used to represent for instance: -- A 3D 3×3 stress tensor -- A 4D 4×4 homogeneous affine transformation matrix

- -

In particular it is often used to specify the orientation of an object relative to another one, like for instance the attitude of a plane relative to the earth.

-
-
- -

8.5.3.  DataStream Class

- -

The “DataStream” class has a structure similar than the “DataArray” class but is not a data component (i.e. it does not derive from “AbstractDataComponent”) and thus cannot be used as a child of other aggregate components. Below is its UML diagram:

- -
- -

Figure 32 — DataStream Class

- -

This class should be used as the wrapper object to define a complete data stream. It defines a data stream as containing a list of elements with an arbitrary complex structure. An important feature is that the data stream can be open ended (i.e. the number of elements is not known in advance) and is thus designed to support real time streaming of data.

- -

Element Count

- -

The “elementCount” attribute is optional and can be used to indicate the number of elements in the stream if it is known. This is done by instantiating an instance of the “Count” class whose “value” attribute would be set to the number of elements.

- -

Element Type

- -

The “elementType” attribute is used to define the structure of each element in the stream. The data component used as the element type and all of its children shall be used solely as data descriptors, meaning that they shall not include any inline values. These values will instead be block encoded in the “values” attribute of the parent “DataStream”.

- -

Encoding and Values

- -

The “encoding” and “values” fields are there to provide the stream values as an efficient block which can be encoded in several ways. The same encoding methods as for the “DataArray” class are available and are described in Clauses 8.7 and 8.8. The “values” attribute is optional as the DataStream class can be used as a simple descriptor.

- -

Requirement 48

Identifier/req/uml-block-components/datastream-array-valid
Statement

Data components that are children of an instance of the ”DataStream” class shall be used solely used as data descriptors. Their values shall never be included inline since they will be block encoded in the stream described by the ”DataStream”.

-
-

8.6.  Requirements Class: Geometry Components Package

- -

Requirements class 6: Geometry Components UML Package

Identifier/req/uml-geom-components
Target typeSoftware Implementation or Encoding of the Conceptual Models
PrerequisiteRequirements class 2: /req/uml-simple-components
- -

This package defines an additional component for representing simple feature geometries, as defined by OGC 06-103r4, within an encoded SWE Common data block or stream.

- -

Requirement 49

Identifier/req/uml-geom-components/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Geometry Components” UML package.

- -

8.6.1.  Geometry Class

- -

The “Geometry” class extends the “AbstractDataComponent” class with a value of type geometry and a constraint that can be used to limit the types of allowed geometries. This class is shown on the following UML diagram:

- -
- -

Figure 33 — Geometry Class

- -

Coordinate Reference System

- -

The “crs” attribute provides the URI of the coordinate reference system w.r.t which the geometry coordinates are expressed. The unit of the coordinates is also provided by the coordinate reference system.

- -

Requirement 50

Identifier/req/uml-geom-components/srs-valid
Statement

The “srs” attribute shall reference the definition of a valid 2D or 3D spatial reference system.

- -

Constraints

- -

The “constraint” attribute is used to restrict the possible geometries that can be provided using this component when it is used as a descriptor. The constraint is provided using the “AllowedGeometries” class that includes a list of allowed geometry types.

- -

Value

- -

The value of this component must be a geometry instance, whether it’s provided inline using the “value” attribute, or as part of a datastream.

- -

Requirement 51

Identifier/req/uml-geom-components/geom-value-valid
Statement

The “value” attribute shall be one of the concrete geometry value classes defined in OGC 06-103r4: “Point”, “MultiPoint”, “LineString”, “MultiLineString”, “Polygon”, or “MultiPolygon”.

- -

NOTE:    Encoding sections in this standard define how the geometry value is encoded:

-
-

8.7.  Requirements Class: Simple Encodings Package

- -

Requirements class 7: Simple Encodings UML Package

Identifier/req/uml-simple-encodings
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.6: /conf/uml-simple-encodings
PrerequisiteRequirements class 1: /req/core
- -

Encoding methods describe how structured array and stream data is encoded into a low level byte stream (see related concepts in Clause 7.6). Once encoded as a sequence of bytes, the data can then be transmitted using various digital means such as files on a disk or network connections.

- -

This package includes two classes that provide definitions of simple encoding methods. They are used as descriptors of the method used to encode data component values wrapped by aggregate classes defined in the “Block Components” package. There model is shown on the diagram below:

- -
- -

Figure 34 — Simple Encodings

- -

Requirement 52

Identifier/req/uml-simple-encodings/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Simple Encodings” UML package.

- -

All classes defining encoding methods derive from a common abstract class called “AbstractEncoding”. Extensions to this standard that define new encoding methods shall derive encoding classes from this abstract class.

- -

The intent of this standard is to provide a set of core encodings covering most common needs. Each encoding has specific benefits that match the needs of different applications. Sometimes several encodings of the same dataset can be offered in order to satisfy several types of consumers and/or use cases.

- -

In the model provided in this standard, the encoding specification is provided separately from the data component tree describing the dataset structure, thus enabling several encodings to be applied to the same data structure without changing it.

- -

8.7.1.  TextEncoding Class

- -

The “TextEncoding” class defines a method allowing encoding arbitrarily complex data using a text based delimiter separated values (DSV) format. The class used to specify this encoding method is shown below:

- -
- -

Figure 35 — TextEncoding Class

- -

The “tokenSeparator” attribute specifies the characters to use for separating each scalar value from one another. Scalar values appear sequentially in the stream alternatively with the token separator characters, in an order unambiguously defined by the data component structure. The detailed rules are given in the implementation Clause 10.3.

- -

The “blockSeparator” attribute specifies characters used to mark the end of a “block”, corresponding to the complete structure defined by the data component tree (in a “DataArray”, “Matrix” or “DataStream” one block corresponds to one element, that is to say the structure defined by the “elementType” property). Stream or array data can then be composed of several blocks of the same type separated by block separator characters.

- -

The “decimalSeparator” attribute specifies the character used as the decimal point in decimal number. This attribute is optional and the default is a period (‘.’).

- -

Example

- -

In the case of a “DataStream” with an element type that is a “DataRecord” containing three fields – one of type “Category” and two of type “Quantity” — a data stream encoded using the Text method would look like the following:

- -

STATUS_OK,24.5,1022.5¶
-STATUS_OK,24.5,1022.5¶
-STATUS_OK,24.5,1022.5¶

- -

Where , (comma) is the token separator and (carriage return) is the block separator (i.e. this is the CSV format). -Note that there could be many more values in a single block if the data set has a large number of fields, or if it contains an array of values.

-
- -

The “collapseWhiteSpaces” attribute is a boolean flag used to specify if extra white spaces (including line feeds, tabs, spaces and carriage returns) surrounding the token and block separators should be ignored (skipped) when processing the stream. This is useful for encoded blocks of data that are embedded in an XML document, since formatting (indenting with spaces or tabs especially) is often done in XML content.

- -

This type of encoding is used when compactness is important but balanced by a desire of human readability. This type of encoding is easily readable (for debugging or manual usage) as well as easily imported in various spreadsheet, charting or scientific software.

- -

The main drawback of such an encoding is the impossibility of locating an error in the stream with certitude. Secondly, if only one expected value is missing, the whole block is usually lost since the parser cannot resynchronize correctly before the next block separator. This last issue can however be solved by transmitting this type of encoded stream using error resilient protocols when needed.

-
-

8.8.  Requirements Class: Advanced Encodings Package

- -

Requirements class 8: Advanced Encodings UML Package

Identifier/req/uml-advanced-encodings
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.7: /conf/uml-advanced-encodings
PrerequisiteRequirements class 7: /req/uml-simple-encodings
- -

This package defines an additional encoding method for packaging sensor data as raw or base 64 binary blocks. When this package is implemented, the binary encoding method is usable, as any other encoding method, within the “DataArray” and “DataStream” classes.

- -

Requirement 53

Identifier/req/uml-advanced-encodings/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Advanced Encodings” UML package.

- -

8.8.1.  BinaryEncoding Class

- -

The “BinaryEncoding” class defines a method that allows encoding complex structured data using primitive data types encoded directly at the byte level, in the same way that they are usually represented in memory.

- -

The binary encoding method can lead to very compact streams that can be optimized for efficient parsing and fast random access. However this comes with the lack of human readability of the data and sometimes lack of compatibility with other software (i.e. software that is not SWE Common enabled).

- -

More information is needed to fully define a binary encoding, so the model is more complex than the other encodings. It is shown below:

- -
- -

Figure 36 — BinaryEncoding Class

- -

The main class “BinaryEncoding” specifies overall characteristics of the encoded byte stream such as the byte order (big endian or little endian) and the byte encoding (raw or base64). The two corresponding attributes, respectively “byteOrder” and “byteEncoding” are mandatory. Base64 encoding is usually chosen to insert binary content within an XML document.

- -

The “byteLength” attribute is optional and can be used to specify the overall length of the encoded data as a total number of bytes. This should be indicated whenever possible if the data size is known in advance as it can be useful for efficient memory allocation.

- -

The “BinaryEncoding” class also has several “member” attributes that contain detailed information about parts of the data stream. This attribute can take a choice of instance of two classes: “Component” or “Block”.

- -

The “Component” class is used to specify binary encoding details of a given scalar component in the stream. The following information can be provided for each scalar field:

- -
  • The “ref” attribute allows identifying the data component in the dataset structure for which we’re specifying the encoding parameters. Soft-typed property names are used to uniquely identify a given component in the tree.

    -
  • -
  • The “dataType” attribute allows selecting a data type among commonly accepted ones such as ‘byte’, ‘short’, ‘int’, ‘long’, ‘double’, ‘float’, ‘string’, etc…

    -
  • -
  • The “byteLength” or “bitLength” attributes are mutually exclusive and used to further specify the length of the data type in the case where it is not a standard length (i.e. to encode integer numbers on more than 8 bytes or less than 8 bits for instance).

    -
  • -
  • The “significantBits” can be used to signal that only some of the bits of the data type are actually used to carry the value (i.e. a value may be encoded as a byte but only use 4 bits to encode a value between 0 and 15). This is mostly informational.

    -
  • -
  • The “encryption” attribute can be used to select the method with which the value is encrypted before being written to the stream.

    -
  • -
- -

The “Block” class is used to specify binary encoding details of a given aggregate component representing a block of values in the data stream. This is used either to specify padding before and/or after a block of data or to enable compression or encryption of all or part of a dataset.

- -
  • The “ref” attribute allows identifying the data component in the dataset structure for which we’re specifying the encoding parameters. Soft-typed property names are used to uniquely identify a given component in the tree.

    -
  • -
  • The optional “byteLength” attribute allows indicating the overall length of the encoded block to facilitate memory allocation.

    -
  • -
  • The “paddingBytes-before” and “paddingBytes-after” are used to specify the number of empty bytes (i.e. usually 0 bytes) that are inserted in the stream respectively before and after data for the referenced component. This is sometimes used to align data on N-bytes block for faster access.

    -
  • -
  • The “encryption” attribute identifies the encryption method that is used to encrypt the block of data before it is inserted in the stream.

    -
  • -
  • The “compression” attribute identifies the compression method that is used to compress the block of data before it is inserted in the stream.

    -
  • -
- -

This standard does not define any concrete encryption and compression methods, so that software implementations of this requirement class are not required to support any value in the “encryption” and “compression” attributes of the “Component” and “Block” classes. Extensions of this standard that define binary encryption and compression methods shall describe how the encrypted or compressed data is inserted in the SWE Common data stream.

-
-

9.  JSON Implementation (normative)

This standard defines a normative JSON implementation of the conceptual models presented in Clause 8. The standardization target type for all requirements classes in this clause is a JSON instance document that seeks compliance with this JSON encoding model.

JSON schemas defined in this section are a direct implementation of the UML conceptual models described in Clause 8. They have been generated from these models by strictly following well-defined encoding rules. All attributes and composition/aggregation associations contained in the UML models are encoded as JSON object members.

All JSON examples given in this section are informative and are used solely for illustrating features of the normative model. Many of these examples reference semantic information by using URLs that resolve to the following online ontologies:

Some of the JSON examples contain inline values while others don’t. This is meant to illustrate that the component objects defined by the JSON implementation can be used as value objects for properties of larger metadata objects (e.g. SensorML system descriptions), but can also be used as descriptors to describe, for instance, the content of a datastream or the rangeset of a coverage.

9.1.  Requirements Class: Basic Types and Simple Components JSON Schemas

- -

Requirements class 9: Basic Types and Simple Components JSON Schemas

Identifier/req/json-simple-components
Target typeJSON Document
PrerequisiteRequirements class 2: /req/uml-simple-components
- -

Validation patterns that implement all classes defined respectively in the “Basic Types” and “Simple Components” UML packages are provided as JSON schema files at https://raw.githubusercontent.com/opengeospatial/connected-systems/master/swecommon/schemas/json.

- -

The entry point schema used for validation is “sweCommon.json”.

- -

Requirement 54

Identifier/req/json-simple-components/schema-valid
Statement

The JSON document instance shall be valid with respect to the JSON schema “sweCommon.json”.

- -

9.1.1.  General JSON Principles

- -

The following rules were used when generating the JSON schemas:

- -
  • Classes are implemented as JSON Objects;

    -
  • -
  • Any property with a multiplicty greater than one is implemented as a JSON Array and its name is converted to plural form;

    -
  • -
  • Textual fields are implemented as a JSON String;

    -
  • -
  • Decimal fields are implemented as a union of JSON Number and JSON String value types (the string value allowing for special values, see Clause 9.1.2);

    -
  • -
  • ISO8601 date/time fields are implemented as a JSON String with a union of date/time formats.

    -
  • -
-
- -

9.1.2.  Special Numerical Values

- -

JSON does not define special decimal values for ‘Not a Number’, positive infinity and negative infinity. It is thus necessary to encode them as strings.

- -

Requirement 55

Identifier/req/json-simple-components/special-numerical-values
Statement

The special JSON Strings NaN, -Infinity and +Infinity shall be allowed as the inline or out-of-band value for Quantity and Time (and Count?) components (except when the Time component uses the ISO 8601 format).

- -

NOTE:    These special value strings have been chosen because they are supported natively by Javascript/ECMA Script implementations. The + unary operator can be used to transparently parse one of these strings to a Number type (see https://262.ecma-international.org/13.0/#sec-unary-plus-operator).

These values also correspond to infinities and NaN values defined in IEEE 754-2008.

-
- -

9.1.3.  Abstract Base Classes

- -

The three abstract base classes defined in the UML models are implemented by the following JSON schemas:

- - - -

Requirement 56

Identifier/req/json-simple-components/definition-resolvable
Statement

The “definition” object member defined in the “AbstractDataComponent.json” schema shall contain a URI that can be resolved to the complete human readable definition of the property that is represented by the data component.

- -

Requirement 57

Identifier/req/json-simple-components/inline-value-constraint-valid
Statement

The inline value included in a JSON instance validating against the “AbstractSimpleComponent.json” schema shall satisfy the constraints specified by this instance.

-
- -

9.1.4.  Boolean Object

- -

The “Boolean” object is the JSON schema implementation of the “Boolean” UML class defined in Clause 8.2.4. The schema for this class is provided in Boolean.json.

- -

The following snippet shows an example boolean component with an inline value:

- -
{
 
"type": "Boolean",
 
"definition": "http://sweet.jpl.nasa.gov/2.0/physDynamics.owl#Motion",
 
"label": "Motion Detected",
 
"description": "True when motion was detected in the room",
 
"value": true
}
- - -

The next snippet is an example of boolean component used as data descriptor, hence with no value:

- -
{
 
"type": "Boolean",
 
"definition": "http://mmisw.org/ont/q2o/test/timeContinuityTest",
 
"label": "Time Continuity Test",
 
"description": "Set to true to enable time continuity test"
}
- -
- -

9.1.5.  Text Object

- -

The “Text” object is the JSON schema implementation of the “Text” UML class defined in Clause 8.2.5. The schema for this class is provided in Text.json.

- -

Constraints on a “Text” representation are expressed using the AllowedTokens Object.

- -

The following snippets show how the “Text” component can be used to define human readable text fields, as well as any other alpha-numerical properties:

- -
{
 
"type": "Text",
 
"definition": "http://sensorml.com/ont/swe/property/Manufacturer",
 
"label": "Manufacturer",
 
"value": "Ocean Devices, Inc."
}
- - -
{
 
"type": "Text",
 
"definition": "http://sensorml.com/ont/x-swe/property/VehicleRegistrationNumber",
 
"label": "License Plate",
 
"value": "45ER-EJK-235"
}
- - -

Constraints can also be used — typically when the component is used as a descriptor — to limit the possible text values, either by enumeration or a regular expression pattern:

- -
{
 
"type": "Text",
 
"definition": "http://sensorml.com/ont/x-swe/property/VehicleRegistrationNumber",
 
"label": "License Plate",
 
"constraint": {
   
"pattern": "^[0-9][A-Z]{4}-[A-Z]{3}-[0-9]{3}$"
 
}
}
- - -

NOTE:    This standard does not define any limit on the size of the text data than can be included as the value of a “Text” component, either inline or as part of a datastream. Implementations are responsible for documenting this upper limit.

-
- -

9.1.6.  Category Object

- -

The “Category” object is the JSON schema implementation of the “Category” UML class defined in Clause 8.2.6. The schema for this class is provided in Category.json.

- -

Constraints on a “Category” representation are expressed using the AllowedTokens Object.

- -

The following examples illustrate how the “Category” component is used to define various fields with categorical representations. The categorical scale is defined either via a code space, an enumeration constraint, or both (in which case the enumeration constraint defines a subset of possible values from a code space):

- -
{
 
"type": "Category",
 
"definition": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#GeologicTime",
 
"label": "Geological Period",
 
"description": "Name of the geological period according to the nomenclature of the International Commission on Stratigraphy",
 
"codeSpace": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#Period",
 
"value": "Jurassic"
}
- - -
{
 
"type": "Category",
 
"definition": "http://sweet.jpl.nasa.gov/2.0/biol.owl#Species",
 
"label": "Bird Species",
 
"description": "Bird species according to the classification of the World Bird Database",
 
"codeSpace": "http://www.birdlife.org/datazone/species/index.html"
}
- -
- -

9.1.7.  Count Object

- -

The “Count” object is the JSON schema implementation of the “Count” UML class defined in Clause 8.2.7. The schema for this class is provided in Count.json.

- -

Constraints on a “Count” representation are expressed using the AllowedValues Object.

- -

The following snippet shows a “Count” component used to define the size of a row in a raster dataset:

- -
{
 
"type": "Count",
 
"definition": "http://www.opengis.net/def/property/OGC/0/NumberOfPixels",
 
"label": "Row Size",
 
"description": "Number of pixels in each row of the image",
 
"value": 1024
}
- -
- -

9.1.8.  Quantity Object

- -

The “Quantity” object is the JSON schema implementation of the “Quantity” UML class defined in Clause 8.2.8. The schema for this class is provided in Quantity.json.

- -

Constraints on a “Quantity” representation are expressed using the AllowedValues Object.

- -

The unit of measure is defined using either a URI or a code expressed using the Unified Code for Units of Measure (UCUM) standard.

- -

Requirement 58

Identifier/req/json-simple-components/ucum-code-used
Statement

Whenever it can be constructed using the UCUM specification, the unit of measure shall be specified using a UCUM code as the value of the “uom/code” property. Otherwise the “uom/href” property shall be used to reference an external unit definition.

- -

The following snippets show how “Quantity” components are used to define various (observable or controllable) properties with continuous decimal representations:

- -
{
 
"type": "Quantity",
 
"definition": "http://qudt.org/vocab/quantitykind/Temperature",
 
"label": "Outside Temperature",
 
"description": "Outside temperature taken at the top of the antenna",
 
"uom": { "code": "Cel" },
 
"value": 21.5
}
- - -
{
 
"type": "Quantity",
 
"definition": "http://sensorml.com/ont/swe/property/SpectralRadiance",
 
"label": "Radiance",
 
"description": "Radiance measured on band1",
 
"uom": { "code": "W.m-2.Sr-1.um-1" },
 
"value": 2.83e-2
}
- - -
{
 
"type": "Quantity",
 
"definition": "http://sensorml.com/ont/swe/property/HeightAboveMSL",
 
"referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/5714",
 
"axisID": "H",
 
"label": "MSL Height",
 
"description": "Height above mean sea level",
 
"uom": { "code": "m" }
}
- -
- -

9.1.9.  Time Object

- -

The “Time” object is the JSON schema implementation of the “Time” UML class defined in Clause 8.2.9. The schema for this class is provided in Time.json.

- -

Constraints on a “Time” representation are expressed using the AllowedTimes Object.

- -

The unit of measure is defined using either a URI or a code expressed using the Unified Code for Units of Measure (UCUM) standard. When the temporal property is provided in the ISO 8601:2019 format, this is indicated by using a specific URI.

- -

Requirement 59

Identifier/req/json-simple-components/iso8601-uom-used
Statement

When ISO 8601 notation is used to express the value associated to a “Time” element, the URI “http://www.opengis.net/def/uom/ISO-8601/0/Gregorian” shall be used as the value of the “uom/href” property.

- -

The following snippets show how “Time” components are used to define various temporal properties, with different time scales:

- -

ISO8601 formatted time stamp based on the UTC time standard:

- -
{
 
"type": "Time",
 
"definition": "http://www.opengis.net/def/property/OGC-EO/0/MissionStartTime",
 
"referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC",
 
"localFrame": "urn:org:systems:001#MISSION-START-TIME",
 
"label": "Flight Time",
 
"description": "Time at take-off in UTC",
 
"uom": {
   
"href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
 
},
 
"value": "2009-01-26T10:21:45+01:00"
}
- - -

ISO8601 formatted time stamp based on the GPS time standard:

- -
{
 
"type": "Time",
 
"definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime",
 
"referenceFrame": "http://www.opengis.net/def/trs/USNO/0/GPS",
 
"label": "Sampling Time",
 
"description": "Time at which the measurement was made",
 
"uom": {
   
"href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
 
},
 
"value": "2009-11-05T16:29:26Z"
}
- - -

Time stamp in seconds past the Unix epoch:

- -
{
 
"type": "Time",
 
"definition": "http://www.opengis.net/def/property/OGC/0/RunTime",
 
"referenceTime": "1970-01-01T00:00:00Z",
 
"label": "Model Run Time",
 
"description": "Run time of the model expressed as a Unix time",
 
"uom": {"code": "s" },
 
"value": 1257415633
}
- - -

Time stamp in seconds past a custom time reference called MISSION_START_TIME:

- -
{
 
"type": "Time",
 
"definition": "http://www.opengis.net/def/property/OGC-EO/0/ScanStartTime",
 
"referenceFrame": "urn:org:systems:001#MISSION-START-TIME",
 
"localFrame": "urn:org:systems:001#SCAN-START-TIME",
 
"label": "Scanline Time",
 
"description": "Acquisition time of the scan line",
 
"uom": { "code": "s" }
}
- -
- -

9.1.10.  CategoryRange Object

- -

The “CategoryRange” object is the JSON schema implementation of the “CategoryRange” UML class defined in Clause 8.2.11. The schema for this class is provided in CategoryRange.json.

- -

“CategoryRange” objects share most properties with “Category” object, as shown on the following snippet:

- -
{
 
"type": "CategoryRange",
 
"definition": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#GeologicTime",
 
"label": "Approximate Dating",
 
"description": "Approximate geological dating expressed as a range of geological eras",
 
"codeSpace": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#Era",
 
"value": ["Paleozoic", "Mesozoic"]
}
- -
- -

9.1.11.  CountRange Object

- -

The “CountRange” object is the JSON schema implementation of the “CountRange” UML class defined in Clause 8.2.12. The schema for this class is provided in CountRange.json.

- -

“CountRange” objects share most properties with “Count” object, as shown on the following snippet:

- -
{
 
"type": "CountRange",
 
"definition": "http://www.opengis.net/def/property/OGC/0/ArrayIndex",
 
"label": "Index Range",
 
"value": [0, 3000]
}
- -
- -

9.1.12.  QuantityRange Object

- -

The “QuantityRange” object is the JSON schema implementation of the “QuantityRange” UML class defined in Clause 8.2.13. The schema for this class is provided in QuantityRange.json.

- -

“QuantityRange” objects share most properties with the “Quantity” object, as shown on the following snippet:

- -
{
 
"type": "QuantityRange",
 
"definition": "http://mmisw.org/ont/mmi/device/OperationalRange",
 
"label": "Operational Range",
 
"description": "Operational temperature range of the cryogenic thermometer",
 
"uom": { "code": "K" },
 
"value": [10, 300]
}
- -
- -

9.1.13.  TimeRange Object

- -

The “TimeRange” object is the JSON schema implementation of the “TimeRange” UML class defined in Clause 8.2.14. The schema for this class is provided in TimeRange.json.

- -

“TimeRange” objects share most properties with the “Time” object, as shown on the following snippet:

- -
{
 
"type": "TimeRange",
 
"definition": "http://www.opengis.net/def/property/EO/0/SurveyPeriod",
 
"referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC",
 
"label": "Survey Period",
 
"uom": {
   
"href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
 
},
 
"value": ["2008-01-05T11:02:54Z", "2009-11-05T16:29:26Z"]
}
- -
- -

9.1.14.  NilValues Object

- -

The “NilValues” object is the JSON schema implementation of the “NilValues” UML class defined in Clause 8.2.16. Schema patterns for this class are provided in basicTypes.json. Several sub-patterns are defined for the decimal, integer and text cases.

- -

Examples of NIL values definitions are provided below, in the case of numerical, countable and textual representations:

- -
{
 
"type": "Quantity",
 
"definition": "http://sweet.jpl.nasa.gov/2.0/physRadiation.owl#IonizingRadiation",
 
"label": "Radiation Dose",
 
"description": "Radiation dose measured by Gamma detector",
 
"uom": { "code": "uR" },
 
"nilValues": [
   
{ "reason": "http://www.opengis.net/def/nil/OGC/0/BelowDetectionRange", "value": "-Infinity" },
   
{ "reason": "http://www.opengis.net/def/nil/OGC/0/AboveDetectionRange", "value": "Infinity" }
 
]
}
- - -
{
 
"type": "Count",
 
"definition": "http://sweet.jpl.nasa.gov/2.0/physRadiation.owl#Radiance",
 
"label": "Band 1",
 
"nilValues": [
   
{ "reason": "http://www.opengis.net/def/nil/OGC/0/BelowDetectionRange", "value": 0 },
   
{ "reason": "http://www.opengis.net/def/nil/OGC/0/AboveDetectionRange", "value": 255 }
 
]
}
- - -
{
 
"type": "Text",
 
"definition": "http://sensorml.com/ont/x-swe/property/VehicleRegistrationNumber",
 
"label": "License Plate",
 
"nilValues": [
   
{ "reason": "http://www.opengis.net/def/nil/OGC/0/Missing", "value": "Missing" },
   
{ "reason": "http://www.opengis.net/def/nil/OGC/0/Unknown", "value": "Unknown" }
 
]
}
- -
- -

9.1.15.  AllowedTokens Object

- -

The “AllowedTokens” object is the JSON schema implementation of the “AllowedTokens” UML class defined in Clause 8.2.17. The schema for this class is provided in basicTypes.json (see #definitions/AllowedTokens).

- -

Examples of constraints for textual or categorical properties are provided below:

- -
{
 
"type": "Text",
 
"definition": "http://sensorml.com/ont/swe/property/ModelNumber",
 
"label": "Model Number",
 
"constraint": {
   
"pattern": "^[0-9][A-Z]{3}[0-9]{2}S1$"
 
}
}
- - -
{
 
"type": "Category",
 
"definition": "http://www.opengis.net/def/property/OGC/0/SensorStatus",
 
"label": "Sensor Status",
 
"description": "Current connection status of the sensor",
 
"constraint": {
   
"values": [ "Off", "Stand-by", "Ready", "Busy" ]
 
}
}
- -
- -

9.1.16.  AllowedValues Object

- -

The “AllowedValues” object is the JSON schema implementation of the “AllowedValues” UML class defined in Clause 8.2.18. The schema for this class is provided in basicTypes.json (see #definitions/AllowedValues).

- -

Examples of constraints for various numerical properties are provided below:

- -
{
 
"type": "Quantity",
 
"definition": "http://qudt.org/vocab/quantitykind/Angle",
 
"label": "Planar Angle",
 
"uom": { "code": "deg" },
 
"constraint": {
   
"intervals": [[-180, 180]]
 
}
}
- - -
{
 
"type": "Count",
 
"definition": "http://www.opengis.net/def/property/OGC/0/NumberOfPixels",
 
"label": "Image Width",
 
"constraint": {
   
"values": [256, 512, 1024]
 
}
}
- - -
{
 
"type": "Quantity",
 
"definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude",
 
"label": "Latitude",
 
"uom": { "code": "deg" },
 
"constraint": {
   
"intervals": [[-90, 90]],
   
"significantFigures": 6
 
}
}
- - -

Numerical constraints can also be unbounded:

- -
{
 
"type": "Quantity",
 
"definition": "http://qudt.org/vocab/quantitykind/RadialDistance",
 
"label": "Radial Distance",
 
"description": "Radial distance is always positive",
 
"uom": { "code": "m" },
 
"constraint": {
   
"intervals": [[0, "+Infinity"]]
 
}
}
- -
- -

9.1.17.  AllowedTimes Object

- -

The “AllowedTimes” object is the JSON schema implementation of the “AllowedTimes” UML class defined in Clause 8.2.19. The schema for this class is provided in basicTypes.json (see #definitions/AllowedTimes).

- -

Examples of constraints for various temporal properties, expressed as ISO-8601 or decimal values, are provided below:

- -
{
 
"type": "Time",
 
"definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime",
 
"referenceFrame": "http://www.opengis.net/def/trs/USNO/0/GPS",
 
"label": "Acquisition Time",
 
"uom": {
   
"href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
 
},
 
"constraint": {
   
"intervals": [["2009-01-01T00:00:00Z", "+Infinity"]]
 
}
}
- - -
{
 
"type": "Time",
 
"definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime",
 
"referenceFrame": "urn:org:systems:001#SCAN-START-TIME",
 
"label": "Lidar Pulse Time",
 
"description": "Time stamp of LiDAR pulse relative to start of scan",
 
"uom": { "code": "ms" },
 
"constraint": {
   
"intervals": [[0, 1e6]]
 
}
}
- -
-

9.2.  Requirements Class: Record Components JSON Schema

- -

Requirements class 10: Record Components JSON Schema

Identifier/req/json-record-components
Target typeJSON Document
PrerequisitesRequirements class 3: /req/uml-record-components
Requirements class 9: /req/json-simple-components
- -

9.2.1.  DataRecord Object

- -

The “DataRecord” object is the JSON schema implementation of the “DataRecord” UML class defined in Clause 8.3.1. The schema for this class is provided in DataRecord.json.

- -

The example below describes a record composed of weather data fields. In this case the “DataRecord” element is used as a descriptor for records of data that are provided as part of a datastream:

- -
{
 
"type": "DataRecord",
 
"label": "Weather Data Record",
 
"fields": [
   
{
     
"name": "time",
     
"type": "Time",
     
"definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime",
     
"referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC",
     
"label": "Sampling Time",
     
"uom": {
       
"href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
     
}
   
},
   
{
     
"name": "temperature",
     
"type": "Quantity",
     
"definition": "http://mmisw.org/ont/cf/parameter/air_temperature",
     
"label": "Air Temperature",
     
"uom": { "code": "Cel" }
   
},
   
{
     
"name": "pressure",
     
"type": "Quantity",
     
"definition": "http://mmisw.org/ont/cf/parameter/air_pressure_at_mean_sea_level",
     
"label": "Air Pressure",
     
"uom": { "code": "mbar" }
   
},
   
{
     
"name": "windSpeed",
     
"type": "Quantity",
     
"definition": "http://mmisw.org/ont/cf/parameter/wind_speed",
     
"label": "Wind Speed",
     
"uom": { "code": "km/h" }
   
},
   
{
     
"name": "windDirection",
     
"type": "Quantity",
     
"definition": "http://mmisw.org/ont/cf/parameter/wind_to_direction",
     
"label": "Wind Direction",
     
"uom": { "code": "deg" }
   
}
 
]
}
- - -
{
 
"type": "DataRecord",
 
"definition": "urn:x-ogc:def:property:CSM::RadialDistortionCoefficients",
 
"label": "Radial Distortion Coefficients",
 
"fields": [
   
{
     
"name": "k1",
     
"type": "Quantity",
     
"definition": "urn:x-ogc:def:property:CSM::DISTOR_RAD1",
     
"label": "Coef k1",
     
"uom": { "code": "mm-2" },
     
"value": 1.92709e-5
   
},
   
{
     
"name": "k2",
     
"type": "Quantity",
     
"definition": "urn:x-ogc:def:property:CSM::DISTOR_RAD2",
     
"label": "Coef k2",
     
"uom": { "code": "mm-2" },
     
"value": -5.14206e-10
   
},
   
{
     
"name": "k3",
     
"type": "Quantity",
     
"definition": "urn:x-ogc:def:property:CSM::DISTOR_RAD3",
     
"label": "Coef k3",
     
"uom": { "code": "mm-2" },
     
"value": -3.33356e-12
   
}
 
]
}
- -
- -

9.2.2.  Vector Object

- -

The “Vector” object is the JSON schema implementation of the “Vector” UML class defined in Clause 8.3.2. The schema for this class is provided in Vector.json.

- -
{
 
"type": "Vector",
 
"definition": "http://www.opengis.net/def/property/OGC/0/PlatformLocation",
 
"referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/4326",
 
"label": "Platform Location",
 
"coordinates": [
   
{
     
"name": "lat",
     
"type": "Quantity",
     
"definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude",
     
"label": "Latitude",
     
"axisID": "Lat",
     
"uom": { "code": "deg" },
     
"value": 45.36
   
},
   
{
     
"name": "lon",
     
"type": "Quantity",
     
"definition": "http://sensorml.com/ont/swe/property/Longitude",
     
"label": "Longitude",
     
"axisID": "Lon",
     
"uom": { "code": "deg" },
     
"value": 5.2
   
}
 
]
}
- - -
{
 
"type": "Vector",
 
"definition": "http://qudt.org/vocab/quantitykind/LinearVelocity",
 
"referenceFrame": "http://www.opengis.net/def/crs/OGC/0/ECI_J2000",
 
"label": "Platform Velocity",
 
"coordinates": [
   
{
     
"name": "vx",
     
"type": "Quantity",
     
"definition": "http://qudt.org/vocab/quantitykind/Speed",
     
"label": "Velocity X",
     
"uom": { "code": "m/s" }
   
},
   
{
     
"name": "vy",
     
"type": "Quantity",
     
"definition": "http://qudt.org/vocab/quantitykind/Speed",
     
"label": "Velocity Y",
     
"uom": { "code": "m/s" }
   
},
   
{
     
"name": "vz",
     
"type": "Quantity",
     
"definition": "http://qudt.org/vocab/quantitykind/Speed",
     
"label": "Velocity Z",
     
"uom": { "code": "m/s" }
   
}
 
]
}
- - -
{
 
"type": "Vector",
 
"definition": "http://sensorml.com/ont/swe/property/RotationQuaternion",
 
"referenceFrame": "http://www.opengis.net/def/crs/OGC/0/ECI_J2000",
 
"localFrame": "urn:org:systems:001#PLATFORM_FRAME",
 
"label": "Platform Orientation",
 
"coordinates": [
   
{
     
"name": "qx",
     
"type": "Quantity",
     
"definition": "http://sensorml.com/ont/swe/property/Coordinate",
     
"label": "QX",
     
"uom": { "code": "1" }
   
},
   
{
     
"name": "qy",
     
"type": "Quantity",
     
"definition": "http://sensorml.com/ont/swe/property/Coordinate",
     
"label": "QY",
     
"uom": { "code": "1" }
   
},
   
{
     
"name": "qz",
     
"type": "Quantity",
     
"definition": "http://sensorml.com/ont/swe/property/Coordinate",
     
"label": "QZ",
     
"uom": { "code": "1" }
   
},
   
{
     
"name": "qw",
     
"type": "Quantity",
     
"definition": "http://sensorml.com/ont/swe/property/Coordinate",
     
"label": "QW",
     
"uom": { "code": "1" }
   
}
 
]
}
- -
-

9.3.  Requirements Class: Choice Components JSON Schema

- -

Requirements class 11: Choice Components JSON Schema

Identifier/req/json-choice-components
Target typeJSON Document
PrerequisitesRequirements class 4: /req/uml-choice-components
Requirements class 9: /req/json-simple-components
- -

9.3.1.  DataChoice Object

- -

The “DataChoice” object is the JSON schema implementation of the “DataChoice” UML class defined in Clause 8.4.1. The schema for this class is provided in DataChoice.json.

- -
{
 
"type": "DataChoice",
 
"label": "Weather Data Message",
 
"items": [
   
{
     
"name": "TEMP",
     
"type": "DataRecord",
     
"label": "Temperature Measurement",
     
"fields": [
       
{
         
"name": "time",
         
"type": "Time",
         
"definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime",
         
"referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC",
         
"label": "Sampling Time",
         
"uom": {
           
"href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
         
}
       
},
       
{
         
"name": "temp",
         
"type": "Quantity",
         
"definition": "http://mmisw.org/ont/cf/parameter/air_temperature",
         
"label": "Air Temperature",
         
"uom": { "code": "Cel" }
       
}
     
]
   
},
   
{
     
"name": "PRESS",
     
"type": "DataRecord",
     
"label": "Pressure Measurement",
     
"fields": [
       
{
         
"name": "time",
         
"type": "Time",
         
"definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime",
         
"referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC",
         
"label": "Sampling Time",
         
"uom": {
           
"href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"
         
}
       
},
       
{
         
"name": "press",
         
"type": "Quantity",
         
"definition": "http://mmisw.org/ont/cf/parameter/air_pressure_at_mean_sea_level",
         
"label": "Air Pressure",
         
"uom": { "code": "HPa" }
       
}
     
]
   
}
 
]
}
- -
-

9.4.  Requirements Class: Block Components JSON Schema

- -

Requirements class 12: Block Components JSON Schema

Identifier/req/json-block-components
Target typeJSON Document
PrerequisitesRequirements class 5: /req/uml-block-components
Requirements class 9: /req/json-simple-components
- -

9.4.1.  DataArray Object

- -

The “DataArray” element is the JSON schema implementation of the “DataArray” UML class defined in Clause 8.5.1. The schema for this class is provided in DataArray.json.

- -
{
 
"type": "DataArray",
 
"label": "Calibration Table",
 
"elementType": {
   
"name": "point",
   
"type": "DataRecord",
   
"label": "Data Point",
   
"fields": [
     
{
       
"name": "t",
       
"type": "Quantity",
       
"definition": "https://qudt.org/vocab/quantitykind/Temperature",
       
"label": "Temperature",
       
"uom": { "code": "Cel" }
     
},
     
{
       
"name": "r",
       
"type": "Quantity",
       
"definition": "https://qudt.org/vocab/quantitykind/Resistance",
       
"label": "Resistance",
       
"uom": { "code": "KOhm" }
     
}
   
]
 
},
 
"values": [
   
{"t": 12, "r": 3.03},
   
{"t": 30.1, "r": 1.68},
   
{"t": 40.0, "r": 1.16},
   
{"t": 50.1, "r": 0.85},
   
{"t": 59.8, "r": 0.62}
 
]
}
- - -

When provided inline, “DataArray” values are encoded using the method defined in Clause 9.4.4.

- -

The following example shows how to define a 1D variable size array whose data is provided separately.

- -
{
 
"type": "DataArray",
 
"definition": "http://sensorml.com/ont/swe/property/Trajectory",
 
"label": "Mobile Trajectory",
 
"elementCount": {
   
"definition": "http://www.opengis.net/def/property/OGC/0/NumberOfPoints",
   
"label": "Implicit Size"
 
},
 
"elementType": {
   
"name": "point",
   
"type": "Vector",
   
"definition": "http://www.opengis.net/def/property/OGC/0/PlatformLocation",
   
"referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/4326",
   
"label": "Location Point",
   
"coordinates": [
     
{
       
"name": "lat",
       
"type": "Quantity",
       
"definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude",
       
"label": "Latitude",
       
"axisID": "Lat",
       
"uom": { "code": "deg" }
     
},
     
{
       
"name": "lon",
       
"type": "Quantity",
       
"definition": "http://sensorml.com/ont/swe/property/Longitude",
       
"label": "Longitude",
       
"axisID": "Lon",
       
"uom": { "code": "deg" }
     
}
   
]
 
}
}
- - -

“DataArray” components can also be nested to form multi-dimensional arrays, as shown in the following example of a 2D array:

- -
{
 
"type": "DataArray",
 
"definition": "http://sensorml.com/ont/swe/property/RasterImage",
 
"label": "Satellite Image",
 
"elementCount": {
   
"definition": "http://www.opengis.net/def/property/OGC/0/NumberOfRows",
   
"value": 3000
 
},
 
"elementType": {
   
"name": "row",
   
"type": "DataArray",
   
"definition": "http://sensorml.com/ont/swe/property/RasterImage",
   
"elementCount": {
     
"definition": "http://www.opengis.net/def/property/OGC/0/NumberOfSamples",
     
"value": 3000
   
},
   
"elementType": {
     
"name": "pixel",
     
"type": "DataRecord",
     
"definition": "http://sensorml.com/ont/swe/property/GridCell",
     
"fields": [
       
{
         
"name": "band1",
         
"type": "Quantity",
         
"definition": "http://qudt.org/vocab/quantitykind/Radiance",
         
"label": "Radiance",
         
"description": "Radiance measured on band1",
         
"uom": { "code": "W.m-2.Sr-1" }
       
},
       
{
         
"name": "band2",
         
"type": "Quantity",
         
"definition": "http://qudt.org/vocab/quantitykind/Radiance",
         
"label": "Radiance",
         
"description": "Radiance measured on band2",
         
"uom": { "code": "W.m-2.Sr-1" }
       
},
       
{
         
"name": "band3",
         
"type": "Quantity",
         
"definition": "http://qudt.org/vocab/quantitykind/Radiance",
         
"label": "Radiance",
         
"description": "Radiance measured on band3",
         
"uom": { "code": "W.m-2.Sr-1" }
       
}
     
]
   
}
 
}
}
- -
- -

9.4.2.  Matrix Object

- -

The “Matrix” object is the JSON schema implementation of the “Matrix” UML class defined in Clause 8.5.2. The schema for this class is provided in Matrix.json.

- -
{
 
"type": "Matrix",
 
"definition": "http://sensorml.com/ont/swe/property/RotationMatrix",
 
"referenceFrame": "http://www.opengis.net/def/crs/OGC/0/ECI_J2000",
 
"label": "3D Orientation Matrix",
 
"elementType": {
   
"name": "row",
   
"type": "Matrix",
   
"elementType": {
     
"name": "coef",
     
"type": "Quantity",
     
"definition": "http://sensorml.com/ont/swe/property/Coordinate",
     
"label": "Matrix Coef",
     
"uom": { "code": "1" }
   
}
 
},
 
"values": [
   
[0.36,0.48,-0.8],
   
[-0.8,0.6,0],
   
[0.48,0.64,0.6]
 
]
}
- - -

When provided inline, “Matrix” values are encoded using the method defined in Clause 9.4.4.

-
- -

9.4.3.  DataStream Object

- -

The “DataStream” object is the JSON schema implementation of the “DataStream” UML class defined in Clause 8.5.3. The schema for this class is provided in DataStream.json.

- -
{
 
"type": "DataStream",
 
"label": "Aircraft Navigation",
 
"elementType": {
   
"name": "navData",
   
"type": "DataRecord",
   
"fields": [
     
{
       
"type": "Time",
       
"definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime",
       
"referenceFrame": "http://www.opengis.net/def/trs/USNO/0/GPS",
       
"referenceTime": "1970-01-01T00:00:00Z",
       
"label": "Sampling Time",
       
"uom": { "code": "s" }
     
},
     
{
       
"name": "location",
       
"type": "Vector",
       
"definition": "http://www.opengis.net/def/property/OGC/0/PlatformLocation",
       
"referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/4979",
       
"label": "Platform Location",
       
"coordinates": [
         
{
           
"name": "lat",
           
"type": "Quantity",
           
"definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude",
           
"label": "Latitude",
           
"axisID": "Lat",
           
"uom": { "code": "deg" }
         
},
         
{
           
"name": "lon",
           
"type": "Quantity",
           
"definition": "http://sensorml.com/ont/swe/property/Longitude",
           
"label": "Longitude",
           
"axisID": "Lon",
           
"uom": { "code": "deg" }
         
},
         
{
           
"name": "alt",
           
"type": "Quantity",
           
"definition": "http://sensorml.com/ont/swe/property/HeightAboveEllipsoid",
           
"label": "Altitude",
           
"axisID": "h",
           
"uom": { "code": "m" }
         
}
       
]
     
},
     
{
       
"name": "attitude",
       
"type": "Vector",
       
"definition": "http://www.opengis.net/def/property/OGC/0/PlatformOrientation",
       
"referenceFrame": "http://www.opengis.net/def/cs/OGC/0/ENU",
       
"label": "Platform Attitude",
       
"coordinates": [
         
{
           
"name": "heading",
           
"type": "Quantity",
           
"definition": "http://sensorml.com/ont/swe/property/TrueHeading",
           
"label": "Heading",
           
"axisID": "Z",
           
"uom": { "code": "deg" }
         
},
         
{
           
"name": "pitch",
           
"type": "Quantity",
           
"definition": "http://sensorml.com/ont/swe/property/PitchAngle",
           
"label": "Pitch",
           
"axisID": "X",
           
"uom": { "code": "deg" }
         
},
         
{
           
"name": "roll",
           
"type": "Quantity",
           
"definition": "http://sensorml.com/ont/swe/property/RollAngle",
           
"label": "Roll",
           
"axisID": "Y",
           
"uom": { "code": "deg" }
         
}
       
]
     
}
   
]
 
},
 
"encoding": {
   
"type": "TextEncoding",
   
"tokenSeparator": ",",
   
"blockSeparator": "\n",
   
"decimalSeparator": "."
 
}
}
- - -

When provided inline, “DataStream” values are encoded using the method defined in Clause 9.4.4.

-
- -

9.4.4.  Inline Value Blocks

- -

This clause specifies how inline vaues for “DataArray”, “Matrix” and “DataStream” components shall be encoded when provided within a JSON document. No other method is allowed within a JSON document compliant with this standard.

- -

However, when values are provided separately from the component description (e.g. when datastream values are provided separately), any encoding methods defined in Clause 10 can be used.

- -

Inline block component values shall always be wrapped using JSON Arrays.

-
-

9.5.  Requirements Class: Geometry Components JSON Schema

- -

Requirements class 13: Geometry Components JSON Schema

Identifier/req/json-geom-components
Target typeJSON Document
PrerequisitesRequirements class 6: /req/uml-geom-components
Requirements class 9: /req/json-simple-components
- -

9.5.1.  Geometry Object

- -

The “Geometry” object is the XML schema implementation of the “Geometry” UML class defined in Clause 8.6.1. The schema for this class is provided in Geometry.json.

- -
{
 
"type": "Geometry",
 
"definition": "http://sensorml.com/ont/swe/property/TargetLocation",
 
"srs": "http://www.opengis.net/def/crs/EPSG/0/4326",
 
"label": "Target Location",
 
"description": "A point geometry",
 
"value": {
   
"type": "Point",
   
"coordinates": [12.34, 56.36]
 
}
}

{
 
"type": "Geometry",
 
"definition": "http://sensorml.com/ont/swe/property/Trajectory",
 
"srs": "http://www.opengis.net/def/crs/EPSG/0/4326",
 
"label": "Desired Trajectory",
 
"description": "Desired UxS trajectory defined as a line string",
 
"value": {
   
"type": "LineString",
   
"coordinates": [[12.34, 56.36], [12.45, 56.37], [12.45, 56.39], [12.34, 56.36]]
 
}
}

{
 
"type": "Geometry",
 
"definition": "http://sensorml.com/ont/x-swe/property/SurveillanceArea",
 
"srs": "http://www.opengis.net/def/crs/EPSG/0/4326",
 
"label": "Surveillance Area",
 
"description": "Desired UxS surveillance area defined as a polygon",
 
"value": {
   
"type": "Polygon",
   
"coordinates": [
     
[[12.34, 56.36], [12.45, 56.37], [12.45, 56.39], [12.34, 56.36]]
   
]
 
}
}
- -
-

9.6.  Requirements Class: Simple Encodings JSON Schema

- -

Requirements class 14: Simple Encodings JSON Schema

Identifier/req/json-simple-encodings
Target typeJSON Document
PrerequisitesRequirements class 14: /req/json-simple-encodings
Requirements class 18: /req/text-encoding-rules
Requirements class 17: /req/json-encoding-rules
- -

Validation patterns that implement classes defined respectively in the “Simple Encodings” UML packages are provided in the JSON schema encodings.json.

- -

When datastream or data array values are provided out-of-band (i.e. not inline in the “DataArray”, “Matrix” or “DataStream” description), a different encoding than JSON can be selected. This is specified by using one of the following classes.

- -

9.6.1.  TextEncoding Object

- -

The “TextEncoding” object is the JSON schema implementation of the “TextEncoding” UML class defined in Clause 8.7.1. The schema for this class is provided in encodings.json#/definitions/TextEncoding.

- -
{
 
"type": "TextEncoding",
 
"tokenSeparator": ",",
 
"blockSeparator": "\n",
 
"decimalSeparator": "."
}
- -
-

9.7.  Requirements Class: Advanced Encodings JSON Schema

- -

Requirements class 15: Advanced Encodings JSON Schema

Identifier/req/json-advanced-encodings
Target typeJSON Document
PrerequisitesRequirements class 8: /req/uml-advanced-encodings
Requirements class 14: /req/json-simple-encodings
Requirements class 19: /req/binary-encoding-rules
- -

This requirement class defines an additional encoding method that can be used to encode data values as raw or base64 binary blocks.

- -

9.7.1.  BinaryEncoding Object

- -

The “BinaryEncoding” object is the JSON schema implementation of the “BinaryEncoding” UML class defined in Clause 8.8.1. The schema for this class is provided in encondings.json#/definitions/BinaryEncoding.

- -

-
-

These elements allow for the detailed specification of the encoding parameters associated to components of the data description tree as discussed in Clause 8.8.1. The “ref” attribute takes a value of a particular syntax that allows pointing to any data component. The syntax is a ‘/’ separated list of component names, starting with the name of the root component and listed hierarchically. Each of these component names shall match the value of the “name” attribute defined in the data definition tree.

- -

Requirement 60

Identifier/req/xsd-advanced-encodings/ref-syntax-valid
Statement

The “ref” attribute of the “Component” and “Block” elements shall contain a hierarchical ‘/’ separated list of data component names.

- -

The “ref” attribute used on the “Component” element shall point exclusively to a scalar component.

- -

Requirement 61

Identifier/req/xsd-advanced-encodings/scalar-ref-component-valid
Statement

The “ref” attribute of a “Component” element shall reference a scalar or range component.

- -

This standard defines the list of data types that are allowed for scalar values when encoded with the binary encoding method. The corresponding URIs listed below shall be used as the value of the datatype attribute of an instance of the “Component” element.

- -

Requirement 62

Identifier/req/xsd-advanced-encodings/datatype-valid
Statement

The value of the “dataType” XML attribute of the “Component” element shall be one of the URIs listed in Table 1.

- -

These data types are specified in the normative table below:

- -

Table 1 — Allowed Binary Data Types

Common NameURI to use in “dataType” attributeDescription
Signed Bytehttp://www.opengis.net/def/dataType/OGC/0/signedByte8-bits signed binary integer.
- Range: −128 to +127
Unsigned Bytehttp://www.opengis.net/def/dataType/OGC/0/unsignedByte8-bits unsigned binary integer.
- Range: 0 to +255
Signed Shorthttp://www.opengis.net/def/dataType/OGC/0/signedShort16-bits signed binary integer.
- Range: −32,768 to +32,767
Unsigned Shorthttp://www.opengis.net/def/dataType/OGC/0/unsignedShort16-bits unsigned binary integer.
- Range: 0 to +65,535
Signed Inthttp://www.opengis.net/def/dataType/OGC/0/signedInt32-bits signed binary integer.
- Range: −2,147,483,648 to +2,147,483,647
Unsigned Inthttp://www.opengis.net/def/dataType/OGC/0/unsignedInt32-bits unsigned binary integer.
- Range: 0 to +4,294,967,295
Signed Longhttp://www.opengis.net/def/dataType/OGC/0/signedLong64-bits signed binary integer.
- Range: −263 to +263 — 1
Unsigned Longhttp://www.opengis.net/def/dataType/OGC/0/unsignedLong64-bits unsigned binary integer.
- Range: 0 to +264 — 1
Half Precision - Floathttp://www.opengis.net/def/dataType/OGC/0/float1616-bits single precision floating point number as defined in IEEE 754.
Floathttp://www.opengis.net/def/dataType/OGC/0/float3232-bits single precision floating point number as defined in IEEE 754.
Doublehttp://www.opengis.net/def/dataType/OGC/0/double or
- http://www.opengis.net/def/dataType/OGC/0/float64
64-bits double precision floating point number as defined in IEEE 754.
Long Doublehttp://www.opengis.net/def/dataType/OGC/0/float128128-bits quadruple precision floating point number as defined in IEEE 754.
UTF-8 String
- (Variable Length)
http://www.opengis.net/def/dataType/OGC/0/string-utf-8
- “byteLength” attribute is not set.
Variable length string composed of a 2-bytes unsigned short value indicating its length followed by a sequence of UTF-8 encoded characters as specified by the Unicode Standard (2.5).
UTF-8 String*
- (Fixed Length)
http://www.opengis.net/def/dataType/OGC/0/string-utf-8
- “byteLength” attribute is set.
Fixed length string composed of a sequence of UTF-8 encoded characters as specified by the Unicode Standard (2.5), and padded with 0 characters.
- -

The data type should be chosen so that its range allows the encoding of all possible values for a field (i.e. compatible with the field representation and constraints) including NIL values. This means that certain combinations of data type and components are not allowed. If a scalar component does not specify any constraint, any data type compatible with its representation can be used and it is the responsibility of the implementation to insure that all future values for the component will “fit” in the data type.

- -

Requirement 63

Identifier/req/xsd-advanced-encodings/datatype-compatible
Statement

The chosen data type shall be compatible with the scalar component representation, constraints and NIL values.

- -

Only data types marked with an asterisk allow the usage of the “byteLength” or “bitLength” attribute to customize their size. Usage of these attributes is forbidden on all other data types since their size is fixed and already specified in this standard (in the case of a variable length string, the size is included in the stream). This is enforced by a Schematron pattern.

- -

Requirement 64

Identifier/req/xsd-advanced-encodings/no-datatype-length
Statement

The “bitLength” and “byteLength” XML attributes shall not be set when a fixed size data type is used.

- -

The value of the “byteEncoding” XML attribute allows the selection of either the ‘raw’ or ‘base64’ encoding methods. When ‘base64’ is selected each byte is converted to its base 64 representation before it is included in encoded block, making it possible to include the values directly inline in the XML instance.

- -

The following binary encoded image data illustrates how the BinaryEncoding element is used to specify encoding options to each scalar value in the dataset:

-
-

10.  Data Blocks and Streams Encoding Rules (normative)

10.1.  Requirements Class: General Encoding Rules

- -

Requirements class 16: General Encoding Rules

Identifier/req/general-encoding-rules
Target typeEncoded Values Instance
Conformance classConformance class A.8: /conf/general-encoding-rules
Indirect prerequisiteRequirements class 7: /req/uml-simple-encodings
- -

All encodings defined in this standard follow general principles so that it is possible to implement them in a similar way.

- -

The way values are encoded is linked to the data structure specified using a hierarchy of data components. The values are included sequentially in the data stream by recursively processing all data components composing the dataset definition tree.

- -

10.1.1.  Rules for Scalar Components

- -

The value of each scalar component is encoded as a single scalar value. The actual binary representation of this scalar value depends on the encoding method. For example, in “TextEncoding”, a numerical value is represented by its string representation that usually span several bytes (e.g. ‘1.2345’ spans 6 bytes), why with the “BinaryEncoding” encode a similar value would likely be encoded as an IEEE 754 single precision floating-point format.

- -

The value of a “Time” component is encoded either as a decimal value or as a string in the case where a calendar representation or indeterminate value is used.

- -

When the value of a scalar component is NIL, the appropriate nil value is used in the stream and replaces the actual measurement value. This is always possible because nil values are required to be expressed with a data type that is compatible with the representation of the corresponding field.

-
- -

10.1.2.  Rules for Range Components

- -

The values of range components are encoded as a sequence of two successive values, first the lower bound of the range, then the upper bound. Each of these values is encoded exactly like the values of scalar components.

-
- -

10.1.3.  Rules for DataRecord and Vector

- -

Both “DataRecord” and “Vector” components are aggregates consisting of an ordered sequence of child components. The values contained in these aggregates are encoded by successively encoding each child component in the order in which they are listed in the XML description and including the resulting values sequentially in the stream.

- -

The definition of a “DataRecord” (or “Vector”) structure composed of N fields (or coordinates for vectors) can be represented in the following way:

- -
- -

The data block corresponding to such a structure would sequentially include all values for field 1, then all values for field 2, etc. until the last field is reached. Each field may consist of a single value if it is a scalar but may also consist of multiple values if it is itself an aggregate or a range component.

- -

Requirement 65

Identifier/req/general-encoding-rules/record-encoding-rule
Statement

“DataRecord” fields or “Vector” coordinates shall be encoded sequentially in a data block in the order in which these fields or coordinates are listed in the data descriptor.

-
- -

10.1.4.  Rules for DataChoice

- -

The “DataChoice” is an aggregate consisting of a choice of several child components called items. When values of a data choice are encoded, the resulting data block consists of two things: A token identifying the selecting item and the item values themselves. Only values of a single item can be encoded in each instance of a choice.

- -
- -

The data block corresponding to such a structure would then sequentially include the item identifier (i.e. the choice value) and then the value(s) for the selected item. The item may consist of a single value if it is a scalar or multiple values if it is itself an aggregate or a range component.

- -

Requirement 66

Identifier/req/general-encoding-rules/choice-encoding-rule
Statement

Encoded values for the selected item of a “DataChoice” shall be provided along with information that unambiguously identifies the selected item.

-
- -

10.1.5.  Rules for DataArray and Matrix

- -

The “DataArray” is an aggregate consisting of a number of repeated elements, all of the same type as defined by the element type. Values contained by a “DataArray” are encoded by sequentially including the values of each element.

- -

The definition of a “DataArray” (“Matrix”) structure composed of the array dimension and size and the element type definition. This can be represented in the following way:

- -
- -

The data block corresponding to such a structure would sequentially include the number representing the array size (only if it is variable) followed by one or more values corresponding to each array element. The number of values encoded for each element depends only on the array element definition, and the total number of values also depends on the array size.

- -

Requirement 67

Identifier/req/general-encoding-rules/array-encoding-rule
Statement

“DataArray” elements shall be encoded sequentially in a data block in the order of their index in the array (i.e. from low to high index).

- -

Requirement 68

Identifier/req/general-encoding-rules/array-size-encoding-rule
Statement

Encoded data for a variable size “DataArray” shall include a number specifying the array size whatever the encoding method used.

-
-

10.2.  Requirements Class: JSON Encoding Rules

- -

Requirements class 17: JSON Encoding Rules

Identifier/req/json-encoding-rules
Target typeEncoded Values Instance
PrerequisiteRequirements class 16: /req/general-encoding-rules
Indirect prerequisiteRequirements class 7: /req/uml-simple-encodings
- -

The “JSON Encoding” method encodes field values by their JSON representation.

- -

Requirement 69

Identifier/req/json-encodings-rules/json-valid
Statement

Data blocks and datastreams encoded using the JSON Encoding rules shall be valid JSON documents as defined by IETF RFC 8259.

- -

The encoding rules defined in this document refer to JSON data types defined by IETF RFC 8259. Their definitions are recalled below:

- -

JSON Object: An object structure is represented as a pair of curly brackets surrounding zero or more name/value pairs (or members). Members are separated by commas. Each member must have a distinct name.

- -

JSON Array: An array structure is represented as square brackets surrounding zero or more values (or elements). Elements are separated by commas.

- -

JSON Number: A decimal or integer number represented in base 10, with a sign and optional exponent.

- -

JSON String: A string of Unicode characters that begins and ends with quotation marks.

- -

10.2.1.  Rules for Scalar Components

- -

Scalar components are encoded as specified in Table 2. Special numerical values allowed for “Quantity” and “Time” components are defined in Clause 9.1.2.

- -

Requirement 70

Identifier/req/json-encoding-rules/scalar-value-valid
Statement

The value of a scalar component shall be represented using a JSON Number, a JSON String, or a boolean literal value, as defined in Table 2.

- -

Table 2 — Simple Component to JSON Value Types Mapping

Component TypeJSON Value TypeExamples
BooleanBoolean literaltrue
- false
TextJSON String"word"
- "a full sentence"
- "BYC-589-AA"
CategoryJSON String"ON"
- "Paleozoic"
- "diesel"
CountJSON Number12
- 0
QuantityJSON Number, or
- JSON String with special numerical value.
12
- 23.1
- "NaN"
- "-Infinity"
- "+Infinity"
TimeJSON String with a ISO8601 date/time string, or - JSON Number, or
- JSON String with special numerical value.
"2023-03-15T12:45:56Z"
- -23.1
- 12
- "NaN"
- "-Infinity"
- "+Infinity"
-
- -

10.2.2.  Rules for Range Components

- -

A range component is encoded using a JSON array of two values.

- -

Requirement 71

Identifier/req/json-encoding-rules/range-value-valid
A

Values of range components shall be wrapped in a JSON Array with exactly 2 scalar values.

-
B

Each value is encoded in the same manner as the corresponding scalar component as defined in Table 2.

-
- -

Table 3 — Range Component to JSON Mapping

Component TypeExamples
CategoryRange["Cenozoic", "Paleozoic"]
CountRange[0, 12]
QuantityRange[-12, 35]
- [-180.0, 180.0]
- ["-Infinity", 0.0]
- [10.0, "+Infinity"]
- ["NaN", "NaN"]
TimeRange["2023-01-01T00:00:00Z", "2023-03-15T12:45:56Z"]
- ["2023-01-01T00:00:00Z", "+Infinity"]
- ["-Infinity", "2023-01-01T00:00:00Z"]
- ["2023-01-01T00:00:00Z", "+Infinity"]
- ["NaN", "NaN"]
-
- -

10.2.3.  Rules for DataRecord and Vector

- -

“DataRecord” components are encoded using a JSON Object whose members are named like the record fields.

- -

Requirement 72

Identifier/req/json-encoding-rules/record-object-valid
A

“DataRecord” values shall be wrapped in a JSON Object.

-
B

The name of the JSON object members shall be the same as the “DataRecord” field names.

-
C

The value of each JSON Object member shall be chosen by following the encoding rules of the data component used as the record field with the same name.

-
D

If a record field is marked as ‘optional’, the corresponding JSON object member can be omitted or its JSON value can be set to null.

-
- -

Requirement 73

Identifier/req/json-encoding-rules/vector-object-valid
A

“Vector” values shall be wrapped in a JSON Object.

-
B

The name of the JSON object members shall be the same as the “Vector” coordinate names.

-
C

The value of each JSON Object member shall be chosen by following the encoding rules of the data component used as the vector coordinate field with the same name.

-
- -

When a field has its ‘optional’ flag set to true, its value can be either omitted or set to the literal value null.

- -

See the following examples:

- - -
- -

10.2.4.  Rules for DataChoice

- -

Values of “DataChoice” components are encoded using a JSON Object with a single member whose name is the name of the selected choice item.

- -

Requirement 74

Identifier/req/json-encoding-rules/choice-object-valid
A

“DataChoice” values shall be encapsulated in a JSON Object.

-
B

The JSON object shall contain a single member whose name is the same as the selected choice item.

-
C

The JSON value of this unique member shall be chosen according to the encoding rules of the data component corresponding to the selected item.

-
- -

See example: Datastream with choice (navigation data)

-
- -

10.2.5.  Rules for DataArray and Matrix

- -

Values of “DataArray” and “Matrix” components are encoded using a JSON Array, containing as many elements as there are elements in the Array component.

- -

Requirement 75

Identifier/req/json-encoding-rules/array-values-valid
A

“DataArray” and “Matrix” values shall be encapsulated in a JSON Array.

-
B

Each array element shall be encoded using the rules corresponding to the data component used as the array element type.

-
- -

See the following examples:

- - -
- -

10.2.6.  Rules for Geometry

- -

The value of a “Geometry” component is encoded using a GeoJSON Geometry object.

- -

Requirement 76

Identifier/req/json-encodings-rules/geometry-valid
A

The value of a “Geometry” component shall be encoded as a GeoJSON Geometry Object, following rules defined by IETF RFC 7946.

-
B

The allowed GeoJSON geometry types shall be restricted to: Point, LineString, Polygon, MultiPoint, MultiLineString, and MultiPolygon

-
C

The number of dimensions of the GeoJSON geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component.

-
- -

See example: Datastream with geometry (feature detection)

-
- -

10.2.7.  JSON Schema

- -

In order to maximize compatibility with existing tools, A JSON Schema can be easily auto-generated from the Datastream description.

-
- -

10.2.8.  Media Types

- -

When array or datastream values are encoded with the JSON encoding method and provided standalone (i.e. outside of any wrapper format), one of the following media type identifiers shall be used:

- -
  1. One of application/json or application/swe+json shall be used as the content-type for files and HTTP reponses.

    -
  2. -
  3. application/swe+json shall be used for format negotiation between server and client (e.g. when the format is advertised by an API or web service). In particular, this media type shall be used in HTTP Accept and Link headers and in any server response used to advertise support or link to a resource encoded with this format.

    -
  4. -
- -

alternative would be application/vnd.ogc.swe+json

-
-

10.3.  Requirements Class: Text Encoding Rules

- -

Requirements class 18: Text Encoding Rules

Identifier/req/text-encoding-rules
Target typeEncoded Values Instance
Conformance classConformance class A.9: /conf/text-encoding-rules
PrerequisiteRequirements class 16: /req/general-encoding-rules
Indirect prerequisiteRequirements class 7: /req/uml-simple-encodings
- -

The “TextEncoding” method encodes field values (especially numbers) by their text representation. Special characters provide a way to separate successive values and successive blocks. The ABNF syntax defined in IETF RFC 5234 is used to formalize the encoding rules, and thus all ABNF snippets provided in this section are normative.

- -

Requirement 77

Identifier/req/text-encodings-rules/abnf-syntax-valid
Statement

The encoded values block shall be formatted as defined by the ABNF grammar defined in this clause.

- -

10.3.1.  Separators

- -

Token separators are used between single values and the block separator is used at the end of each block. The block corresponds to one element of the “DataArray” or “DataStream” carrying the “values” element in which the values are encoded. There are no special separators to delimitate nested records, arrays and choices.

- -

Separators shall be chosen so that nothing in the dataset contains the exact same character sequence as the one chosen for token or block separator.

- -

Requirement 78

Identifier/req/text-encodings-rules/separators-valid
Statement

Block and token separators used in the “TextEncoding” method shall be chosen as a sequence of characters that never occur in the data values themselves.

- -

When the attribute “collapseWhiteSpaces” is set to true (its default value), all white space characters surrounding the token and block separators shall be ignored. The BNF grammar for separators is given below:

- -
white-space = %d9 / %d10 / %d13 / %d32 ; TAB, LF, CR or SPACE

token-separator-chars = < Value of the tokenSeparator attribute >

block-separator-chars = < Value of the blockSeparator attribute >

token-separator = [white-space] token-separator-chars [white-space]

block-separator = [white-space] block-separator-chars [white-space]
- - -

White spaces around separators are in fact only allowed when the “collapseWhiteSpaces” attribute is set to ‘true’ (which is the default).

-
- -

10.3.2.  Rules for Scalar Components

- -

The value for a scalar component is encoded as its text representation, following XML schema datatypes conventions.

- -
scalar-value = xs:bool / xs:string / xs:double / xs:int / xs:date / xs:dateTime
- - -

Nil values are included in the stream just like normal scalar values. Since their data type has to match the field data type, there is no special treatment necessary for a decoder or encoder. It is the responsibility of the application to match the data value against the list of registered nil values for a given field in order to detect if it is associated to a nil reason or if it is an actual measurement value.

-
- -

10.3.3.  Rules for Range Components

- -

Range components are encoded as a sequence of two tokens (each one representing a scalar value) separated by a token separator:

- -
min-value = scalar-value

max-value = scalar-value

range-values = min-value token-separator max-value
- -
- -

10.3.4.  Rules for DataRecord and Vector

- -

Values of fields of a “DataRecord” are recursively encoded following rules associated to the type of component used for the field’s description (i.e. scalar, record, array, etc.) and separated by token separators as expressed by the following grammar:

- -
field-count = < Number of fields in the record minus one. Greater or equal to 0 >

any-field-value = scalar-value / range-values / record-values / choice-values / array-values

mandatory-field-value = any-field-value

optional-field-value = (“Y” token-separator any-field-value) / “N”

field-value = mandatory-field-value / optional-field-value

record-values = field-value <field-count>*(token-separator field-value)
- - -

When a field is marked as optional in the definition, the token ‘Y’ or ‘N’ shall be inserted in the data block. When the field value is omitted, the token ‘N’ is inserted alone. When it is included, the token ‘Y’ is inserted followed by the actual field value.

- -

Requirement 79

Identifier/req/text-encodings-rules/optional-field-marker-present
Statement

The ‘Y’ or ‘N’ token shall be inserted in a text encoded data block for all fields that have the “optional” attribute set to ‘true’.

- -

Coordinate values of “Vector” components are encoded with a similar syntax, but a coordinate value can only be scalar and cannot be omitted:

- -
coord-count = < Number of coordinates in the vector minus one. Greater or equal to 0 >

vector-values = scalar-value <coord-count>*(token-separator scalar-value)
- - -

See the following examples:

- - -
- -

10.3.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.

- -
selected-item-name = < Value of the “name” attribute of the item selected >
selected-item-values = scalar-value / range-values / record-values / choice-values / array-values
choice-values = selected-item-name token-separator selected-item-values
- - -

Requirement 80

Identifier/req/text-encodings-rules/choice-selection-marker-valid
Statement

The selected-item-name token shall correspond to the value of the “name” attribute of the “item” property element that represents the selected item.

- -

See example: Datastream with choice (navigation data).

-
- -

10.3.6.  Rules for DataArray and Matrix

- -

Values of each “DataArray” or “Matrix” element are recursively encoded following rules associated to the type of component used for the element type (i.e. scalar, record, array, etc.). Groups of values (or single value in the case of a scalar element type) corresponding to each element are sequentially appended to the data block and separated by token or block separators, depending on the context: When the “DataArray” is the root of the component tree that is being encoded, its elements are separated by block separators, otherwise its elements are separated by token separators.

- -

A “DataArray” or “Matrix” can have a fixed or variable size, which leads to two slightly different syntaxes for encoding values: -array-separator = token-separator / block-separator ; block-separator is only used when the array is the root of the component tree whose values are being encoded.

- -
array-values = fixed-size-array-values / variable-size-array-values
- - -

Fixed size arrays have a size of at least one, and are encoded as defined below:

- -
fixed-element-count = < Number of elements in a fixed size array minus one. Greater or equal to 0 since fixed size is always at least one >

element-values = scalar-value / range-values / record-values / choice-values / array-values

fixed-size-array-values = element-values <fixed-element-count>*(array-separator element-values)
- - -

When a “DataArray” (“Matrix”) is defined as variable size, its size can be 0 and the array size is included as a token in the data block, before the actual array elements values are listed:

- -
variable-element-count = < Number of elements in a variable size array. Greater or equal to 0 since variable size can be 0 for an empty array >

variable-size-array-values = variable-element-count <variable-element-count>*(array-separator element-values)
- - -

See the following examples:

- - -
- -

10.3.7.  Rules for DataStream

- -

Values of “DataStream” elements are encoded as a sequence of tokens in a way similar to how “DataArray” values are encoded. Groups of encoded values corresponding to one element of a “DataStream” are always separated by block separators, while all values within these groups are separated by token separators:

- -
stream-element-count = < Number of elements in a data stream minus one. Greater or equal to 0 since the number of elements in a data stream is always at least one >

stream-values = element-values <stream-element-count>*(block-separator element-values);
- - -

Examples of “DataStream” with “TextEncoding” have already been given in previous sections.

-
- -

10.3.8.  Rules for Geometry

- -

The value of a “Geometry” component is encoded using the WKT format defined in the Simple Feature Access Standard (OGC 06-103r4).

- -

Requirement 81

Identifier/req/text-encodings-rules/geometry-valid
A

The value of a “Geometry” component shall be encoded using the WKT format defined in OGC 06-103r4, clause 7.

-
B

The WKT representation shall be either a “Two-Dimension Geometry WKT” (clause 7.2.2 of OGC 06-103r4) or a “Three-Dimension Geometry WKT” (clause 7.2.3 of OGC 06-103r4). The ‘M’ coordinate shall not be used.

-
C

The number of dimensions of the WKT geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component.

-
D

When a geometry value is included in a text-encoded datastream, the token separator shall not be the comma character (ASCII code 44) to avoid conflicting with commas used inside the WKT representation.

-
- -

See example: Datastream with geometry (feature detection)

-
- -

10.3.9.  Media Types

- -

When array or datastream values are encoded with the Text encoding method and provided standalone (i.e. outside of any wrapper format such as an XML document), one of the following media type identifiers shall be used:

- -
  1. One of text/plain, text/csv, or application/swe+text shall be used as the content-type for files and HTTP reponses.

    -
    • text/csv can be used only when the token separator is set to a single comma ‘,’ and the block separator is set to ‘CRLF’.

      -
    • -
    • text/plain and application/swe+text can be used for any combination of separators.

      -
    • -
    -
  2. -
  3. application/swe+text shall be used for format negotiation between server and client (e.g. when the format is advertised by an API or web service). In particular, this media type shall be used in HTTP Accept and Link headers and in any server response used to advertise support or link to a resource encoded with this format.

    -

    NOTE:    It is recommended that the character set code be correctly appended to these media types if it differs from US-ASCII or UTF-8.

  4. -
- - - -

alternative would be application/vnd.ogc.swe+text

-
-

10.4.  Requirements Class: Binary Encoding Rules

- -

Requirements class 19: Binary Encoding Rules

Identifier/req/binary-encoding-rules
Target typeEncoded Values Instance
Conformance classConformance class A.10: /conf/binary-encoding-rules
PrerequisiteRequirements class 16: /req/general-encoding-rules
Indirect prerequisiteRequirements class 8: /req/uml-advanced-encodings
- -

The “BinaryEncoding” method encodes field values by their binary representation. The ABNF syntax defined in IETF RFC 5234 is used to formalize the encoding rules, and thus all ABNF snippets provided in this section are normative.

- -

Requirement 82

Identifier/req/binary-encoding-rules/abnf-syntax-valid
Statement

The encoded values block shall be formatted as defined by the ABNF grammar defined in this clause.

- -

The encoding rules are similar to those of the “TextEncoding” method except that numerical values are encoded directly as their binary representation and that no separators are used. Separators are not needed because data types have either a fixed size or contain length information (See String encoding).

- -

10.4.1.  Rules for Scalar Components

- -

The value for a scalar component is encoded as its binary representation. This especially applies to numerical values that are encoded directly in binary form in accordance to the selected data type and the value of the “byteOrder” attribute.

- -
scalar-value = < binary value encoded according to data type, byte encoding and byte order specifications >
- - -

The last column of Table 1 in [xsd_binarycomponent_elt] indicates how each data type shall be binary encoded into a low level byte sequence. The actual order of bytes composing a multi-bytes data type depends on the value of the “byteOrder” attribute. The ‘bigEndian’ option indicates that muti-bytes data types are encoded with the most significant byte (MSB) first, while selecting ‘littleEndian’ signifies that encoding is done with the less significant byte (LSB) first. A UTF-8 string is not considered as a multi-byte data type and is always encoded in the same order, as specified by the Unicode Standard.

- -

Requirement 83

Identifier/req/binary-encoding-rules/type-encoding-valid
Statement

Binary data types in Table 1 shall be encoded according to their definition in the description column and the value of the “byteOrder” attribute.

- -

Nil values are included in the stream just like normal scalar values. Since their data type has to match the field data type, there is no special treatment necessary for a decoder or encoder. It is the responsibility of the application to match the data value against the list of registered nil values for a given field in order to detect if it is associated to a nil reason or if it is an actual measurement value.

- -

When the ‘raw’ byte encoding option is selected, bytes resulting from the data type encoding process defined above are inserted in the binary stream directly. This is refered to as ‘raw binary’ encoding. When the ‘base64’ option is selected, each byte resulting from the binary encoding process is also encoded in Base64 before being included in the stream. Scalar values can be Base 64 encoded one by one or by blocks as long as the resulting stream is compatible with requirements of IETF RFC 2045.

- -

Requirement 84

Identifier/req/binary-encoding-rules/base64-translation-applied
Statement

When the ‘base64’ encoding option is selected, binary data shall be encoded with the Base64 technique defined in IETF RFC 2045 Section 6.8: Base64 Content-Transfer-Encoding.

-
- -

10.4.2.  Rules for Range Components

- -

Range components are encoded as a sequence of two binary values (each one representing a scalar value):

- -
min-value = scalar-value

max-value = scalar-value

range-values = min-value max-value
- - -

Values are always included in the same order: The lower bound of the range first, followed by the upper bound.

-
- -

10.4.3.  Rules for DataRecord and Vector

- -

Values of fields of a “DataRecord” are recursively encoded following rules associated to the type of component used as the field’s description (i.e. scalar, record, array, etc.) and appended to the binary block:

- -
field-count = < Number of fields in the record. Greater or equal to 1 >

any-field-value = scalar-value / range-values / record-values / choice-values / array-values / block_values

mandatory-field-value = any-field-value

optional-field-value = (“Y” any-field-value) / “N”

field-value = mandatory-field-value / optional-field-value

record-values = <field-count>*field-values
- - -

When a field is marked as optional in the definition, the 1-byte value ‘Y’ (ASCII code 89) or ‘N’ (ASCII code 78) shall be inserted in the data block. When the field value is omitted, the token ‘N’ is inserted alone. When it is included, the token ‘Y’ is inserted followed by the actual field value.

- -

Requirement 85

Identifier/req/binary-encoding-rules/optional-field-marker-present
Statement

The one byte ASCII character ‘Y’ or ‘N’ shall be inserted in a binary encoded data block for all “DataRecord” fields that have the “optional” attribute set to ‘true’.

- -

Coordinate values of “Vector” components are encoded with a similar syntax, but a coordinate value can only be scalar and cannot be omitted:

- -
coord-count = < Number of coordinates in the vector. Greater or equal to 1 >

vector-values = <coord-count>*scalar-value
- - -

Vector coordinates cannot be optional.

-
- -

10.4.4.  Rules for DataChoice

- -

A “DataChoice” is encoded with the binary method by providing the zero-based index of the selected item before the item values themselves. The index value ranges from 0 for the first choice item to (number_of_items - 1) for the last item.

- -
selected-item-idx = < Index of the item selected >

selected-item-value = scalar-value / range-values / record-values / choice-values / array-values

choice-values = selected-item-idx selected-item-value
- - -

Requirement 86

Identifier/req/binary-encoding-rules/choice-selection-marker-valid
Statement

The value of the selected-item-idx flag shall be the zero-based index of the selected item (within the ordered list of items provided by the choice descriptor) and be encoded on a single unsigned byte.

-
- -

10.4.5.  Rules for DataArray and Matrix

- -

Values of each “DataArray” or “Matrix” element are recursively encoded following rules associated to the type of component used for the element type (i.e. scalar, record, array, etc.). Groups of values (or single value in the case of a scalar element type) corresponding to each element are sequentially appended to the data block. Since a “DataArray” or “Matrix” can have a fixed or variable size, two slightly different syntaxes for encoding values are possible:

- -
array-values = fixed-size-array-values / variable-size-array-values

element-value = scalar-value / range-values / record-values / choice-values / array-values / block_values
- - -

Fixed size arrays have a size of at least one, and are encoded as defined below:

- -
fixed-element-count = < Number of elements in a fixed size array >

fixed-size-array-values = <fixed-element-count>*element-value
- - -

When a “DataArray” (“Matrix”) is defined as variable size, its size can be 0 and the array size is included as a token in the data block, before the actual array elements values are listed:

- -
variable-element-count = < Number of elements in a variable size array >

variable-size-array-values = variable-element-count <variable-element-count>*element-value
- - -

When the array size is 0, only this number is encoded and no element values are included in the data block.

-
- -

10.4.6.  Rules for DataStream

- -

Values of “DataStream” elements are encoded exactly as elements of an array:

- -
stream-element-count = < Number of elements in a data stream >

stream-values = <stream-element-count>*element-value
- - -

A data stream usually contains at least one value but could be empty.

-
- -

10.4.7.  Rules for Geometry

- -

The value of “Geometry” is encoded using the WKB format defined in the Simple Feature Access Standard (OGC 06-103r4).

- -

Requirement 87

Identifier/req/binary-encodings-rules/geometry-valid
A

The value of a “Geometry” component shall be encoded using the WKB format defined in OGC 06-103r4, clause 8.

-
B

The WKB geometry type shall be one of the following types listed in OGC 06-103r4, clause 8.2.3, table 7: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, Point Z, LineString Z, Polygon Z, MultiPoint Z, MultiLineString Z, MultiPolygon Z. Other geometry type codes shall not be used.

-
C

The number of dimensions of the WKB geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component.

-
- -

No specific marker or length information needs to be pre-pended to the binary representation since the WKB format is self descriptive and parsable without knowing the total length ahead of time.

-
- -

10.4.8.  Block encoded components

- -

When block encoding characteristics are also specified in the encoding description, the encryption and/or compression algorithm shall be applied after the binary encoding process described above is completed for the block. Extensions of this standard can define compression and encryption methods that fit the needs of particular communities.

- -

In order to maximize compatibility with existing software, when compressing a binary encoded data stream results in a well known binary format, the corresponding mime type can be used instead of application/octet-stream. For instance video/h264 can be used when the entirety of the dataset (presumably a video stream) is compressed using the H264 video codec.

-
- -

10.4.9.  Media Types

- -

When array or stream values are encoded with the Binary encoding method and provided standalone (i.e. outside of any wrapper format), one of the following media type identifiers shall be used:

- -
  1. One of application/octet-stream or application/swe-binary shall be used as the content-type for files and HTTP responses.

    -
  2. -
  3. application/swe+binary shall be used for format negotiation between server and client (e.g. when the format is advertised by an API or web service). In particular, this media type shall be used in HTTP Accept and Link headers and in any server response used to advertise support or link to a resource encoded with this format.

    -
  4. -
- -

alternative would be application/vnd.ogc.swe-binary

-
-

Annex A
(normative)
Conformance Class Abstract Test Suite

A.1.  Core Conformance Classes

- -

A.1.1.  Conformance Class: Core Concepts

- -

Conformance class A.1

Identifier/conf/core
Requirements classRequirements class 1: /req/core
Target TypeDerived Models and Software Implementations
- -

Abstract test A.1: Core concepts are the base of all derived models

Identifier/conf/core/core-concepts-used
RequirementRequirement 1: /req/core/core-concepts-used
Test purpose

Verify that the target implementation correctly implements the core concepts.

-
Description

Example 1

Inspect the target implementation.

-
- -

Abstract test A.2: A boolean representation consists of a boolean value

Identifier/conf/core/boolean-rep-valid
RequirementRequirement 2: /req/core/boolean-rep-valid
Test purpose

Verify that the target implementation correctly implements the Boolean representation.

-
Description

Example 2

Inspect the target implementation.

-
- -

Abstract test A.3: A categorical representation consists of a token with a code space

Identifier/conf/core/categorical-rep-valid
RequirementRequirement 3: /req/core/categorical-rep-valid
Test purpose

Verify that the target implementation correctly implements the Categorical representation.

-
Description

Example 3

Inspect the target implementation.

-
- -

Abstract test A.4: A continuous numerical representation consists of a number with a scale

Identifier/conf/core/numerical-rep-valid
RequirementRequirement 4: /req/core/numerical-rep-valid
Test purpose

Verify that the target implementation correctly implements the Numerical representation.

-
Description

Example 4

Inspect the target implementation.

-
- -

Abstract test A.5: A countable representation consists of an integer number

Identifier/conf/core/countable-rep-valid
RequirementRequirement 5: /req/core/countable-rep-valid
Test purpose

Verify that the target implementation correctly implements the Countable representation.

-
Description

Example 5

Inspect the target implementation.

-
- -

Abstract test A.6: A textual representation is implemented as a character string

Identifier/conf/core/textual-rep-valid
RequirementRequirement 6: /req/core/textual-rep-valid
Test purpose

Verify that the target implementation correctly implements the Textual representation.

-
Description

Example 6

Inspect the target implementation.

-
- -

Abstract test A.7: A semantic definition of each property shall be provided

Identifier/conf/core/semantics-defined
RequirementRequirement 7: /req/core/semantics-defined
Test purpose

Verify that the target implementation allows attaching a semantic definition to all property representations.

-
Description

Example 7

Inspect the target implementation.

-
- -

Abstract test A.8: References to semantical information shall be resolvable

Identifier/conf/core/semantics-resolvable
RequirementRequirement 8: /req/core/semantics-resolvable
Test purpose

Verify that the target implementation encodes the semantic links in a way that they can be resolved to an actual concept definition.

-
Description

Example 8

Inspect the target implementation.

-
- -

Abstract test A.9: A temporal quantity is associated to a temporal reference frame

Identifier/conf/core/temporal-frame-defined
RequirementRequirement 9: /req/core/temporal-frame-defined
Test purpose

Verify that the target implementation allows providing a temporal reference frame along with any date/time quantity.

-
Description

Example 9

Inspect the target implementation.

-
- -

Abstract test A.10: A spatial quantity is associated to an axis of a spatial reference frame

Identifier/conf/core/spatial-frame-defined
RequirementRequirement 10: /req/core/spatial-frame-defined
Test purpose

Verify that the target implementation allows providing a spatial reference frame and axis along with any quantity that is projected along a spatial dimension.

-
Description

Example 10

Inspect the target implementation.

-
- -

Abstract test A.11: A NIL value maps a reserved value to a reason

Identifier/conf/core/nil-reasons-defined
RequirementRequirement 11: /req/core/nil-reasons-defined
Test purpose

Verify that the target implementation allows providing a reason along with each NIL (reserved) value.

-
Description

Example 11

Inspect the target implementation.

-
- -

Abstract test A.12: Aggregate data types are modeled according to ISO 11404

Identifier/conf/core/aggregates-model-valid
RequirementRequirement 12: /req/core/aggregates-model-valid
Test purpose

Verify that the target implementation models aggregate data types according to ISO 11404 definitions.

-
Description

Example 12

Inspect the target implementation.

-
- -

Abstract test A.13: Encoding methods shall be defined for all possible data structures

Identifier/conf/core/encoding-method-valid
RequirementRequirement 13: /req/core/encoding-method-valid
Test purpose

Verify that the target implementation provides encoding methods for all representations and all implemented data structures.

-
Description

Example 13

Inspect the target implementation.

-
-
-

A.2.  UML Conformance Classes

- -

A.2.1.  Conformance Class: Basic Types and Simple Components UML Packages

- -

Conformance class A.2: Basic Types and Simple Components UML Packages

Identifier/conf/uml-simple-components
Requirements classRequirements class 2: /req/uml-simple-components
PrerequisiteConformance class A.1: /conf/core
Target TypeDerived Models and Software Implementations
- -

Abstract test A.14: Compliance with UML models defined in this package

Identifier/conf/uml-simple-components/package-fully-implemented
RequirementRequirement 14: /req/uml-simple-components/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
Description

Example 1

Inspect the model or software implementation.

-
- -

Abstract test A.15: Compliance with UML models defined in ISO 19103

Identifier/conf/uml-simple-components/iso19103-implemented
RequirementRequirement 15: /req/uml-simple-components/iso19103-implemented
Test purpose

Verify that the target implements all classes imported from ISO 19103 UML packages.

-
Description

Example 2

Inspect the model or software implementation.

-
- -

Abstract test A.16: Compliance with UML models defined in ISO 19108

Identifier/conf/uml-simple-components/iso19108-implemented
RequirementRequirement 16: /req/uml-simple-components/iso19108-implemented
Test purpose

Verify that the target implements all classes imported from ISO 19108 UML packages.

-
Description

Example 3

Inspect the model or software implementation.

-
- -

Abstract test A.17: A definition URI is mandatory on all simple components

Identifier/conf/uml-simple-components/definition-present
RequirementRequirement 17: /req/uml-simple-components/definition-present
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 4

Inspect the model or software implementation.

-
- -

Abstract test A.18: The value of the axisID and axisAbbrev attributes match

Identifier/conf/uml-simple-components/axis-valid
RequirementRequirement 18: /req/uml-simple-components/axis-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 5

Inspect the model or software implementation.

-
- -

Abstract test A.19: The axis ID is always specified on scalar spatial properties

Identifier/conf/uml-simple-components/axis-defined
RequirementRequirement 19: /req/uml-simple-components/axis-defined
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 6

Inspect the model or software implementation.

-
- -

Abstract test A.20: The reference frame is specified on scalar spatial properties not part of a vector

Identifier/conf/uml-simple-components/ref-frame-defined
RequirementRequirement 20: /req/uml-simple-components/ref-frame-defined
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 7

Inspect the model or software implementation.

-
- -

Abstract test A.21: The value of a component satisfies the constraints

Identifier/conf/uml-simple-components/value-constraint-valid
RequirementRequirement 21: /req/uml-simple-components/value-constraint-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 8

Inspect the model or software implementation.

-
- -

Abstract test A.22: All derived simple components have an optional value attribute

Identifier/conf/uml-simple-components/value-attribute-present
RequirementRequirement 22: /req/uml-simple-components/value-attribute-present
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 9

Inspect the model or software implementation.

-
- -

Abstract test A.23: The list of values allowed in a Category component is a subset of the code space

Identifier/conf/uml-simple-components/category-constraint-valid
RequirementRequirement 23: /req/uml-simple-components/category-constraint-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 10

Inspect the model or software implementation.

-
- -

Abstract test A.24: A Category component always specifies a list of possible values

Identifier/conf/uml-simple-components/category-enum-defined
RequirementRequirement 24: /req/uml-simple-components/category-enum-defined
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 11

Inspect the model or software implementation.

-
- -

Abstract test A.25: The value of a Category component is one defined in the code space

Identifier/conf/uml-simple-components/category-value-valid
RequirementRequirement 25: /req/uml-simple-components/category-value-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 12

Inspect the model or software implementation.

-
- -

Abstract test A.26: The temporal reference frame is defined

Identifier/conf/uml-simple-components/time-ref-frame-defined
RequirementRequirement 26: /req/uml-simple-components/time-ref-frame-defined
Test purpose

Verify that the implementation correctly assumes the default value when the attribute is not set.

-
Description

Example 13

Inspect the model or software implementation.

-
- -

Abstract test A.27: The time of reference is expressed relative to the origin of the reference frame

Identifier/conf/uml-simple-components/time-ref-time-valid
RequirementRequirement 27: /req/uml-simple-components/time-ref-time-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 14

Inspect the model or software implementation.

-
- -

Abstract test A.28: The local and reference frames of a Time component are different

Identifier/conf/uml-simple-components/time-local-frame-valid
RequirementRequirement 28: /req/uml-simple-components/time-local-frame-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 15

Inspect the model or software implementation.

-
- -

Abstract test A.29: Values of range components satisfy the same requirements as scalar values

Identifier/conf/uml-simple-components/range-value-valid
RequirementRequirement 29: /req/uml-simple-components/range-value-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 16

Inspect the model or software implementation.

-
- -

Abstract test A.30: CategoryRange components satisfy all requirements of a Category component

Identifier/conf/uml-simple-components/category-range-valid
RequirementRequirement 30: /req/uml-simple-components/category-range-valid
Test purpose

Verify that the target implementation has constraints that enforce the requirement.

-
Description

Example 17

- -

Abstract test A.31: The code space of a CategoryRange component is well-ordered

Identifier/conf/uml-simple-components/category-range-codespace-order
RequirementRequirement 31: /req/uml-simple-components/category-range-codespace-order
Test purpose

Verify that the code space contains elements that have a specific order (either implied or defined).

-
Description

Example 18

Inspect instances generated by the implementation of the “CategoryRange” class, including a codepace, to verify the requirement.

-
- -

Abstract test A.32: TimeRange components satisfy all requirements of the Time class

Identifier/conf/uml-simple-components/time-range-valid
RequirementRequirement 32: /req/uml-simple-components/time-range-valid
Test purpose

Verify that the target implementation has constraints that enforce the requirement.

-
Description

Example 19

- -

Abstract test A.33: The reason attribute is a URI that is resolvable to a definition

Identifier/conf/uml-simple-components/nil-reason-resolvable
RequirementRequirement 33: /req/uml-simple-components/nil-reason-resolvable
Test purpose

Verify that the target implementation allows the value of a NIL reason identifier to be either:

-
  • a well known reason code defined by OGC

    -
  • -
  • a URI that can be resolved to the textual description of a custom reason.

    -
  • -
-
Description

Example 20

Inspect the model or software implementation.

-
- -

Abstract test A.34: Values reserved for NIL reasons are compatible with the component data type

Identifier/conf/uml-simple-components/nil-value-type-coherent
RequirementRequirement 34: /req/uml-simple-components/nil-value-type-coherent
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
Description

Example 21

Inspect the model or software implementation.

-
- -

Abstract test A.35: The scale of constraints is the same as the scale of the component value

Identifier/conf/uml-simple-components/allowed-values-unit-coherent
RequirementRequirement 35: /req/uml-simple-components/allowed-values-unit-coherent
Test purpose

Verify that numerical constraints are expressed with the correct scale.

-
Description

Example 22

Inspect instances generated by the implementation of the “Quantity”, “Count” and “Time” classes, including an “AllowedValues” constraint, to verify the requirement.

-
-
- -

A.2.2.  Conformance Class: Record Components UML Package

- -

Conformance class A.3: Record Components UML Package

Identifier/conf/uml-record-components
Requirements classRequirements class 3: /req/uml-record-components
PrerequisiteConformance class A.2: /conf/uml-simple-components
Target TypeDerived Models and Software Implementations
- -

Abstract test A.36: Compliance with UML models defined in this package

Identifier/conf/uml-record-components/package-fully-implemented
RequirementRequirement 36: /req/uml-record-components/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
Description

Example 1

Inspect the model or software implementation.

-
- -

Abstract test A.37: Each DataRecord field has a unique name

Identifier/conf/uml-record-components/record-field-name-unique
RequirementRequirement 37: /req/uml-record-components/record-field-name-unique
Test purpose

Verify that the implementation of the “DataRecord” class has a constraint that enforces the requirement.

-
Description

Example 2

Inspect the model or software implementation.

-
- -

Abstract test A.38: Each Vector coordinate has a unique name

Identifier/conf/uml-record-components/vector-coord-name-unique
RequirementRequirement 38: /req/uml-record-components/vector-coord-name-unique
Test purpose

Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.

-
Description

Example 3

Inspect the model or software implementation.

-
- -

Abstract test A.39: The reference frame is not specified on individual coordinates of a Vector

Identifier/conf/uml-record-components/vector-component-no-ref-frame
RequirementRequirement 39: /req/uml-record-components/vector-component-no-ref-frame
Test purpose

Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.

-
Description

Example 4

Inspect the model or software implementation. -The “referenceFrame” attribute shall be ommited from all data components used to define coordinates of a “Vector” instance.

-
- -

Abstract test A.40: The axis ID is specified on all coordinates of a Vector

Identifier/conf/uml-record-components/vector-component-axis-defined
RequirementRequirement 40: /req/uml-record-components/vector-component-axis-defined
Test purpose

Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.

-
Description

Example 5

Inspect the model or software implementation. -The “axisID” attribute shall be present on all data components used to define coordinates of a “Vector” instance.

-
- -

Abstract test A.41: The local and reference frames of a Vector component are different

Identifier/conf/uml-record-components/vector-local-frame-valid
RequirementRequirement 41: /req/uml-record-components/vector-local-frame-valid
Test purpose

Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.

-
Description

Example 6

Inspect the model or software implementation.

-
-
- -

A.2.3.  Conformance Class: Choice Components UML Package

- -

Conformance class A.4: Choice Components UML Package

Identifier/conf/uml-choice-components
Requirements classRequirements class 4: /req/uml-choice-components
PrerequisiteConformance class A.2: /conf/uml-simple-components
Target TypeDerived Models and Software Implementations
- -

Abstract test A.42: Compliance with UML models defined in this package

Identifier/conf/uml-choice-components/package-fully-implemented
RequirementRequirement 42: /req/uml-choice-components/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
Description

Example 1

Inspect the model or software implementation.

-
- -

Abstract test A.43: Each DataChoice item has a unique name

Identifier/conf/uml-choice-components/choice-item-name-unique
RequirementRequirement 43: /req/uml-choice-components/choice-item-name-unique
Test purpose

Verify that the implementation of the “DataChoice” class has a constraint that enforces the requirement.

-
Description

Example 2

Inspect the model or software implementation.

-
-
- -

A.2.4.  Conformance Class: Block Components UML Package

- -

Conformance class A.5: Block Components UML Package

Identifier/conf/uml-block-components
Requirements classRequirements class 5: /req/uml-block-components
PrerequisiteConformance class A.2: /conf/uml-simple-components
Target TypeDerived Models and Software Implementations
- -

Abstract test A.44: Compliance with UML models defined in this package

Identifier/conf/uml-block-components/package-fully-implemented
RequirementRequirement 44: /req/uml-block-components/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
Description

Example 1

Inspect the model or software implementation.

-
- -

Abstract test A.45: Components nested in a block component are data descriptors

Identifier/conf/uml-block-components/array-component-no-value
RequirementRequirement 45: /req/uml-block-components/array-component-no-value
Test purpose

Verify that implementations of the block component classes have a constraint that enforces the requirement.

-
Description

Example 2

Inspect the model or software implementation. -Check that the “DataArray”, “Matrix” and “DataStream” classes have the constraint.

-
- -

Abstract test A.46: An encoding method is specified whenever an encoded data block is included

Identifier/conf/uml-block-components/array-values-properly-encoded
RequirementsRequirement 46: /req/uml-block-components/array-values-properly-encoded
Requirement 48: /req/uml-block-components/datastream-array-valid
Test purpose

Verify that the implementation of block component classes have a constraint that enforces the requirement.

-
Description

Example 3

Inspect the model or software implementation. -Check that the “DataArray”, “Matrix” and “DataStream” classes have the constraint. -Inspect instances of these classes generated by the implementation to verify that an encoding method is specified whenever there are encoded values present.

-
- -

Abstract test A.47: Elements of a matrix are of scalar types or nested matrices

Identifier/conf/uml-block-components/matrix-element-type-valid
RequirementRequirement 47: /req/uml-block-components/matrix-element-type-valid
Test purpose

Verify that the implementation of the “Matrix” class has a constraint that enforces the requirement.

-
Description

Example 4

Inspect the model or software implementation.

-
-
- -

A.2.5.  Conformance Class: Simple Encodings UML Package

- -

Conformance class A.6: Simple Encodings UML Package

Identifier/conf/uml-simple-encodings
Requirements classRequirements class 7: /req/uml-simple-encodings
PrerequisiteConformance class A.1: /conf/core
Target TypeDerived Models and Software Implementations
- -

Abstract test A.48: Compliance with UML models defined in this package

Identifier/conf/uml-simple-encodings/package-fully-implemented
RequirementRequirement 52: /req/uml-simple-encodings/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
Description

Example

Inspect the model or software implementation.

-
-
- -

A.2.6.  Conformance Class: Advanced Encodings UML Package

- -

Conformance class A.7: Advanced Encodings UML Package

Identifier/conf/uml-advanced-encodings
Requirements classRequirements class 8: /req/uml-advanced-encodings
PrerequisiteConformance class A.6: /conf/uml-simple-encodings
Target TypeDerived Models and Software Implementations
- -

Abstract test A.49: Compliance with UML models defined in this package

Identifier/conf/uml-advanced-encodings/package-fully-implemented
RequirementRequirement 53: /req/uml-advanced-encodings/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
Description

Example

Inspect the model or software implementation.

-
-
-

A.3.  Datastream Encoding Conformance Classes

- -

A.3.1.  Conformance Class: General Encoding Rules

- -

Conformance class A.8: General Encoding Rules

Identifier/conf/general-encoding-rules
Requirements classRequirements class 16: /req/general-encoding-rules
Target TypeEncoded Values Instance
- -

Abstract test A.50: DataRecord fields and Vector coordinates are encoded recursively

Identifier/conf/general-encoding-rules/record-encoding-rule
RequirementRequirement 65: /req/general-encoding-rules/record-encoding-rule
Description

Example 1

Verify that the sequence of scalar values (obtained after decoding the section of the encoded data block corresponding to the “DataRecord” or “Vector”) includes values for the successive fields/coordinates in the right order.

-
- -

Abstract test A.51: DataChoice selected item is properly encoded

Identifier/conf/general-encoding-rules/choice-encoding-rule
RequirementRequirement 66: /req/general-encoding-rules/choice-encoding-rule
Description

Example 2

Verify that the sequence of scalar values (obtained after decoding the section of the encoded data block corresponding to the “DataChoice”) includes a value identifying the selected item as well as values for the item itself.

-
- -

Abstract test A.52: DataArray elements are encoded recursively

Identifier/conf/general-encoding-rules/array-encoding-rule
RequirementRequirement 67: /req/general-encoding-rules/array-encoding-rule
Description

Example 3

Verify that the sequence of scalar values obtained after decoding the section of the encoded data block corresponding to the “DataArray” includes values for the successive elements of the array.

-
- -

Abstract test A.53: The length of variable size arrays is encoded in the data block

Identifier/conf/general-encoding-rules/array-size-encoding-rule
RequirementRequirement 68: /req/general-encoding-rules/array-size-encoding-rule
Description

Example 4

Verify that the sequence of values obtained after decoding the section of the encoded data block corresponding to a variable size “DataArray” includes a value specifying the size of the array.

-
-
- -

A.3.2.  Conformance Class: Text Encoding Rules

- -

Conformance class A.9: Text Encoding Rules

Identifier/conf/text-encoding-rules
Requirements classRequirements class 18: /req/text-encoding-rules
PrerequisiteConformance class A.8: /conf/general-encoding-rules
Target TypeEncoded Values Instance
- -

Abstract test A.54: Compliance with ABNF grammar

Identifier/conf/text-encoding-rules/abnf-syntax-valid
Requirement/req/text-encoding-rules/abnf-syntax-valid
Description

Example 1

Verify that the text encoded data block is correct with respect to the ABNF grammar corresponding to the particular dataset (The complete ABNF grammar of the dataset should be dynamically constructed from the ABNF snippets provided in the specification).

-
- -

Abstract test A.55: Separator characters are well chosen

Identifier/conf/text-encoding-rules/separators-valid
Requirement/req/text-encoding-rules/separators-valid
Description

Example 2

Verify that the values encoded in the data block never include the reserved separator characters. This can be detected by looking for invalid or superfluous values.

-
- -

Abstract test A.56: Special flags are inserted before optional component values

Identifier/conf/text-encoding-rules/optional-field-marker-present
Requirement/req/text-encoding-rules/optional-field-marker-present
Description

Example 3

Verify that the sequence of values corresponding to the optional field starts with the ‘Y’ or ‘N’ flag.

-
- -

Abstract test A.57: The name of a selected choice item is inserted in the stream

Identifier/conf/text-encoding-rules/choice-selection-marker-valid
Requirement/req/text-encoding-rules/choice-selection-marker-valid
Description

Example 4

Verify that the sequence of values corresponding to the “DataChoice” starts with a character string matching the name of one item of the choice descriptor.

-
-
- -

A.3.3.  Conformance Class: Binary Encoding Rules

- -

Conformance class A.10: Binary Encoding Rules

Identifier/conf/binary-encoding-rules
Requirements classRequirements class 19: /req/binary-encoding-rules
PrerequisiteConformance class A.8: /conf/general-encoding-rules
Target TypeEncoded Values Instance
- -

Abstract test A.58: Compliance with ABNF grammar

Identifier/conf/binary-encoding-rules/abnf-syntax-valid
RequirementRequirement 82: /req/binary-encoding-rules/abnf-syntax-valid
Description

Example 1

Verify that the binary encoded data block is correct with respect to the ABNF grammar of the particular dataset (The complete ABNF grammar of the dataset should be dynamically constructed from the ABNF snippets provided in the specification).

-
- -

Abstract test A.59: Data types are encoded as specified in this standard

Identifier/conf/binary-encoding-rules/type-encoding-valid
RequirementRequirement 83: /req/binary-encoding-rules/type-encoding-valid
Description

Example 2

Verify that valid and realistic scalar values are obtained when the binary data block is parsed by extracting the number of bits specified in the table and decoding the resulting bytes in the order specified by the “byteOrder” attribute. When the encoded data and the encoding parameters are not consistent, abberant values (such as -65502 for a temperature field, etc…) are usually obtained, which can be easily detected.

-
- -

Abstract test A.60: Base64 encoding is implemented as defined by IETF

Identifier/conf/binary-encoding-rules/base64-translation-applied
RequirementRequirement 84: /req/binary-encoding-rules/base64-translation-applied
Description

Example 3

  • Verify that only characters allowed by base64 encoding are used in the encoded data content.

    -
  • -
  • Verify that the data block can be properly parsed after the base64 data is decoded into a raw binary data stream.

    -
  • -
-
- -

Abstract test A.61: Special flags are inserted before optional component values

Identifier/conf/binary-encoding-rules/optional-field-marker-present
RequirementRequirement 85: /req/binary-encoding-rules/optional-field-marker-present
Description

Example 4

  • Verify that any optional field is preceded by the a 1-byte ASCII character with value ‘Y’ or ‘N’.

    -
  • -
  • Verify that the actual field value is only present if the flag has the ‘Y’ value.

    -
  • -
-
- -

Abstract test A.62: The name of a selected choice item is inserted in the stream

Identifier/conf/binary-encoding-rules/choice-selection-marker-valid
RequirementRequirement 86: /req/binary-encoding-rules/choice-selection-marker-valid
Description

Example 5

  • Verify that the sequence of bytes corresponding to the “DataChoice” starts with a byte value that is greater or equal to 0 and less than the total number of items defined in the choice descriptor.

    -
  • -
  • Verify that the parsed index value corresponds to the proper item in the choice descriptor.

    -
  • -
-
-
-

Annex B
(informative)
Examples

B.1.  Text Encoding Rules Examples

- -

B.1.1.  DataArray with inline values (curve)

- -

The following example shows how elements of an array defined as a “DataRecord” can be encoded inline with the text method:

- -
<swe:DataArray definition="http://sweet.jpl.nasa.gov/2.0/mathFunction.owl#Function">
  <swe:description>Measurement error vs. temperature</swe:description>
  <swe:elementCount>
    <swe:Count>
      <swe:value>5</swe:value>
    </swe:Count>
  </swe:elementCount>
  <swe:elementType name="point">
    <swe:DataRecord>
      <swe:label>Error vs. Temperature</swe:label>
      <swe:field name="temp">
        <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/physThermo.owl#Temperature">
          <swe:label>Temperature</swe:label>
          <swe:uom code="Cel"/>
        </swe:Quantity>
      </swe:field>
      <swe:field name="error">
        <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/sciUncertainty.owl#Error">
          <swe:label>Relative Error</swe:label>
          <swe:uom code="%"/>
        </swe:Quantity>
      </swe:field>
    </swe:DataRecord>
  </swe:elementType>
  <swe:encoding>
    <swe:TextEncoding blockSeparator=" " tokenSeparator=","/>
  </swe:encoding>
  <swe:values>0,5 10,2 50,2 80,5 100,15</swe:values>
</swe:DataArray>
- - -

In this example, each element consists of a record of two values. The array element structure also corresponds to one block so that tuples are separated by block separators (here the ‘,’ character). Since the array is of size 5, there are 5 tuples listed sequentially in the data block, each one composed of the two values of the data record separated by the token separator. The pattern is “temp,error temp,error …” since values have to be listed in the same order as the fields.

-
- -

B.1.2.  Datastream with records (weather data)

- -

The following snippet defines a datastream with an element of type record:

- -
<swe:DataStream>
  <swe:label>Weather Data</swe:label>
  <swe:elementType name="weatherData">
    <swe:DataRecord>
      <swe:field name="time">
        <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"
                  referenceFrame="http://www.opengis.net/def/trs/BIPM/0/UTC">
          <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/>
        </swe:Time>
      </swe:field>
      <swe:field name="temp">
        <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature">
          <swe:label>Air Temperature</swe:label>
          <swe:uom code="Cel"/>
        </swe:Quantity >
      </swe:field>
      <swe:field name="press">
        <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_pressure_at_mean_sea_level">
          <swe:label>Atmospheric Pressure</swe:label>
          <swe:uom code="HPa"/>
        </swe:Quantity >
      </swe:field>
       <swe:field name="windSpeed">
        <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_speed">
          <swe:label>Wind Speed</swe:label>
          <swe:uom code="km/h"/>
        </swe:Quantity>
      </swe:field>
      <swe:field name="windDir">
        <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_to_direction">
          <swe:label>Wind Direction</swe:label>
          <swe:uom code="deg"/>
        </swe:Quantity>
      </swe:field>
    </swe:DataRecord>
  </swe:elementType>
  <swe:encoding>
    <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=","/>
  </swe:encoding>
</swe:DataStream>
- - -

The datastream records are encoded using the Text encoding method as shown below:

- -
2023-03-20T15:40:00Z,15.3,1014,3.5,56.0
2023-03-20T15:45:00Z,15.4,1015,5.6,123.0
2023-03-20T15:50:00Z,15.8,1014,13.2,34.0
...
- -
- -

B.1.3.  Datastream with records and optional fields (navigation data)

- -

The following snippet defines a datastream with an element of type record that contains optional fields:

- -
<swe:DataStream>
  <swe:label>Aircraft Navigation</swe:label>
  <swe:elementType name="navData">
    <swe:DataRecord>
      <swe:field name="time">
        <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"
                  referenceFrame="http://www.opengis.net/def/trs/OGC/0/GPS">
          <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/>
        </swe:Time>
      </swe:field>
      <swe:field name="speed">
        <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/humanTransportAir.owl#GroundSpeed">
          <swe:uom code="m/s"/>
        </swe:Quantity >
      </swe:field>
      <swe:field name="location">
        <swe:Vector optional="true" referenceFrame="http://www.opengis.net/def/crs/EPSG/0/4979">
          <swe:coordinate name="lat">
            <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/spaceCoordinates.owl#Latitude" axisID="Lat">
              <swe:uom code="deg"/>
            </swe:Quantity>
          </swe:coordinate>
          <swe:coordinate name="lon">
            <swe:Quantity definition=" http://sweet.jpl.nasa.gov/2.0/spaceCoordinates.owl#Longitude" axisID="Long">
              <swe:uom code="deg"/>
            </swe:Quantity>
          </swe:coordinate>
          <swe:coordinate name="alt">
            <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/spaceExtent.owl#Altitude" axisID="h">
              <swe:uom code="m"/>
            </swe:Quantity>
          </swe:coordinate>
        </swe:Vector>
      </swe:field>
    </swe:DataRecord>
  </swe:elementType>
  <swe:encoding>
    <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=","/>
  </swe:encoding>
</swe:DataStream>
- - -

The datastream records are encoded using the Text encoding method as shown below:

- -
2007-10-23T15:46:12Z,15.3,Y,45.3,-90.5,311
2007-10-23T15:46:22Z,25.3,N
2007-10-23T15:46:32Z,20.6,Y,45.3,-90.6,312
2007-10-23T15:46:52Z,18.9,Y,45.4,-90.6,315
2007-10-23T15:47:02Z,22.3,N
...
- - -

In this example, the whole location “Vector” is marked as optional and thus the coordinate values are only included when the optional flag is set to ‘Y’ in the stream. Field values in each block have to be listed in the same order as the field properties in the record definition thus following the “time,speed,Y,lat,lon,alt” or “time,speed,N” pattern depending on whether or not the location is omitted.

-
- -

B.1.4.  Datastream with choice (navigation data)

- -

This is illustrated by the following example:

- -
<swe:DataStream>
  <swe:elementType name="message">
    <swe:DataChoice>
      <swe:item name="TEMP">
        <swe:DataRecord>
          <swe:label>Temperature Measurement</swe:label>
          <swe:field name="time">
            <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime">
              <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/>
            </swe:Time>
          </swe:field>
          <swe:field name="temp">
            <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature">
              <swe:uom code="Cel"/>
            </swe:Quantity>
          </swe:field>
        </swe:DataRecord>
      </swe:item>
      <swe:item name="WIND">
        <swe:DataRecord>
          <swe:label>Wind Measurement</swe:label>
          <swe:field name="time">
            <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime">
              <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/>
            </swe:Time>
          </swe:field>
          <swe:field name="wind_speed">
            <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_speed">
              <swe:uom code="km/h"/>
            </swe:Quantity>
          </swe:field>
          <swe:field name="wind_dir">
            <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_to_direction">
              <swe:uom code="deg"/>
            </swe:Quantity>
          </swe:field>
        </swe:DataRecord>
      </swe:item>
    </swe:DataChoice>
  </swe:elementType>
  <swe:encoding>
    <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=","/>
  </swe:encoding>
</swe:DataStream>
- - -

The datastream records are encoded using the Text encoding method as shown below:

- -
TEMP,2009-05-23T19:36:15Z,25.5
TEMP,2009-05-23T19:37:15Z,25.6
WIND,2009-05-23T19:37:17Z,56.3,226.3
TEMP,2009-05-23T19:38:15Z,25.5
...
- - -

This datastream interleaves different types of messages separated by the block separator character. The element type is a “DataChoice” which means that each encoded block is composed of the item name ‘TEMP’ or ‘WIND’, followed by values of the item. This example also demonstrates that items of a choice can be of different types and length.

-
- -

B.1.5.  Fixed size 2D array (stress matrix)

- -

The following example illustrates how values of a fixed size 3×3 stress matrix can be text encoded inline:

- -
<swe:Matrix definition="http://sweet.jpl.nasa.gov/2.0/physPressure.owl#Stress">
  <swe:elementCount>
    <swe:Count>
      <swe:value>3</swe:value>
    </swe:Count>
  </swe:elementCount>
  <swe:elementType name="row">
    <swe:Matrix definition="http://sweet.jpl.nasa.gov/2.0/info.owl#Row">
      <swe:elementCount>
        <swe:Count>
          <swe:value>3</swe:value>
        </swe:Count>
      </swe:elementCount>
      <swe:elementType name="coef">
        <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/mathVector.owl#Coordinate">
          <swe:uom code="MPa"/>
        </swe:Quantity>
      </swe:elementType>
    </swe:Matrix>
  </swe:elementType>
  <swe:encoding>
    <swe:TextEncoding blockSeparator=" " tokenSeparator=","/>
  </swe:encoding>
  <swe:values>0.36,0.48,-0.8 -0.8,0.6,0.0 0.48,0.64,0.6</swe:values>
</swe:Matrix>
- - -

Note that elements of the outer array (i.e. a matrix is a special kind of array) are separated by block separators (i.e. each block surrounded by spaces corresponds to one row of the matrix) while the inner array elements are separated by token separators.

-
- -

B.1.6.  Datastream of variable size 1D arrays (profile series)

- -

The following example shows how SWE Common can be used to encode a series of irregular length profiles by using a variable size array:

- -
<swe:DataStream>
  <swe:elementType name="profileData">
    <swe:DataRecord>
      <swe:field name="time">
        <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime">
          <swe:label>Sampling Time</swe:label>
          <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/>
        </swe:Time>
      </swe:field>
      <swe:field name="profilePoints">
        <swe:DataArray definition="http://sweet.jpl.nasa.gov/2.0/info.owl#Profile">
          <swe:elementCount>
            <swe:Count/>
          </swe:elementCount>
          <swe:elementType name="point">
            <swe:DataRecord>
              <swe:field name="depth">
                <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/depth">
                  <swe:label>Sampling Point Vertical Location</swe:label>
                  <swe:uom code="m"/>
                </swe:Quantity>
              </swe:field>
              <swe:field name="salinity">
                <swe:Quantity definition="http://mmisw.org/ont/cf/parameter#sea_water_salinity">
                  <swe:label>Salinity</swe:label>
                  <swe:uom code="[ppth]"/>
                </swe:Quantity>
              </swe:field>
            </swe:DataRecord>
          </swe:elementType>
        </swe:DataArray>
      </swe:field>
    </swe:DataRecord>
  </swe:elementType>
  <swe:encoding>
    <swe:TextEncoding blockSeparator="@@&#10;" tokenSeparator=","/>
  </swe:encoding>
</swe:DataStream>
- - -

The datastream records are encoded using the Text encoding method as shown below:

- -
2005-05-16T21:47:12Z,5,0,45,10,20,20,30,30,35,40,40@@
2005-05-16T22:43:05Z,4,0,45,10,20,20,30,30,35@@
2005-05-16T23:40:52Z,5,0,45,10,20,20,30,30,35,40,40
...
- - -

The example shows data for 3 profiles with a variable number of measurements along the vertical dimension. The number of measurements is indicated in the encoded data block by a number inserted after the timestamp, and before the measurements themselves. Since the array is itself the element of a “DataStream”, elements of the array are separated by token separators.

-
- -

B.1.7.  Datastream with geometry (feature detection)

- -

The following snippet is an example of datastream that contains a geometry. Here, each datastream record represents a feature detected in a video stream, and is composed of a timestamp, a scalar field and the geometry of the geolocated feature.

- -
<swe:DataStream>
  <swe:label>Feature Detections</swe:label>
  <swe:elementType name="detection">
    <swe:DataRecord>
      <swe:field name="time">
        <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"
                  referenceFrame="http://www.opengis.net/def/trs/OGC/0/GPS">
          <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/>
        </swe:Time>
      </swe:field>
      <swe:field name="type">
        <swe:Category definition="http://www.opengis.net/def/featureType">
          <swe:codeSpace xlink:href="http://x-myorg.net/def/VehicleTypes"/>
        </swe:Category>
      </swe:field>
      <swe:field name="geom">
        <swe:Geometry definition="http://www.opengis.net/def/property/OGC/0/SamplingTime" srs="http://www.opengis.net/def/crs/EPSG/0/4326">
          <swe:constraint>
            <swe:AllowedGeometries>
              <swe:geomType>Point</swe:geomType>
              <swe:geomType>Polygon</swe:geomType>
            </swe:AllowedGeometries>
          </swe:constraint>
        </swe:Geometry>
      </swe:field>
    </swe:DataRecord>
  </swe:elementType>
  <swe:encoding>
    <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=";"/>
  </swe:encoding>
</swe:DataStream>
- - -

The datastream records are encoded using the Text encoding method as shown below:

- -
2007-10-23T15:46:12Z;Car;POINT(-86.3254 35.4812)
2007-10-23T15:49:03Z;Truck;POLYGON((-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812))
2007-10-23T15:56:45Z;Bus;POLYGON((-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812))
...
- -
-

B.2.  XML Encoding Rules Examples

- -

The following examples build on the ones provided in the Text Encoding Rules Examples section. The datastream descriptions are kept the same, except that the encoding method would have to be changed to:

- -
<swe:encoding>
  <swe:XMLEncoding/>
</swe:encoding>
- - -

In the following sections, encoded values were kept identical to the ones used in the text encoding section, in order to facilitate comparison.

- -

B.2.1.  Datastream with records (weather data)

- -

This example is based on the same datastream description as the one provided in Annex B.1.2.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -
<swe:values xmlns:ns="http://www.myorg.com/datasets/id">
  <ns:weatherData>
    <ns:time>2023-03-20T15:40:00Z</ns:time>
    <ns:temp>15.3</ns:temp>
    <ns:press>1014</ns:press>
    <ns:windSpeed>3.5</ns:windSpeed>
    <ns:windDir>56.0</ns:windDir>
  </ns:weatherData>
  <ns:weatherData>
    <ns:time>2023-03-20T15:45:00Z</ns:time>
    <ns:temp>15.4</ns:temp>
    <ns:press>1015</ns:press>
    <ns:windSpeed>5.6</ns:windSpeed>
    <ns:windDir>123.0</ns:windDir>
  </ns:weatherData>
  <ns:weatherData>
    <ns:time>2023-03-20T15:50:00Z</ns:time>
    <ns:temp>15.8</ns:temp>
    <ns:press>1014</ns:press>
    <ns:windSpeed>13.2</ns:windSpeed>
    <ns:windDir>34.0</ns:windDir>
  </ns:weatherData>
  ...
</swe:values>
- -
- -

B.2.2.  Datastream with records and optional fields (navigation data)

- -

This example is based on the same datastream description as the one provided in Annex B.1.3.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -
<swe:values xmlns:ns="urn:myorg:dataset:X156822">
  <ns:navData>
    <ns:time>2007-10-23T15:46:12Z</ns:time>
    <ns:speed>15.3</ns:speed>
    <ns:location>
      <ns:lat>45.3</ns:lat>
      <ns:lon>-90.5</ns:lon>
      <ns:alt>311</ns:alt>
    </ns:location>
  </ns:navData>
  <ns:navData>
    <ns:time>2007-10-23T15:46:22Z</ns:time>
    <ns:speed>25.3</ns:speed>
  </ns:navData>
  <ns:navData>
    <ns:time>2007-10-23T15:46:32Z</ns:time>
    <ns:speed>20.6</ns:speed>
    <ns:location>
      <ns:lat>45.3</ns:lat>
      <ns:lon>-90.6</ns:lon>
      <ns:alt>312</ns:alt>
    </ns:location>
  </ns:navData>
  ...
</swe:values>
- - -

Notice that the optional ‘location’ field in the second stream element has been completely omitted.

-
- -

B.2.3.  Datastream with choice (navigation data)

- -

This example is based on the same datastream description as the one provided in Annex B.1.4.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -
<swe:values xmlns:ns="urn:myorg:dataset:DC4578">
  <ns:message>
    <ns:TEMP>
      <ns:time>2009-05-23T19:36:15Z</ns:time>
      <ns:temp>25.5</ns:temp>
    </ns:TEMP>
  </ns:message>
  <ns:message>
    <ns:TEMP>
      <ns:time>2009-05-23T19:37:15Z</ns:time>
      <ns:temp>25.6</ns:temp>
    </ns:TEMP>
  </ns:message>
  <ns:message>
    <ns:WIND>
      <ns:time>2009-05-23T19:37:17Z</ns:time>
      <ns:wind_speed>56.3</ns:wind_speed>
      <ns:wind_dir>226.3</ns:wind_dir>
    </ns:WIND>
  </ns:message>
  <ns:message>
    <ns:TEMP>
      <ns:time>2009-05-23T19:38:15Z</ns:time>
      <ns:temp>25.5</ns:temp>
    </ns:TEMP>
  </ns:message>
  ...
</swe:values>
- -
- -

B.2.4.  Datastream of variable size 1D arrays (profile series)

- -

This example is based on the same datastream description as the one provided in Annex B.1.6.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -
<swe:values xmlns:ns="urn:myorg:dataset:PS3658">
  <ns:profileData>
    <ns:time>2005-05-16T21:47:12Z</ns:time>
    <ns:profilePoints elementCount="5">
      <ns:point>
        <ns:depth>0</ns:depth>
        <ns:salinity>45</ns:salinity>
      </ns:point>
      <ns:point>
        <ns:depth>10</ns:depth>
        <ns:salinity>20</ns:salinity>
      </ns:point>
      <ns:point>
        <ns:depth>20</ns:depth>
        <ns:salinity>30</ns:salinity>
      </ns:point>
      <ns:point>
        <ns:depth>30</ns:depth>
        <ns:salinity>35</ns:salinity>
      </ns:point>
      <ns:point>
        <ns:depth>40</ns:depth>
        <ns:salinity>40</ns:salinity>
      </ns:point>
    </ns:profilePoints>
  </ns:profileData>
  <ns:profileData>
    <ns:time>2005-05-16T22:43:05Z</ns:time>
    <ns:profilePoints elementCount="4">
      <ns:point>
        <ns:depth>0</ns:depth>
        <ns:salinity>45</ns:salinity>
      </ns:point>
      <ns:point>
        <ns:depth>10</ns:depth>
        <ns:salinity>20</ns:salinity>
      </ns:point>
      <ns:point>
        <ns:depth>20</ns:depth>
        <ns:salinity>30</ns:salinity>
      </ns:point>
      <ns:point>
        <ns:depth>30</ns:depth>
        <ns:salinity>35</ns:salinity>
      </ns:point>
    </ns:profilePoints>
  </ns:profileData>
  ...
</swe:values>
- - -

This example shows how the array size is specified on the ‘profilePoints’ element corresponding to each nested array, and how element local names correspond to the “name” attributes of each component’s parent property.

-
- -

B.2.5.  Datastream with geometry (feature detection)

- -

This example is based on the same datastream description as the one provided in Annex B.1.7.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -
<swe:values xmlns:ns="urn:myorg:dataset:X151451" xmlns:gml="http://www.opengis.net/gml/3.2">
  <ns:detection>
    <ns:time>2007-10-23T15:46:12Z</ns:time>
    <ns:type>Car</ns:type>
    <ns:geom>
      <gml:Polygon srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:exterior>
          <gml:LinearRing>
            <gml:posList srsDimension="2">-86.3254 35.4812 -86.3253 35.4812 -86.3253 35.4811 -86.3254 35.4811 -86.3254 35.4812</gml:posList>
          </gml:LinearRing>
        </gml:exterior>
      </gml:Polygon>
    </ns:geom>
  </ns:detection>
  <ns:detection>
    <ns:time>2007-10-23T15:49:03Z</ns:time>
    <ns:type>Truck</ns:type>
    <ns:geom>
      <gml:Polygon srsName="http://www.opengis.net/def/crs/EPSG/0/4326" >
        <gml:exterior>
          <gml:LinearRing>
            <gml:posList srsDimension="2">-86.3254 35.4812 -86.3253 35.4812 -86.3253 35.4811 -86.3254 35.4811 -86.3254 35.4812</gml:posList>
          </gml:LinearRing>
        </gml:exterior>
      </gml:Polygon>
    </ns:geom>
  </ns:detection>
  <ns:detection>
    <ns:time>2007-10-23T15:56:45Z</ns:time>
    <ns:type>Bus</ns:type>
    <ns:geom>
      <gml:Polygon srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
        <gml:exterior>
          <gml:LinearRing>
            <gml:posList srsDimension="2">-86.3254 35.4812 -86.3253 35.4812 -86.3253 35.4811 -86.3254 35.4811 -86.3254 35.4812</gml:posList>
          </gml:LinearRing>
        </gml:exterior>
      </gml:Polygon>
    </ns:geom>
  </ns:detection>
  ...
</swe:values>
- -
-

B.3.  JSON Encoding Rules Examples

- -

The following examples build on the ones provided in the Text Encoding Rules Examples section. The datastream descriptions are kept the same, except that the encoding method would have to be changed to:

- -
<swe:encoding>
  <swe:JSONEncoding/>
</swe:encoding>
- - -

In the following sections, encoded values were kept identical to the ones used in the text encoding section, in order to facilitate comparison.

- -

B.3.1.  DataArray with inline values (curve)

- -

This example is based on the same “DataArray” description as the one provided in Annex B.1.1.

- -

The equivalent JSON description for this “DataArray” is provided below:

- -
{
 
"type": "DataArray",
 
"definition": "http://sweet.jpl.nasa.gov/2.0/mathFunction.owl#Function"
 
"description": "Measurement error vs. temperature",
 
"elementCount": {
   
"type": "Count",
   
"value": 5
 
},
 
"elementType": {
   
"name": "point",
   
"type": "DataRecord",
   
"label": "Error vs. Temperature",
   
"fields": [
     
{
       
"name": "temp",
       
"type": "Quantity",
       
"definition": "http://sweet.jpl.nasa.gov/2.0/physThermo.owl#Temperature",
       
"label": "Temperature",
       
"uom": { "code": "Cel" }
     
},
     
{
       
"name": "error",
       
"type": "Quantity",
       
"definition": "http://sweet.jpl.nasa.gov/2.0/sciUncertainty.owl#Error",
       
"label": "Relative Error",
       
"uom": { "code": "%" }
     
}
   
]
 
},
 
"values": [[0,5], [10,2], [50,2], [80,5], [100,15]]
}
- -
- -

B.3.2.  Datastream with records (weather data)

- -

This example is based on the same datastream description as the one provided in Annex B.1.2.

- -

The following snippet shows how this datastream records are encoded using the JSON encoding method:

- -
[
 
{
   
"time": "2023-03-20T15:40:00Z",
   
"temp": 15.3,
   
"press": 1014,
   
"windSpeed": 3.5,
   
"windDir": 56.0
 
},
 
{
   
"time": "2023-03-20T15:45:00Z",
   
"temp": 15.4,
   
"press": 1015,
   
"windSpeed": 5.6,
   
"windDir": 123.0
 
},
 
{
   
"time": "2023-03-20T15:50:00Z",
   
"temp": 15.8,
   
"press": 1014,
   
"windSpeed": 13.2,
   
"windDir": 34.0
 
},
 
...
]
- -
- -

B.3.3.  Datastream with records and optional fields (navigation data)

- -

This example is based on the same datastream description as the one provided in Annex B.1.3.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -
[
 
{
   
"time": "2007-10-23T15:46:12Z",
   
"speed": 15.3,
   
"location": {
     
"lat": 45.3,
     
"lon": -90.5,
     
"alt": 311
   
}
 
},
 
{
   
"time": "2007-10-23T15:46:22Z",
   
"speed": 25.3,
   
"location": null
 
},
 
{
   
"time": "2007-10-23T15:46:32Z",
   
"speed": 20.6,
   
"location": {
     
"lat": 45.3,
     
"lon": -90.6,
     
"alt": 312
   
}
 
},
 
...
]
- -
- -

B.3.4.  Datastream with choice (navigation data)

- -

This example is based on the same datastream description as the one provided in Annex B.1.4.

- -

The following snippet shows how this datastream records are encoded using the JSON encoding method:

- -
[
 
{
   
"TEMP": {
     
"time": "2009-05-23T19:36:15Z",
     
"temp": 25.5
   
}
 
},
 
{
   
"TEMP": {
     
"time": "2009-05-23T19:37:15Z",
     
"temp": 25.6
   
}
 
},
 
{
   
"WIND": {
     
"time": "2009-05-23T19:37:17Z",
     
"wind_speed": 56.3,
     
"wind_dir": 226.3
   
}
 
},
 
{
   
"TEMP": {
     
"time": "2009-05-23T19:38:15Z",
     
"temp": 25.5
   
}
 
},
 
...
]
- -
- -

B.3.5.  Fixed size 2D array (stress matrix)

- -

This example is based on the same “Matrix” description as the one provided in Annex B.1.5.

- -

The equivalent JSON description for this “Matrix” is provided below:

- -
{
 
"type": "Matrix",
 
"definition": "http://sweet.jpl.nasa.gov/2.0/physPressure.owl#Stress"
 
"elementCount": {
   
"type": "Count",
   
"value": 3
 
},
 
"elementType": {
   
"name": "row",
   
"type": "Matrix",
   
"elementCount": {
     
"type": "Count",
     
"value": 3
   
},
   
"elementType": {
     
"name": "coef",
     
"type": "Quantity",
     
"definition": "http://sweet.jpl.nasa.gov/2.0/mathVector.owl#Coordinate",
     
"uom": { "code": "MPa" }
   
}
 
},
 
"values": [[0.36,0.48,-0.8], [-0.8,0.6,0.0], [0.48,0.64,0.6]]
}
- -
- -

B.3.6.  Datastream of variable size 1D arrays (profile series)

- -

This example is based on the same datastream description as the one provided in Annex B.1.6.

- -

The following snippet shows how this datastream records are encoded using the JSON encoding method:

- -
[
 
{
   
"time": "2005-05-16T21:47:12Z",
   
"profilePoints": [
     
{ "depth": 0, "salinity": 45 },
     
{ "depth": 10, "salinity": 20 },
     
{ "depth": 20, "salinity": 30 },
     
{ "depth": 30, "salinity": 35 },
     
{ "depth": 40, "salinity": 40 }
   
]
 
},
 
{
   
"time": "2005-05-16T22:43:05Z",
   
"profilePoints": [
     
{ "depth": 0, "salinity": 45 },
     
{ "depth": 10, "salinity": 20 },
     
{ "depth": 20, "salinity": 30 },
     
{ "depth": 30, "salinity": 35 }
   
]
 
},
 
{
   
"time": "2005-05-16T23:40:52Z",
   
"profilePoints": [
     
{ "depth": 0, "salinity": 45 },
     
{ "depth": 10, "salinity": 20 },
     
{ "depth": 20, "salinity": 30 },
     
{ "depth": 30, "salinity": 35 },
     
{ "depth": 40, "salinity": 40 }
   
]
 
},
 
...
]
- -
- -

B.3.7.  Datastream with geometry (feature detection)

- -

This example is based on the same datastream description as the one provided in Annex B.1.7.

- -

The following snippet shows how this datastream records are encoded using the JSON encoding method:

- -
[
 
{
   
"time": "2007-10-23T15:46:12Z",
   
"type": "Car",
   
"geom": {
     
"type": "Point",
     
"coordinates": [-86.3254, 35.4812]
   
}
 
},
 
{
   
"time": "2007-10-23T15:49:03Z",
   
"type": "Truck",
   
"geom": {
     
"type": "Polygon",
     
"coordinates": [
       
[-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812]
     
]
   
}
 
},
 
{
   
"time": "2007-10-23T15:56:45Z",
   
"type": "Bus",
   
"geom": {
     
"type": "Polygon",
     
"coordinates": [
       
[-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812]
     
]
   
}
 
},
 
...
]
- -
-

Annex C
(informative)
Relationship with other ISO models

C.1.  Feature model

- -

SWE “Records” can sometimes be seen as feature data from which GML feature representations could be derived. Even if it is true that a SWE “Record” contains values of feature properties, it does not always represent an object like a “Feature” does. The “Record” is simply a logical collection of fields that may be grouped together for a different reason than the fact that they all represent properties of the same object.

- -

The “Feature” model is a higher level model that is used to regroup property values inside the objects that they correspond to, as well as associate a meaning to the object itself.

- -

A good example is a set of weather observations obtained from different sensors that may be grouped into a single “Record” in SWE Common, but which does not constitute a feature in the GIS sense.

-

C.2.  Coverage model

- -

SWE “Arrays” can sometimes be interpreted as coverage range data or grid data. However, SWE data arrays are lower level data types and don’t constitute a “Coverage” in themselves. The “Coverage” model described in OGC Abstract Topic 6 (OGC 07-011) can be used on top of the SWE “Array” model (which only provides means for describing and encoding the data), in order to provide a stronger link between range data and domain definition.

- -

Additionally, sensor descriptions given in SensorML (and thus using the SWE Common model) can be used to define a geo-referencing transformation that can be associated with a coverage via the same model.

-

Annex D
(informative)
Revision History

DateReleaseEditorPrimary clauses modifiedDescription
2008-08-202.0 draftAlexandre RobinAllInitial draft version
2008-10-302.0 draftIngo SimonisAllGeneral revision
2009-10-302.0 draftAlexandre RobinAllDraft candidate standard
2009-11-042.0 draftPeter TaylorClauses 6 and 7Additional examples, minor edits
2009-11-102.0 draftAlexandre RobinAllGeneral revision, added section 8
2010-01-152.0 draftAlexandre RobinAllClarifications in requirements
2010-03-102.0 finalAlexandre RobinAllCorrections following RFC comments
2023-03-072.1 draftAlexandre RobinAllConversion to AsciiDoc / Metanorma
2023-03-082.1 draftAlexandre RobinClauses 7,8,9Removed requirements that were redundant with dependencies
2023-03-162.1 draftAlexandre RobinClause 7,8,9Added Geometry class
2023-03-212.1 draftAlexandre RobinClause 9Added JSON datastream encoding rules
2023-03-212.1 draftAlexandre RobinClause 9Clarified use of media types
2024-04-293.0 draftAlexandre RobinAllRefactored to v3.0, removed XML encoding sections

Bibliography

- -

TODO

NOTE:    The TC has approved Springer LNCS as the official document citation type.

Springer LNCS is widely used in technical and computer science journals and other publications

– Actual References:

[n] Journal: Author Surname, A.: Title. Publication Title. Volume number, Issue number, Pages Used (Year Published)

[1]  OGC: OGC Testbed 12 Annex B: Architecture (2015).

- - - - -
- - - - - - - - - - - - - - - - - - - diff --git a/swecommon/standard/24-014.presentation.xml b/swecommon/standard/24-014.presentation.xml deleted file mode 100644 index 05bda3bf..00000000 --- a/swecommon/standard/24-014.presentation.xml +++ /dev/null @@ -1,10984 +0,0 @@ - - - -OGC SWE Common Data Model Encoding Standard -http://www.opengis.net/doc/DIS/SWE/3.024-01424-014yyyy-mm-ddyyyy-mm-ddyyyy-mm-dd -GeoRobotix, Inc. - -Botts Innovative Research, Inc. - -Cesium GS, Inc. - -52° North Initiative for Geospatial Open Source Software GmbH - -Pelagis Data Solutions - -National Geospatial-Intelligence Agency (NGA) - -Alexandre Robin - -Open Geospatial Consortium -3.0.0en

The primary focus of the SWE Common Data Model is to define and package data in a self-describing and semantically enabled way. The main objective is to achieve interoperability, first at the syntactic level, and later at the semantic level (by using ontologies and probably semantic mediation) so that (sensor) data can be better understood by machines, processed automatically in complex workflows and easily shared between intelligent nodes.

- -

This standard is one of several implementation standards produced under OGC’s Connected Systems activity, and is a revision of content that was previously developed in the context of the Sensor Web Enablement initiative. These common data models are intended to be used in various OGC standards, and in particular, SensorML and OGC API - Connected Systems.

-
draftDraft2024 -Open Geospatial Consortium -ogcdocOGC documenthtmlSWEsensorsensorwebconnected systemsjsonencodingobservationcommandtaskingpropertystandardimplementationtechnical
ScopeSymbols and abbreviated termsAbbreviated termsSymbolsContentsIntroductionPrefaceAbstractAcknowledgementsTerms and definitionsTerms, definitions, symbols and abbreviated termsTerms, definitions and symbolsTerms, definitions and abbreviated termsNormative referencesBibliographyPrefaceClauseAnnexAppendixcontinued

No terms and definitions are listed in this document.

-

This document uses the terms defined in OGC Policy Directive 49, which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this document and OGC documents do not use the equivalent phrases in the ISO/IEC Directives, Part 2.

-

This document also uses terms defined in the OGC Standard for Modular specifications (OGC 08-131r3), also known as the 'ModSpec'. The definitions of terms such as standard, specification, requirement, and conformance test are provided in the ModSpec.

-

For the purposes of this document, the following additional terms and definitions apply.

-
The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.There are no normative references in this document.

This document uses the terms defined in OGC Policy Directive 49, which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this document and OGC documents do not use the equivalent phrases in the ISO/IEC Directives, Part 2.

-

This document also uses terms defined in the OGC Standard for Modular specifications (OGC 08-131r3), also known as the 'ModSpec'. The definitions of terms such as standard, specification, requirement, and conformance test are provided in the ModSpec.

-

For the purposes of this document, the terms and definitions given in % additionally apply.

-

This document uses the terms defined in OGC Policy Directive 49, which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this document and OGC documents do not use the equivalent phrases in the ISO/IEC Directives, Part 2.

-

This document also uses terms defined in the OGC Standard for Modular specifications (OGC 08-131r3), also known as the 'ModSpec'. The definitions of terms such as standard, specification, requirement, and conformance test are provided in the ModSpec.

-

For the purposes of this document, the terms and definitions given in % and the following additionally apply.

-
(%)%1 and %2%1, and %2%1 or %2%1, or %2%1 and %2%1 or %2%1 from %2%1 to %2%1, %2%1 %2spellout-ordinalNOTENoteNote % to entryListDefinition ListFigureDiagramFormulaFormulaTableRequirementRecommendationPermissionBoxRecommendation testRequirement testPermission testRecommendations classRequirements classPermissions classAbstract testConformance classKeyExampleExamplewherewhereWhole of textdraftinformativenormativemodifiedadaptedDEPRECATEDSOURCEandAll Parts%Spellout editioneditionversionList of FiguresList of TablesList of RecommendationsJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecemberObligationDangerWarningCautionImportantSafety PrecautionsEditorial NoteSectionClausePartParagraphChapterPageTableAnnexFigureExampleNoteFormulamfncommonsgdualplpreppartadjadvnounverbdeprecatessupersedesnarrowerbroaderequivalentcomparecontrastseesee alsoClauseClausesAnnexAnnexesAppendixAppendixesNoteNotesNote % to entryNotes % to entryListListsFigureFiguresFormulaFormulasTableTablesRequirementRequirementsRecommendationRecommendationsPermissionPermissionsExampleExamplesPartPartsSectionSectionsParagraphParagraphsChapterChaptersPagePagesADMITTEDSubmittersContributorsTable of FiguresNo security considerations have been made for this document.Submission DateApproval DatePublication DateAuthorEditorContributorDraftWork Item DraftCandidate SWG DraftCandidate OAB Review DraftCandidate Public RFC DraftCandidate TC Vote DraftApprovedPublishedDeprecatedRescindedRetiredenLatn
Table
_c783dac9-3b6e-4a0f-8f06-94547924f0fe/req/core
_88c2dfd0-84fc-4ecc-85ac-237ab6d734ff/req/core/core-concepts-used
_f8620212-5b3c-4e04-9d42-d8bd09d59a82/req/core/boolean-rep-valid
_4240aa38-8d6a-4103-86ea-cc6648ff1f18/req/core/categorical-rep-valid
_eab9d5ff-ab46-456a-a4b8-ef6d53c30cd1/req/core/numerical-rep-valid
_7631e6f0-4823-448d-8ab0-54ab9802de11/req/core/countable-rep-valid
_0882f36b-35ef-46cf-93c3-9323b065a80f/req/core/textual-rep-valid
_b2e0c151-fdf0-4ee3-b01f-d8590839c349/req/core/semantics-defined
_69b6e18d-40b6-43c7-98f2-edf5c2565198/req/core/semantics-resolvable
_3743b2a0-3fee-4e97-98b9-6d35478ac23a/req/core/temporal-frame-defined
_94dcb6c4-8d28-4484-a2cf-d6a42b16e3d5/req/core/spatial-frame-defined
_a2d4276d-f14d-4529-8817-2917aa3d37fc/req/core/nil-reasons-defined
_1d82d6d3-0ae8-4594-8a38-6de9e0394035/req/core/aggregates-model-valid
_ae68587d-81a7-46f6-823f-3b28e20f0f55/req/core/encoding-method-valid
_93d9c0ea-a29c-4fab-815a-4e42b3251ee6/req/uml-simple-components
_1a5c5ad9-f674-42e4-951f-fd5c40093863/req/uml-simple-components/package-fully-implemented
_9cdb685a-704f-491c-a922-9631f674f977/req/uml-simple-components/iso19103-implemented
_8ae269f7-e9af-45d9-b9f0-b5c6b196f265/req/uml-simple-components/iso19108-implemented
_fef89ebe-4efa-4e94-b65f-123160405fe6/req/uml-simple-components/definition-present
_13ff592e-79f7-47b3-a537-95f13c348eb1/req/uml-simple-components/axis-valid
_98ea2092-8182-4ba0-967a-34d1b0394880/req/uml-simple-components/axis-defined
_26f529b1-f31d-48dc-8adc-975c3c610107/req/uml-simple-components/ref-frame-defined
_b2c59889-26de-49f0-9feb-04bf692d1664/req/uml-simple-components/value-constraint-valid
_6254611d-a8e4-4e31-8484-2277c169bd0b/req/uml-simple-components/value-attribute-present
_f426ada1-24ba-4db5-9053-0fc61be0252b/req/uml-simple-components/category-constraint-valid
_63f8b65c-d1ad-4db7-8801-45cd3733b03f/req/uml-simple-components/category-enum-defined
_9fe57107-34bb-4ce0-a717-a3a32392627b/req/uml-simple-components/category-value-valid
_4dcc1c14-2e3f-4f17-9c4f-4cd5b77dc068/req/uml-simple-components/time-ref-frame-defined
_64f496e7-0b53-4db8-b8b5-5aec8a087efd/req/uml-simple-components/time-ref-time-valid
_0cc1bdb2-0bd5-4d35-9bd9-db3426f3bd7b/req/uml-simple-components/time-local-frame-valid
_6c8a5454-a826-4c71-9c99-7eed8879e98c/req/uml-simple-components/range-value-valid
_ddd05e78-0c48-423b-92a8-8f1d48bb8691/req/uml-simple-components/category-range-valid
_d7550e09-a2e0-4202-8c7f-c2f15de40bd7/req/uml-simple-components/category-range-codespace-order
_4d79c5e6-fd95-49c0-9f65-bec40869a9dd/req/uml-simple-components/time-range-valid
_4334e486-cf19-4afe-8c78-0c08fc195f8e/req/uml-simple-components/nil-reason-resolvable
_f964331c-8aa5-4c19-8c34-82c17cd99144/req/uml-simple-components/nil-value-type-coherent
_ca13f829-dc08-4258-8fcf-23091663547c/req/uml-simple-components/allowed-values-unit-coherent
_aeb99422-f2a8-4fcc-b573-b6faa5792d40/req/uml-record-components
_c0d2fb82-bb35-490e-ad51-d8b7c5ffd788/req/uml-record-components/package-fully-implemented
_e3f0a203-b9bd-4438-9d0c-1cff58e841b2/req/uml-record-components/record-field-name-unique
_6128cc09-457c-43a6-a569-119186a88c8e/req/uml-record-components/vector-coord-name-unique
_dadf02b9-d9b9-4b52-b81b-f64179f51bdc/req/uml-record-components/vector-component-no-ref-frame
_cea0b66e-64e4-4ffd-ab88-27578ffb8b97/req/uml-record-components/vector-component-axis-defined
_ab5d81c9-474b-4c17-8523-850bb60a5e54/req/uml-record-components/vector-local-frame-valid
_bdea6f24-1405-4c04-844a-3493d71297b4/req/uml-choice-components
_9a5afaf6-931b-43d3-9f4c-9ecb01fa4ac3/req/uml-choice-components/package-fully-implemented
_60142650-932c-4494-add8-9dbc3184060c/req/uml-choice-components/choice-item-name-unique
_5b87431f-e587-43e2-bf19-7ba1ff71d7d1/req/uml-block-components
_a7009d09-dd93-46c9-a65f-25a307c3dce4/req/uml-block-components/package-fully-implemented
_fc63c921-694b-4080-9d89-d2c59b98691e/req/uml-block-components/array-component-no-value
_8299a5db-fa0b-4328-8f69-6346e76b65a4/req/uml-block-components/array-values-properly-encoded
_54a0e65c-4347-4ebc-b7cc-04055b2b1928/req/uml-block-components/matrix-element-type-valid
_24a3ba69-97e1-42de-a54f-d30718c8520c/req/uml-block-components/datastream-array-valid
_485d508b-cb4b-4ab0-a41b-ff6d87bf8569/req/uml-geom-components
_b8f8c1e9-094f-4cff-85fb-9c9ff34f1f05/req/uml-geom-components/package-fully-implemented
_0e74b495-88e9-49b4-a024-6a4a88627fd7/req/uml-geom-components/srs-valid
_47d85457-1e3e-4cb5-9871-18032d49b970/req/uml-geom-components/geom-value-valid
_b137f877-f72d-4c70-9c12-a60fec7a5ed7/req/uml-simple-encodings
_e8e82cf0-0045-43ac-8876-db1bdd684b88/req/uml-simple-encodings/package-fully-implemented
_bc0a786e-33c7-4d6b-9b3f-04dd03442129/req/uml-advanced-encodings
_fffd554b-1cda-4108-b38e-82fc48979360/req/uml-advanced-encodings/package-fully-implemented
_a8bc3622-f2c8-488f-9612-dce609a8e930/req/json-simple-components
_1ffa4ccc-b6a6-4a86-b2e7-4ca6cca9468b/req/json-simple-components/schema-valid
_7a79fa83-2ffe-4df9-8569-2fa2642a13f0/req/json-simple-components/special-numerical-values
_7d299258-3353-427f-8e07-d632371689b8/req/json-simple-components/definition-resolvable
_1e58f94d-af1e-44aa-89f2-d7bf17924ba0/req/json-simple-components/inline-value-constraint-valid
_44472ff4-cc49-4025-b374-f4700a518476/req/json-simple-components/ucum-code-used
_dc742332-e6f6-43be-aa50-99e0062aae09/req/json-simple-components/iso8601-uom-used
_c7aa1491-b30d-49de-9c25-0a725374ab4f/req/json-record-components
_39e495de-1a08-4d91-9cb6-3c5f500cb2dd/req/json-choice-components
_b3aba94f-0f74-4685-8471-bb7c515b58e9/req/json-block-components
_8fc2ad9d-ce4c-40d8-b5ab-297b22bcce8c/req/json-geom-components
_689f3fd1-2048-4f2b-8f7f-d111aa19d2a6/req/json-simple-encodings
_61ecb26d-a1cb-487a-bf61-a317e09d59ea/req/json-advanced-encodings
_0315ad14-c240-4c89-9928-4ec581b16fb8/req/xsd-advanced-encodings/ref-syntax-valid
_4b65d294-16d9-4c4e-9f76-b5510b62f162/req/xsd-advanced-encodings/scalar-ref-component-valid
_6a5ebfb9-2ec1-4ab2-9791-7e01eb73ae49/req/xsd-advanced-encodings/datatype-valid
_b2ad778c-c633-41ee-869b-64a6e44f973c/req/xsd-advanced-encodings/datatype-compatible
_7655ef6a-f6d5-4d43-baa3-7a12ad0ea707/req/xsd-advanced-encodings/no-datatype-length
_355d1fef-8a6b-4878-9b5e-54dfae36f499/req/general-encoding-rules
_89fc3a84-6279-4132-9630-fb59f3a1ff2e/req/general-encoding-rules/record-encoding-rule
_e60d1a52-437b-4f4b-b48d-ce5fb5400a24/req/general-encoding-rules/choice-encoding-rule
_cc90cb43-b123-4376-9386-ab59b2f34d4b/req/general-encoding-rules/array-encoding-rule
_867a66a0-1550-4e6d-baaa-232197bd9ac7/req/general-encoding-rules/array-size-encoding-rule
_9d547d80-5023-4749-b546-48c2be01e830/req/json-encoding-rules
_f7931ef7-61f3-4f8e-86c3-b3e37b36a35d/req/json-encodings-rules/json-valid
_b791f15f-e2d8-419e-abcc-c40d03ad999f/req/json-encoding-rules/scalar-value-valid
_01fae0ae-fb26-4424-8d57-0695599de979/req/json-encoding-rules/range-value-valid
_0ea0a97a-06dc-4d61-8f41-455473681b75/req/json-encoding-rules/record-object-valid
_cb1420b9-20ac-42f8-b02b-933064665c0e/req/json-encoding-rules/vector-object-valid
_45d3463d-3906-4eac-8925-8c895a3f457b/req/json-encoding-rules/choice-object-valid
_e22e35dd-587d-433d-8c30-bf9238a07c86/req/json-encoding-rules/array-values-valid
_9504cc66-103d-44ce-bd91-7094bc649dad/req/json-encodings-rules/geometry-valid
_642738e4-c199-4b13-b412-ce2c6179a4f2/req/text-encoding-rules
_1d3ef339-3c2b-48af-b362-04e79a37c63b/req/text-encodings-rules/abnf-syntax-valid
_7ba0fee3-3cd9-4fc4-9cf7-8076ba9850ae/req/text-encodings-rules/separators-valid
_3621ff12-3408-4556-975f-2fd6bd59862e/req/text-encodings-rules/optional-field-marker-present
_f90d70e7-166e-4876-81ad-1fb269ec79e6/req/text-encodings-rules/choice-selection-marker-valid
_d1932a67-cdd1-40e4-a4d2-7fe4aa54341b/req/text-encodings-rules/geometry-valid
_3a14423c-bd56-4664-bcd3-d9a197f8f644/req/binary-encoding-rules
_bef43c29-cb7d-4a45-861b-fcc28897581d/req/binary-encoding-rules/abnf-syntax-valid
_df6eaa05-0f3e-4ff2-96bc-e9a01c48449c/req/binary-encoding-rules/type-encoding-valid
_d0a6761e-e35a-442c-95e8-48239a2d28f7/req/binary-encoding-rules/base64-translation-applied
_38c66334-c281-47b2-8eaf-99df349d5fd7/req/binary-encoding-rules/optional-field-marker-present
_0a436829-ca39-468e-b6bd-ddf5175fa59d/req/binary-encoding-rules/choice-selection-marker-valid
_daf6760b-767e-43de-8970-a811cd101bc3/req/binary-encodings-rules/geometry-valid
_e293b62e-2f96-41a8-bb7c-649f8996d416/conf/core
_eb4c4842-54aa-4a11-a560-4f524abc11cb/conf/core/core-concepts-used
_e2ff1447-eaac-4132-ab90-0f5e3294828b/conf/core/boolean-rep-valid
_6cd04c8c-0ace-4275-b5b1-635dd81ae9cd/conf/core/categorical-rep-valid
_88e8af44-fadb-4820-a6f5-68494e86ef2a/conf/core/numerical-rep-valid
_1eef2b04-fb13-4bf2-a34d-ace361f6409c/conf/core/countable-rep-valid
_b294a13b-fc57-4c8d-8a21-eee14e10f9b0/conf/core/textual-rep-valid
_ad75403e-dc41-488e-ab57-17eba9b2718d/conf/core/semantics-defined
_b42d0d27-71a7-40af-a5b1-c53450d15462/conf/core/semantics-resolvable
_be7488de-d4ef-4671-a905-a7dd439105d5/conf/core/temporal-frame-defined
_4db3dc0b-3fc3-4425-9a9b-91175bd90635/conf/core/spatial-frame-defined
_9fcdfedb-3af2-4883-9d1f-649e14fd1bc0/conf/core/nil-reasons-defined
_5cb4b894-d405-4881-905a-322cb5b69315/conf/core/aggregates-model-valid
_c6fb05a1-a9de-4dc6-a2f6-138f4a17bece/conf/core/encoding-method-valid
_c8bdfb37-b249-40f1-96ca-62396b0a28da/conf/uml-simple-components
_9f99c3b0-4926-44fe-9b3d-2d9f0ead6855/conf/uml-simple-components/package-fully-implemented
_76d2eb8e-f7fa-42c0-b9c9-5b1ff0ed1077/conf/uml-simple-components/iso19103-implemented
_4c850ad4-c9f2-412f-a097-4551cd1696dd/conf/uml-simple-components/iso19108-implemented
_2ed4af97-68bd-458a-8e11-5e44a329a44b/conf/uml-simple-components/definition-present
_e80fc58b-da84-4ea0-9f7e-95cab0cf293c/conf/uml-simple-components/axis-valid
_f1a7ede2-8107-4253-884c-7c48fc01d169/conf/uml-simple-components/axis-defined
_5a5f66e8-aa69-4e04-bdaa-166110ba9316/conf/uml-simple-components/ref-frame-defined
_d633efe9-d718-4df7-93c6-897d54b644b7/conf/uml-simple-components/value-constraint-valid
_fb3af4c8-81d5-4897-8e88-bd2a2456714c/conf/uml-simple-components/value-attribute-present
_82f39c2c-b858-4e7e-ad40-d77333aa28b0/conf/uml-simple-components/category-constraint-valid
_a6119fb5-be85-4604-a22e-18f09a36001e/conf/uml-simple-components/category-enum-defined
_58d2dd0d-bb77-4e90-941f-4d5e7dc9c519/conf/uml-simple-components/category-value-valid
_aff2c624-40f5-4c26-8987-f272d16febd8/conf/uml-simple-components/time-ref-frame-defined
_f0a50b34-acb0-46fd-aa7d-bc75314ff29d/conf/uml-simple-components/time-ref-time-valid
_3474e1a9-fd5d-4263-a896-ed28f2d02f26/conf/uml-simple-components/time-local-frame-valid
_30017d56-699a-4218-a95e-fe7efa9bd9ca/conf/uml-simple-components/range-value-valid
_8cd09a4f-5a87-4d6d-82ff-e7fa827ac0d5/conf/uml-simple-components/category-range-valid
_da68f495-2de4-4ca2-bb15-cd215f8db9f7/conf/uml-simple-components/category-range-codespace-order
_7b8c8ad0-2c99-44d9-9001-6b33437e3ac4/conf/uml-simple-components/time-range-valid
_189ea1fe-cbf0-4430-9636-046fe0c5ee9e/conf/uml-simple-components/nil-reason-resolvable
_d87ed7ab-689d-448b-ae3c-cd71f0f69ef5/conf/uml-simple-components/nil-value-type-coherent
_1f657bd1-2e2f-4c13-8120-cc421b8b859c/conf/uml-simple-components/allowed-values-unit-coherent
_0a98c237-f17f-4409-8eed-1057b8fd1ffd/conf/uml-record-components
_390a8a16-c216-4ec5-9ea6-85536d52b939/conf/uml-record-components/package-fully-implemented
_94380548-04b7-40ff-9e21-251abbb7927c/conf/uml-record-components/record-field-name-unique
_a823b131-da50-45f5-a899-863aa67e571d/conf/uml-record-components/vector-coord-name-unique
_1f77657f-ff17-42b6-bd7c-1ccfc8c66eea/conf/uml-record-components/vector-component-no-ref-frame
_9219bee8-129c-42e3-a2c6-4f980e80e993/conf/uml-record-components/vector-component-axis-defined
_d39028da-521c-4ae2-942c-4d4b68f6e108/conf/uml-record-components/vector-local-frame-valid
_8596ac1f-e4f7-4783-a50f-978ce812741c/conf/uml-choice-components
_c1644a67-536d-4443-938c-6bc770d6e7ea/conf/uml-choice-components/package-fully-implemented
_bdb0dc0d-08e5-49b1-abb2-e2ec31d7db04/conf/uml-choice-components/choice-item-name-unique
_3b772f72-e7f4-4729-872f-0099b4d42cfe/conf/uml-block-components
_48c143b6-00b3-474c-bf39-da34dcfdddf9/conf/uml-block-components/package-fully-implemented
_df3e2226-ba68-47cc-8657-4ed58c088061/conf/uml-block-components/array-component-no-value
_b8eaa866-e1d4-45c8-a358-9b3f20fccf21/conf/uml-block-components/array-values-properly-encoded
_47c41a1d-0343-4b6a-8f5f-557fd3bd3abc/conf/uml-block-components/matrix-element-type-valid
_7e6ec960-6b4b-4f28-8d11-7c3ab0097a18/conf/uml-simple-encodings
_9ca1e6b1-3968-4a9b-aaae-0a06c7bed739/conf/uml-simple-encodings/package-fully-implemented
_cd4f0a4a-1a3b-4189-8ec0-366e54c88d75/conf/uml-advanced-encodings
_1b1770cf-24eb-4266-bb6d-07791893ca64/conf/uml-advanced-encodings/package-fully-implemented
_cb106cc9-f555-4be3-a529-afec7a0974f0/conf/general-encoding-rules
_c076053c-228e-40c0-8b15-f3f4827af898/conf/general-encoding-rules/record-encoding-rule
_a412618e-3411-4b17-a5a7-0ff999c71d55/conf/general-encoding-rules/choice-encoding-rule
_e2d85f61-db1a-43d7-be63-cb468c3b2e64/conf/general-encoding-rules/array-encoding-rule
_4f35f829-cd68-4f8b-b40d-62715ccb831a/conf/general-encoding-rules/array-size-encoding-rule
_18767d78-4f8a-474e-80f5-8ee1f9b6d768/conf/text-encoding-rules
_f07e06af-668c-4e14-a3b6-d7545b81d3ca/conf/text-encoding-rules/abnf-syntax-valid
_aa68d1a7-f5ef-41bb-a66d-198786798afe/conf/text-encoding-rules/separators-valid
_3bc64378-83f2-4d9c-a738-e9bd52cc37cc/conf/text-encoding-rules/optional-field-marker-present
_3ecaf503-5dc7-49ac-8c4a-9c4b3bab2aa1/conf/text-encoding-rules/choice-selection-marker-valid
_e83a02ca-9b14-4552-a6ac-9b74127c1d02/conf/binary-encoding-rules
_fdaa758c-ed4b-4453-9c56-fda1b10b45e4/conf/binary-encoding-rules/abnf-syntax-valid
_563b222b-2d5c-4050-a1cb-15d7fd36c689/conf/binary-encoding-rules/type-encoding-valid
_c3ca1b98-9e1f-49bb-bf58-1afd7a7a9afa/conf/binary-encoding-rules/base64-translation-applied
_4bf64024-f7f6-4aa3-80a7-9b8128f0b2ac/conf/binary-encoding-rules/optional-field-marker-present
_dc03e74b-3d73-43dd-a43a-0f1b0f5f7c7c/conf/binary-encoding-rules/choice-selection-marker-valid
TOC Heading Levels2HTML TOC Heading Levels2DOC TOC Heading Levels2 - -OGC SWE Common Data Model Encoding Standard -http://www.opengis.net/doc/DIS/SWE/3.024-01424-014yyyy-mm-ddyyyy-mm-ddyyyy-mm-dd -GeoRobotix, Inc. - -Botts Innovative Research, Inc. - -Cesium GS, Inc. - -52° North Initiative for Geospatial Open Source Software GmbH - -Pelagis Data Solutions - -National Geospatial-Intelligence Agency (NGA) - -Alexandre Robin - -Open Geospatial Consortium -3.0.0enLatnThe primary focus of the SWE Common Data Model is to define and package data in a self-describing and semantically enabled way. The main objective is to achieve interoperability, first at the syntactic level, and later at the semantic level (by using ontologies and probably semantic mediation) so that (sensor) data can be better understood by machines, processed automatically in complex workflows and easily shared between intelligent nodes. - -This standard is one of several implementation standards produced under OGC’s Connected Systems activity, and is a revision of content that was previously developed in the context of the Sensor Web Enablement initiative. These common data models are intended to be used in various OGC standards, and in particular, SensorML and OGC API - Connected Systems. -draft2024 -Open Geospatial Consortium -ogcdocOGC documenthtmlSWEsensorsensorwebconnected systemsjsonencodingobservationcommandtaskingpropertystandardimplementationtechnical_c783dac9-3b6e-4a0f-8f06-94547924f0fe/req/core_88c2dfd0-84fc-4ecc-85ac-237ab6d734ff/req/core/core-concepts-used_f8620212-5b3c-4e04-9d42-d8bd09d59a82/req/core/boolean-rep-valid_4240aa38-8d6a-4103-86ea-cc6648ff1f18/req/core/categorical-rep-valid_eab9d5ff-ab46-456a-a4b8-ef6d53c30cd1/req/core/numerical-rep-valid_7631e6f0-4823-448d-8ab0-54ab9802de11/req/core/countable-rep-valid_0882f36b-35ef-46cf-93c3-9323b065a80f/req/core/textual-rep-valid_b2e0c151-fdf0-4ee3-b01f-d8590839c349/req/core/semantics-defined_69b6e18d-40b6-43c7-98f2-edf5c2565198/req/core/semantics-resolvable_3743b2a0-3fee-4e97-98b9-6d35478ac23a/req/core/temporal-frame-defined_94dcb6c4-8d28-4484-a2cf-d6a42b16e3d5/req/core/spatial-frame-defined_a2d4276d-f14d-4529-8817-2917aa3d37fc/req/core/nil-reasons-defined_1d82d6d3-0ae8-4594-8a38-6de9e0394035/req/core/aggregates-model-valid_ae68587d-81a7-46f6-823f-3b28e20f0f55/req/core/encoding-method-valid_93d9c0ea-a29c-4fab-815a-4e42b3251ee6/req/uml-simple-components_1a5c5ad9-f674-42e4-951f-fd5c40093863/req/uml-simple-components/package-fully-implemented_9cdb685a-704f-491c-a922-9631f674f977/req/uml-simple-components/iso19103-implemented_8ae269f7-e9af-45d9-b9f0-b5c6b196f265/req/uml-simple-components/iso19108-implemented_fef89ebe-4efa-4e94-b65f-123160405fe6/req/uml-simple-components/definition-present_13ff592e-79f7-47b3-a537-95f13c348eb1/req/uml-simple-components/axis-valid_98ea2092-8182-4ba0-967a-34d1b0394880/req/uml-simple-components/axis-defined_26f529b1-f31d-48dc-8adc-975c3c610107/req/uml-simple-components/ref-frame-defined_b2c59889-26de-49f0-9feb-04bf692d1664/req/uml-simple-components/value-constraint-valid_6254611d-a8e4-4e31-8484-2277c169bd0b/req/uml-simple-components/value-attribute-present_f426ada1-24ba-4db5-9053-0fc61be0252b/req/uml-simple-components/category-constraint-valid_63f8b65c-d1ad-4db7-8801-45cd3733b03f/req/uml-simple-components/category-enum-defined_9fe57107-34bb-4ce0-a717-a3a32392627b/req/uml-simple-components/category-value-valid_4dcc1c14-2e3f-4f17-9c4f-4cd5b77dc068/req/uml-simple-components/time-ref-frame-defined_64f496e7-0b53-4db8-b8b5-5aec8a087efd/req/uml-simple-components/time-ref-time-valid_0cc1bdb2-0bd5-4d35-9bd9-db3426f3bd7b/req/uml-simple-components/time-local-frame-valid_6c8a5454-a826-4c71-9c99-7eed8879e98c/req/uml-simple-components/range-value-valid_ddd05e78-0c48-423b-92a8-8f1d48bb8691/req/uml-simple-components/category-range-valid_d7550e09-a2e0-4202-8c7f-c2f15de40bd7/req/uml-simple-components/category-range-codespace-order_4d79c5e6-fd95-49c0-9f65-bec40869a9dd/req/uml-simple-components/time-range-valid_4334e486-cf19-4afe-8c78-0c08fc195f8e/req/uml-simple-components/nil-reason-resolvable_f964331c-8aa5-4c19-8c34-82c17cd99144/req/uml-simple-components/nil-value-type-coherent_ca13f829-dc08-4258-8fcf-23091663547c/req/uml-simple-components/allowed-values-unit-coherent_aeb99422-f2a8-4fcc-b573-b6faa5792d40/req/uml-record-components_c0d2fb82-bb35-490e-ad51-d8b7c5ffd788/req/uml-record-components/package-fully-implemented_e3f0a203-b9bd-4438-9d0c-1cff58e841b2/req/uml-record-components/record-field-name-unique_6128cc09-457c-43a6-a569-119186a88c8e/req/uml-record-components/vector-coord-name-unique_dadf02b9-d9b9-4b52-b81b-f64179f51bdc/req/uml-record-components/vector-component-no-ref-frame_cea0b66e-64e4-4ffd-ab88-27578ffb8b97/req/uml-record-components/vector-component-axis-defined_ab5d81c9-474b-4c17-8523-850bb60a5e54/req/uml-record-components/vector-local-frame-valid_bdea6f24-1405-4c04-844a-3493d71297b4/req/uml-choice-components_9a5afaf6-931b-43d3-9f4c-9ecb01fa4ac3/req/uml-choice-components/package-fully-implemented_60142650-932c-4494-add8-9dbc3184060c/req/uml-choice-components/choice-item-name-unique_5b87431f-e587-43e2-bf19-7ba1ff71d7d1/req/uml-block-components_a7009d09-dd93-46c9-a65f-25a307c3dce4/req/uml-block-components/package-fully-implemented_fc63c921-694b-4080-9d89-d2c59b98691e/req/uml-block-components/array-component-no-value_8299a5db-fa0b-4328-8f69-6346e76b65a4/req/uml-block-components/array-values-properly-encoded_54a0e65c-4347-4ebc-b7cc-04055b2b1928/req/uml-block-components/matrix-element-type-valid_24a3ba69-97e1-42de-a54f-d30718c8520c/req/uml-block-components/datastream-array-valid_485d508b-cb4b-4ab0-a41b-ff6d87bf8569/req/uml-geom-components_b8f8c1e9-094f-4cff-85fb-9c9ff34f1f05/req/uml-geom-components/package-fully-implemented_0e74b495-88e9-49b4-a024-6a4a88627fd7/req/uml-geom-components/srs-valid_47d85457-1e3e-4cb5-9871-18032d49b970/req/uml-geom-components/geom-value-valid_b137f877-f72d-4c70-9c12-a60fec7a5ed7/req/uml-simple-encodings_e8e82cf0-0045-43ac-8876-db1bdd684b88/req/uml-simple-encodings/package-fully-implemented_bc0a786e-33c7-4d6b-9b3f-04dd03442129/req/uml-advanced-encodings_fffd554b-1cda-4108-b38e-82fc48979360/req/uml-advanced-encodings/package-fully-implemented_a8bc3622-f2c8-488f-9612-dce609a8e930/req/json-simple-components_1ffa4ccc-b6a6-4a86-b2e7-4ca6cca9468b/req/json-simple-components/schema-valid_7a79fa83-2ffe-4df9-8569-2fa2642a13f0/req/json-simple-components/special-numerical-values_7d299258-3353-427f-8e07-d632371689b8/req/json-simple-components/definition-resolvable_1e58f94d-af1e-44aa-89f2-d7bf17924ba0/req/json-simple-components/inline-value-constraint-valid_44472ff4-cc49-4025-b374-f4700a518476/req/json-simple-components/ucum-code-used_dc742332-e6f6-43be-aa50-99e0062aae09/req/json-simple-components/iso8601-uom-used_c7aa1491-b30d-49de-9c25-0a725374ab4f/req/json-record-components_39e495de-1a08-4d91-9cb6-3c5f500cb2dd/req/json-choice-components_b3aba94f-0f74-4685-8471-bb7c515b58e9/req/json-block-components_8fc2ad9d-ce4c-40d8-b5ab-297b22bcce8c/req/json-geom-components_689f3fd1-2048-4f2b-8f7f-d111aa19d2a6/req/json-simple-encodings_61ecb26d-a1cb-487a-bf61-a317e09d59ea/req/json-advanced-encodings_0315ad14-c240-4c89-9928-4ec581b16fb8/req/xsd-advanced-encodings/ref-syntax-valid_4b65d294-16d9-4c4e-9f76-b5510b62f162/req/xsd-advanced-encodings/scalar-ref-component-valid_6a5ebfb9-2ec1-4ab2-9791-7e01eb73ae49/req/xsd-advanced-encodings/datatype-valid_b2ad778c-c633-41ee-869b-64a6e44f973c/req/xsd-advanced-encodings/datatype-compatible_7655ef6a-f6d5-4d43-baa3-7a12ad0ea707/req/xsd-advanced-encodings/no-datatype-length_355d1fef-8a6b-4878-9b5e-54dfae36f499/req/general-encoding-rules_89fc3a84-6279-4132-9630-fb59f3a1ff2e/req/general-encoding-rules/record-encoding-rule_e60d1a52-437b-4f4b-b48d-ce5fb5400a24/req/general-encoding-rules/choice-encoding-rule_cc90cb43-b123-4376-9386-ab59b2f34d4b/req/general-encoding-rules/array-encoding-rule_867a66a0-1550-4e6d-baaa-232197bd9ac7/req/general-encoding-rules/array-size-encoding-rule_9d547d80-5023-4749-b546-48c2be01e830/req/json-encoding-rules_f7931ef7-61f3-4f8e-86c3-b3e37b36a35d/req/json-encodings-rules/json-valid_b791f15f-e2d8-419e-abcc-c40d03ad999f/req/json-encoding-rules/scalar-value-valid_01fae0ae-fb26-4424-8d57-0695599de979/req/json-encoding-rules/range-value-valid_0ea0a97a-06dc-4d61-8f41-455473681b75/req/json-encoding-rules/record-object-valid_cb1420b9-20ac-42f8-b02b-933064665c0e/req/json-encoding-rules/vector-object-valid_45d3463d-3906-4eac-8925-8c895a3f457b/req/json-encoding-rules/choice-object-valid_e22e35dd-587d-433d-8c30-bf9238a07c86/req/json-encoding-rules/array-values-valid_9504cc66-103d-44ce-bd91-7094bc649dad/req/json-encodings-rules/geometry-valid_642738e4-c199-4b13-b412-ce2c6179a4f2/req/text-encoding-rules_1d3ef339-3c2b-48af-b362-04e79a37c63b/req/text-encodings-rules/abnf-syntax-valid_7ba0fee3-3cd9-4fc4-9cf7-8076ba9850ae/req/text-encodings-rules/separators-valid_3621ff12-3408-4556-975f-2fd6bd59862e/req/text-encodings-rules/optional-field-marker-present_f90d70e7-166e-4876-81ad-1fb269ec79e6/req/text-encodings-rules/choice-selection-marker-valid_d1932a67-cdd1-40e4-a4d2-7fe4aa54341b/req/text-encodings-rules/geometry-valid_3a14423c-bd56-4664-bcd3-d9a197f8f644/req/binary-encoding-rules_bef43c29-cb7d-4a45-861b-fcc28897581d/req/binary-encoding-rules/abnf-syntax-valid_df6eaa05-0f3e-4ff2-96bc-e9a01c48449c/req/binary-encoding-rules/type-encoding-valid_d0a6761e-e35a-442c-95e8-48239a2d28f7/req/binary-encoding-rules/base64-translation-applied_38c66334-c281-47b2-8eaf-99df349d5fd7/req/binary-encoding-rules/optional-field-marker-present_0a436829-ca39-468e-b6bd-ddf5175fa59d/req/binary-encoding-rules/choice-selection-marker-valid_daf6760b-767e-43de-8970-a811cd101bc3/req/binary-encodings-rules/geometry-valid_e293b62e-2f96-41a8-bb7c-649f8996d416/conf/core_eb4c4842-54aa-4a11-a560-4f524abc11cb/conf/core/core-concepts-used_e2ff1447-eaac-4132-ab90-0f5e3294828b/conf/core/boolean-rep-valid_6cd04c8c-0ace-4275-b5b1-635dd81ae9cd/conf/core/categorical-rep-valid_88e8af44-fadb-4820-a6f5-68494e86ef2a/conf/core/numerical-rep-valid_1eef2b04-fb13-4bf2-a34d-ace361f6409c/conf/core/countable-rep-valid_b294a13b-fc57-4c8d-8a21-eee14e10f9b0/conf/core/textual-rep-valid_ad75403e-dc41-488e-ab57-17eba9b2718d/conf/core/semantics-defined_b42d0d27-71a7-40af-a5b1-c53450d15462/conf/core/semantics-resolvable_be7488de-d4ef-4671-a905-a7dd439105d5/conf/core/temporal-frame-defined_4db3dc0b-3fc3-4425-9a9b-91175bd90635/conf/core/spatial-frame-defined_9fcdfedb-3af2-4883-9d1f-649e14fd1bc0/conf/core/nil-reasons-defined_5cb4b894-d405-4881-905a-322cb5b69315/conf/core/aggregates-model-valid_c6fb05a1-a9de-4dc6-a2f6-138f4a17bece/conf/core/encoding-method-valid_c8bdfb37-b249-40f1-96ca-62396b0a28da/conf/uml-simple-components_9f99c3b0-4926-44fe-9b3d-2d9f0ead6855/conf/uml-simple-components/package-fully-implemented_76d2eb8e-f7fa-42c0-b9c9-5b1ff0ed1077/conf/uml-simple-components/iso19103-implemented_4c850ad4-c9f2-412f-a097-4551cd1696dd/conf/uml-simple-components/iso19108-implemented_2ed4af97-68bd-458a-8e11-5e44a329a44b/conf/uml-simple-components/definition-present_e80fc58b-da84-4ea0-9f7e-95cab0cf293c/conf/uml-simple-components/axis-valid_f1a7ede2-8107-4253-884c-7c48fc01d169/conf/uml-simple-components/axis-defined_5a5f66e8-aa69-4e04-bdaa-166110ba9316/conf/uml-simple-components/ref-frame-defined_d633efe9-d718-4df7-93c6-897d54b644b7/conf/uml-simple-components/value-constraint-valid_fb3af4c8-81d5-4897-8e88-bd2a2456714c/conf/uml-simple-components/value-attribute-present_82f39c2c-b858-4e7e-ad40-d77333aa28b0/conf/uml-simple-components/category-constraint-valid_a6119fb5-be85-4604-a22e-18f09a36001e/conf/uml-simple-components/category-enum-defined_58d2dd0d-bb77-4e90-941f-4d5e7dc9c519/conf/uml-simple-components/category-value-valid_aff2c624-40f5-4c26-8987-f272d16febd8/conf/uml-simple-components/time-ref-frame-defined_f0a50b34-acb0-46fd-aa7d-bc75314ff29d/conf/uml-simple-components/time-ref-time-valid_3474e1a9-fd5d-4263-a896-ed28f2d02f26/conf/uml-simple-components/time-local-frame-valid_30017d56-699a-4218-a95e-fe7efa9bd9ca/conf/uml-simple-components/range-value-valid_8cd09a4f-5a87-4d6d-82ff-e7fa827ac0d5/conf/uml-simple-components/category-range-valid_da68f495-2de4-4ca2-bb15-cd215f8db9f7/conf/uml-simple-components/category-range-codespace-order_7b8c8ad0-2c99-44d9-9001-6b33437e3ac4/conf/uml-simple-components/time-range-valid_189ea1fe-cbf0-4430-9636-046fe0c5ee9e/conf/uml-simple-components/nil-reason-resolvable_d87ed7ab-689d-448b-ae3c-cd71f0f69ef5/conf/uml-simple-components/nil-value-type-coherent_1f657bd1-2e2f-4c13-8120-cc421b8b859c/conf/uml-simple-components/allowed-values-unit-coherent_0a98c237-f17f-4409-8eed-1057b8fd1ffd/conf/uml-record-components_390a8a16-c216-4ec5-9ea6-85536d52b939/conf/uml-record-components/package-fully-implemented_94380548-04b7-40ff-9e21-251abbb7927c/conf/uml-record-components/record-field-name-unique_a823b131-da50-45f5-a899-863aa67e571d/conf/uml-record-components/vector-coord-name-unique_1f77657f-ff17-42b6-bd7c-1ccfc8c66eea/conf/uml-record-components/vector-component-no-ref-frame_9219bee8-129c-42e3-a2c6-4f980e80e993/conf/uml-record-components/vector-component-axis-defined_d39028da-521c-4ae2-942c-4d4b68f6e108/conf/uml-record-components/vector-local-frame-valid_8596ac1f-e4f7-4783-a50f-978ce812741c/conf/uml-choice-components_c1644a67-536d-4443-938c-6bc770d6e7ea/conf/uml-choice-components/package-fully-implemented_bdb0dc0d-08e5-49b1-abb2-e2ec31d7db04/conf/uml-choice-components/choice-item-name-unique_3b772f72-e7f4-4729-872f-0099b4d42cfe/conf/uml-block-components_48c143b6-00b3-474c-bf39-da34dcfdddf9/conf/uml-block-components/package-fully-implemented_df3e2226-ba68-47cc-8657-4ed58c088061/conf/uml-block-components/array-component-no-value_b8eaa866-e1d4-45c8-a358-9b3f20fccf21/conf/uml-block-components/array-values-properly-encoded_47c41a1d-0343-4b6a-8f5f-557fd3bd3abc/conf/uml-block-components/matrix-element-type-valid_7e6ec960-6b4b-4f28-8d11-7c3ab0097a18/conf/uml-simple-encodings_9ca1e6b1-3968-4a9b-aaae-0a06c7bed739/conf/uml-simple-encodings/package-fully-implemented_cd4f0a4a-1a3b-4189-8ec0-366e54c88d75/conf/uml-advanced-encodings_1b1770cf-24eb-4266-bb6d-07791893ca64/conf/uml-advanced-encodings/package-fully-implemented_cb106cc9-f555-4be3-a529-afec7a0974f0/conf/general-encoding-rules_c076053c-228e-40c0-8b15-f3f4827af898/conf/general-encoding-rules/record-encoding-rule_a412618e-3411-4b17-a5a7-0ff999c71d55/conf/general-encoding-rules/choice-encoding-rule_e2d85f61-db1a-43d7-be63-cb468c3b2e64/conf/general-encoding-rules/array-encoding-rule_4f35f829-cd68-4f8b-b40d-62715ccb831a/conf/general-encoding-rules/array-size-encoding-rule_18767d78-4f8a-474e-80f5-8ee1f9b6d768/conf/text-encoding-rules_f07e06af-668c-4e14-a3b6-d7545b81d3ca/conf/text-encoding-rules/abnf-syntax-valid_aa68d1a7-f5ef-41bb-a66d-198786798afe/conf/text-encoding-rules/separators-valid_3bc64378-83f2-4d9c-a738-e9bd52cc37cc/conf/text-encoding-rules/optional-field-marker-present_3ecaf503-5dc7-49ac-8c4a-9c4b3bab2aa1/conf/text-encoding-rules/choice-selection-marker-valid_e83a02ca-9b14-4552-a6ac-9b74127c1d02/conf/binary-encoding-rules_fdaa758c-ed4b-4453-9c56-fda1b10b45e4/conf/binary-encoding-rules/abnf-syntax-valid_563b222b-2d5c-4050-a1cb-15d7fd36c689/conf/binary-encoding-rules/type-encoding-valid_c3ca1b98-9e1f-49bb-bf58-1afd7a7a9afa/conf/binary-encoding-rules/base64-translation-applied_4bf64024-f7f6-4aa3-80a7-9b8128f0b2ac/conf/binary-encoding-rules/optional-field-marker-present_dc03e74b-3d73-43dd-a43a-0f1b0f5f7c7c/conf/binary-encoding-rules/choice-selection-marker-validTOC Heading Levels2HTML TOC Heading Levels2DOC TOC Heading Levels2 - - - -Copyright notice -Copyright © 2024 Open Geospatial Consortium -To obtain additional rights of use, visit - - - - -Note -Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium shall not be held responsible for identifying any or all such patent rights. - -Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation. - - - - - - -License Agreement -Use of this document is subject to the license agreement at - - - - - - -Notice for Drafts -This document is not an OGC Standard. This document is distributed for review and comment. This document is subject to change without notice and may not be referred to as an OGC Standard. - -Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation. - - - - - - -Suggested additions, changes and comments on this document are welcome and encouraged. Such suggestions may be submitted using the online change request form on OGC web site: - - -AbstractThe primary focus of the SWE Common Data Model is to define and package data in a self-describing and semantically enabled way. The main objective is to achieve interoperability, first at the syntactic level, and later at the semantic level (by using ontologies and probably semantic mediation) so that (sensor) data can be better understood by machines, processed automatically in complex workflows and easily shared between intelligent nodes. - -This standard is one of several implementation standards produced under OGC’s Connected Systems activity, and is a revision of content that was previously developed in the context of the Sensor Web Enablement initiative. These common data models are intended to be used in various OGC standards, and in particular, SensorML and OGC API — Connected Systems. - -Preface -The OGC SWE Common Data Model Encoding Standard is the result of worked done by the Connected Systems Working Group of the OGC, with the aim of modernizing the Sensor Wen Enablement (SWE) suite of Standards. - -To increase the brevity and readability of this Standard, many OGC document titles are shortened and/or abbreviated. Therefore, in the context of this document, the following phrases are defined: - -“this Standard” shall be interpreted as equivalent to “OGC SWE Common Data Model Encoding Standard”. -“SensorML” or “SensorML Standard” shall be interpreted as equivalent to “OGC Sensor Modeling Language Encoding Standard” - -Foreword -This document deprecates version 2.0 of the OGC® SWE Common Data Model Encoding Standard (OGC 08-094r2). - -The following changes have been made: - -Addition of the JSON encodings and schemas - -Addition of the Geometry data component (modeled on OGC simple feature geometries) - -Deprecation of the XML encodings - -Technical revision and improved explanations in various clauses - - - -This release is not fully backward compatible with version 2.0 even though changes were kept to a minimum. - -Security considerations -No security considerations have been made for this Standard. - -Submitters -All questions regarding this submission should be directed to the editor or the submitters: - -Name -Affiliation - -Alex Robin (Editor) -GeoRobotix, Inc. -Christian Autermann -52° North Initiative -Chuck Heazel -Heazeltech -Mike Botts -Botts Innovative Research, Inc. - - - -Additional contributors to this Standard include the following: - -Name -Affiliation -Arne Broering -52° North Initiative -Barry Reff -US DHS -Ingo Simonis -iGSI -Johannes Echterhoff -iGSI -John Herring -Oracle USA -Luis Bermudez -SURA -Nick Garay -Botts Innovative Research, Inc. -Peter Taylor -CSIRO - - - - - - - - - - -Scope -This standard defines low level data models for exchanging sensor related data between nodes of the OGC® Connected Systems framework (previously Sensor Web Enablement (SWE) framework). These models allow applications and/or servers to structure, encode and transmit sensor datasets in a self describing and semantically enabled way. - -More precisely, the SWE Common Data Model is used to define the representation, nature, structure and encoding of sensor related data. These four pieces of information, essential for fully describing a data stream, are further defined in section 6. - -The SWE Common Data Model is intended to be used for describing static data (files) as well as dynamically generated datasets (on the fly processing), data subsets, process and web service inputs and outputs, and real time streaming data and commands. All categories of sensor observations are in scope ranging from simple in-situ temperature data to satellite imagery and full motion video. - -This standard defines JSON encodings for the dataset/datastream description, while the data itself can be encoded in JSON, text or binary form. This standard is used by other existing OGC standards such as the Sensor Model Language (SensorML) and OGC API — Connected Systems. One goal of the SWE Common Data Model is to maintain the functionality and consistency between these related standards. - - - -Conformance -This standard has been written to be compliant with the OGC Specification Model – A Standard for Modular Specification (OGC 08-131r3). Extensions of this standard shall themselves be conformant to the OGC Specification Model. - -Conformance with this specification shall be checked using all the relevant tests specified in Annex A. The framework, concepts, and methodology for testing, and the criteria to be achieved to claim conformance are specified in ISO 19105: Geographic information — Conformance and Testing. In order to conform to this OGC™ encoding standard, a standardization target shall implement the core conformance class, and choose to implement any one of the other conformance classes. - -Additionally, it is highly recommended that JSON based implementations of the conceptual models do implement requirement classes from clause 8 and clause 9 of this standard, respectively, and pass the corresponding conformance classes instead of defining new encodings. - -TODO - -This standard defines XXXX. - -Requirements for N standardization target types are considered: - -AAAA - -BBBB - - - -Conformance with this standard shall be checked using all the relevant tests specified in Annex A (normative) of this document. The framework, concepts, and methodology for testing, and the criteria to be achieved to claim conformance are specified in the OGC Compliance Testing Policies and Procedures and the OGC Compliance Testing web site. - -In order to conform to this OGC® interface standard, a software implementation shall choose to implement: - -Any one of the conformance levels specified in Annex A (normative). - -Any one of the Distributed Computing Platform profiles specified in Annexes TBD through TBD (normative). - - - -All requirements-classes and conformance-classes described in this document are owned by the standard(s) identified. - - - - - -Terms and definitionsThis document uses the terms defined in OGC Policy Directive 49, which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this document and OGC documents do not use the equivalent phrases in the ISO/IEC Directives, Part 2. -This document also uses terms defined in the OGC Standard for Modular specifications (OGC 08-131r3), also known as the ‘ModSpec’. The definitions of terms such as standard, specification, requirement, and conformance test are provided in the ModSpec. -For the purposes of this document, the following additional terms and definitions apply. - -This document uses the terms defined in Sub-clause 5.3 of , which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this standard. - -For the purposes of this document, the following additional terms and definitions apply. - -TODO - - -Feature - - -Abstraction of real-world phenomena - - - ISO-19101, definition 4.11 - - - -Observation - - -Act of observing a property - - - ISO-19156, definition 4.10 - - - -Observation Procedure - - -Method, algorithm or instrument, or system of these which may be used in making an observationNote: In the context of the sensor web, an observation procedure is often composed of one or more sensors that transform a real world phenomenon into digital information, plus additional processing steps. - - - - - ISO-19156, definition 4.11 - - - -Property - - -Facet or attribute of an object referenced by a name -Example : Abby’s car has the colour red, where “colour red” is a property of the car instance - - - ISO-19143 - - - -Sensor - - -Type of observation procedure that provides the estimated value of an observed property at its output -Note: A sensor uses a combination of physical, chemical or biological means in order to estimate the underlying observed property. At the end of the measuring chain electronic devices often produce signals to be processed - - - -Sensor Network - - -A collection of sensors and processing nodes, in which information on properties observed by the sensors may be transferred and processed -Note: A particular type of a sensor network is an ad hoc sensor network. - - - -Sensor Data - - -List of digital values produced by a sensor that represents estimated values of one or more observed properties of one or more features -Note: Sensor data is usually available in the form of data streams or computer files. - - - -Sensor Related Data - - -List of digital values produced by a sensor that contains auxiliary information that is not directly related to the value of observed properties -Example: sensor status, quality of measure, quality of service, etc… When such data is measured, it is sometimes considered sensor data as well. - - - -Data Component - - -Element of sensor data definition corresponding to an atomic or aggregate data type -Note: A data component is a part of the overall dataset definition. The dataset structure can then be seen as a hierarchical tree of data components. - - - - -Conventions - -Identifiers -The normative provisions in this standard are denoted by the URI - - - -All requirements and conformance tests that appear in this document are denoted by partial URIs which are relative to this base. - - - -Abbreviated terms -In this document the following abbreviations and acronyms are used or introduced: - -CRS: Coordinate Reference System - -CSML: Climate Science Modeling Language - -GPS: Global Positioning System - -ISO International Organization for Standardization - -MISB Motion Imagery Standards Board - -OGC Open Geospatial Consortium - -SAS Sensor Alert Service - -SensorML Sensor Model Language - -SI Système International (International System of Units) - -SOS Sensor Observation Service - -SPS Sensor Planning Service - -SWE Sensor Web Enablement - -TAI Temps Atomique International (International Atomic Time) - -UML Unified Modeling Language - -UTC Coordinated Universal Time - -XML eXtended Markup Language - -1D One Dimensional - -2D Two Dimensional - -3D Three Dimensional - - - - -UML Notation -The diagrams that appear in this standard are presented using the Unified Modeling Language (UML) static structure diagram. The UML notations used in this standard are described in the diagram below. - - - - - - -Requirements Class: Core Concepts (normative core) - -Core Concepts /req/coreDerived Models and Software Implementations - - - - -Introduction -The generic SWE Common data model defined by this standard aims at providing verbose information to robustly describe sensor related datasets. We define Sensor Data as data resulting from the observation of properties of virtual or real world objects (or features) by any type of Observation Procedure (See the Observation and Measurements specification OGC 07-022r1 for a more complete description of the observation model used in SWE). - -Sensor related datasets however are not limited to sensor observation values, but can also include auxiliary information such as status or ancillary data. In the following sections, we will use the term ‘property’ in a broader sense, which does not necessarily imply “property measured by a sensor”. - -A dataset is composed of Data Components whose values need to be put into context in order to be fully understood and interpreted, by either humans or machines. The SWE Common Data Model provides several pieces of information that are necessary to achieve this goal. More precisely, the SWE Common Data Model covers the following aspects of datasets description: - -Representation - -Nature of data and semantics (by using identifiers pointing to external semantics) - -Quality - -Structure - -Encoding - - - -This requirement class constitutes the core of this standard. The standardization target types of this core are all models or software implementations seeking compliance with this standard. - - /req/core/core-concepts-used - -A derived model or software implementation shall correctly implement the concepts defined in the core of this standard. - - - - -Data Representation -Data representation deals with how property values are represented and stored digitally. Each component (or field) in a dataset carries a value that represents the state of a property. This representation will vary depending on the nature of the method used to capture the data and/or the target usage. For instance, a fluid temperature can be represented as a decimal number expressed in degrees Celsius (i.e. 25.4 °C), or as a categorical value taken from a list of possible choices (such as “freezing, cold, normal, warm, hot”). - -The following types of representations have been identified: Boolean, Categorical, Continuous Numerical, Discrete Countable and Textual. The paragraphs below explain basic features of each of these representation types. - - -Boolean -A Boolean representation of a property can take only two values that should be “true/false” or “yes/no”. In a sense, this type of representation is a particular case of the categorical representation with only two predefined options. - -Examples - -Motion detectors output can be represented by a boolean value -– TRUE if there is motion in the room, FALSE otherwise. - -On/Off status of a measurement system can be represented by a boolean value -– TRUE if the system in on, FALSE if the system is off. - - - /req/core/boolean-rep-valid - -A boolean representation shall at least consist of a boolean value. - - -The “Boolean” class described in is used to define a data component with a Boolean representation. - - - -Categorical -A categorical representation is a type of discrete representation of a property that only allows picking a value from a well defined list of possibilities (i.e. categories). This list is called a code space in this standard, following ISO 19103 terminology. - -The different possible values constituting a code space are usually listed explicitly in an out-of-band dictionary or ontology. This is necessary because each value should be defined formally and unambiguously, so that it can be interpreted correctly. - -Examples - -Biological or chemical species data is usually represented by a categorical data component that can leverage on existing controlled vocabulary. - -A camera mode can be represented by a categorical value: AUTO_FOCUS, MANUAL_FOCUS, etc…​ - - - /req/core/categorical-rep-valid - -A categorical representation shall at least consist of a category identifier and information describing the value space of this identifier. - - -The “Category” class described in is used to define a data component with a categorical representation. - - - -Numerical (continuous) -Perhaps the most used representation of a property value, especially in the science and technical communities, is the numerical one, as the majority of properties measured by sensors can be represented by numbers. - -Numerical representation is often used for continuous values and, in this case, the representation consists of a decimal (often floating point) number associated to a scale or unit of measure. The unit specification is mandatory even for quantities such as ratios that have no physical unit (in this case a scale factor is provided such as 1, 1/100 for percents, 1/1000 for per thousands, etc.). - -Examples - -Temperature measurements can be represented by a number associated to a unit such as degrees Celsius or Fahrenheit: 23.51°C, 94°F - -A velocity vector is composed of several values (usually 2 or 3) associated to a unit of speed: [1.0 2.0 3.0] m/s. - - - /req/core/numerical-rep-valid - -A continuous numerical representation shall at least consist of a decimal number and the scale (or unit) used to express this number. - - -The “Quantity” class described in is used to define a data component with a decimal representation and a unit of measure. - - - -Countable (discrete) -Discrete countable properties are also of interest and are most accurately captured with a numerical integer representation. They do not require a unit since the unit is always the unit of count (i.e. the person if we are counting persons, the pixel if we are counting pixels, etc). Note that continuous properties can also be represented as integers with certain combinations of scale and precision. This case should not be confused with the countable properties described here. - -Examples - -Array indices and sizes are countable properties with no unit. - -There are numerous other countable properties such as number of persons, number of bytes, number of frames, etc. for which the unit is obvious from the definition of the property itself. - - -A discrete countable representation should not be confused with a continuous numerical representation whose scale and precision allow encoding the property value as an integer. - - /req/core/countable-rep-valid - -A countable representation shall at least consist of an integer number. - - -The “Count” class described in is used to define a data component with an integer representation and no unit of measure. - - - -Textual -A textual representation is useful for providing human readable data, expressed in natural language, as well as various alpha numeric tokens that cannot be assigned to well-defined categories. - -Examples - -Comments or notes written by humans (ex: data annotations, quality assessments). - -Machine generated messages for which there is no taxonomy (ex: automatic alert messages). - -Alphanumeric identifier schemes leading to a large number of possibilities that cannot be explicitly enumerated (ex: UUID, ISBN code, URN). - - - /req/core/textual-rep-valid - -A textual representation shall at least consist of a character string. - - -The “Text” class described in is used to define a data component with a textual representation. - - - -Constraints -Constraints can be added to some representation types to further restrict the set of possible values allowed for a given property: - -A boolean representation cannot be restricted further since it is already limited to only two possibilities. - -A numerical representation can be constrained by a list of allowed values and/or bounded or unbounded intervals. A decimal representation can also be constrained by the number of significant digits after the decimal point. - -A categorical representation can be constrained by a list of possible choices, which should be a subset of the list of possibilities defined by the code space. - -A textual representation can be constrained by a pattern expressed in a well known language such as regular expression syntax. - - - -These constraints apply only to the value of the data component to which they are associated. They shall not be used to express constraints on other data components or on any other information than the value. - -Examples - -A decimal representation of an angular property such as latitude can be constrained to the [-90° 90°] interval. - -A temperature reading produced by a sensor can be constrained to the [-50°C +250°C] range. - - - - - -Nature of Data -We define “Nature of data” as the information needed to understand what property the value represents. It is thus connected to semantics and the semantic details are often provided by external sources such as dictionaries, taxonomies or ontologies. Note that it is independent of the type of representation used and it does not include information about how the data was actually measured or acquired. This lineage information should be described by other means as explained in . - - -Human readable information -The first means by which nature of data can be communicated is through human readable text. The data component’s description, which is present in all data types defined in this specification, can hold any length of text for this purpose. The data component’s label is used to carry short human readable information (i.e. a short name); this is useful to allow data consumers to quickly identify the represented property. - -It is not recommended to use the concepts of “description” and “label” in a way that they contain robust semantic information (i.e. that machines can rely upon). The content of such fields is intended to be interpretable solely by humans. - - - -Robust semantics -All SWE Common data types allow for associating each data component in a dataset with the definition of the Property that it represents. - - /req/core/semantics-defined - -All data values shall be associated with a clear definition of the property that the value represents. - - -It is recommended that a model uses references to out-of-band dictionaries rather than inline information because semantics are supposed to be shared by multiple datasets. Using references also helps by providing a framework that is independent from the actual semantic technology used. - -The SWE Common UML models and XML schemas desribed in this standard can be used in combination with any semantic web technology. It is thus possible to connect a SWE dataset description to an existing taxonomy provided the external register exposes a unique identifier for each entry. - -These semantic references point to out-of-band semantic information that can be encoded in various languages, such as the Ontology Web Language (OWL) or GML dictionary. - - /req/core/semantics-resolvable - -If semantic information is provided by referencing out-of-band data, the locators or identifiers used to point to this information shall be resolvable by some well-defined method. - - - - -Time, space and projected quantities -Temporal, spatial and other projected quantities need to be further defined by specifying the reference frame and axis with respect to which the quantity is expressed. In SWE Common, any simple component type can be associated to a particular axis of a given reference frame. - -Examples - -Satellite position data can be defined as a vector of 3 components, expressed in the J2000 ECI Cartesian frame, the 1st component being associated to the X axis, the 2nd to the Y axis and the 3rd to the Z axis. - -Angular velocity data from an Inertial Measurement Unit can be defined as a vector of 3 components, expressed in the plane reference frame (for instance ENU defined by local East, North, Up directions), the Euler components being mapped to X, Y, Z respectively. - -Relative time data can be given with respect to an arbitrary epoch itself positioned in a well defined reference frame such as TAI (from the French “Temps Atomique International” = International Atomic Time). - - - /req/core/temporal-frame-defined - -A temporal quantity shall be expressed with respect to a well defined temporal reference frame and this frame shall be specified. - - - /req/core/spatial-frame-defined - -A spatial quantity shall be expressed with respect to the axes of a well defined spatial reference frame and this frame shall be specified. - - -The “Time” class described in is designed for carrying a temporal reference frame or a time of reference in the case of relative time data. - -The “Vector” class detailed in is a special type of record used to assign a reference frame to all its child-components. - -The “Matrix” class defined in allows the definition of higher order tensor quantities. - -This standard does not impose requirements on the type of reference frames that a standardization target shall support. Standards that are dependent on this specification can (and often should) however define a minimum set of reference frames that shall be supported by all implementations. - - - - -Data Quality -Quality information can be essential to the data consumer and the SWE Common Data Model provides simple and flexible ways to associate qualitative information with each component of a dataset. - - -Simple quality information -Simple quality information can be associated with any scalar data component, in the form of another scalar or range value. The quality information defined here applies solely to the value of the associated data component (i.e. the measurement value) and, depending on its data type, quality can be represented by a numerical, categorical or textual value, or by a range of values. - -This quality information can be static, i.e. constant over the whole dataset, or dynamic and provided with the data itself. In this case, the quality value is in fact carried by another component of the dataset (and described in SWE Common as such). - -The exact type of quality information provided should be specified via semantic tagging just like with any other property in SWE Common. - -Examples - -Examples of quality measures are “absolute accuracy”, “relative accuracy”, “absolute precision”, “tolerance”, and “confidence level”. - -Quality related comments can also describe operating conditions, such as “sensor contained blockage and was removed” or “engineer on site, values may be affected”. This information can inform the user of potential inaccuracy in the data across certain periods. - - - - -Nil Values -The concept of NIL value is used to indicate that the actual value of a property cannot be given in the data stream, and that a special code (i.e. reserved value) is used instead. It is thus a kind of quality information. The reason for which the value is not included is essential for a good interpretation of the data, so each reserved value is associated to a well-defined reason. In that sense, a NIL value definition is essentially a mapping between a reserved value and a reason. - -Each component of a dataset can define one or several NIL values corresponding to one or more reasons. - -Example - -In low level satellite imagery with, for instance, 8-bits per channel, the imagery metadata often defines: -- A reserved value to indicate that a pixel value was “Below Detection Limit” usually set to ‘0’ -- A reserved value to indicate that a pixel value was “Above Detection Limit” usually set to ‘255’ - - - /req/core/nil-reasons-defined - -A model of a NIL value shall always include a mapping between the selected reserved value and a well-defined reason. - - - - -Full lineage and traceability -Full lineage and traceability is not in the scope of this specification. It is fully addressed by the OGC® Sensor Model Language Standard, which allows robust definition of measurement chains, with detailed information about the processing that takes place at each stage of the chain. This means that complex lineage guarantying full traceability can be recorded in a SensorML process chain, separately from the data itself. - -Datasets can be associated to lineage information described using the Sensor Model Language by using a metadata wrapper such as the “Observation” object defined in the OGC® Observations and Measurements Standard (O&M). In this standard, the “procedure” property of the “Observation” class allows attaching detailed information about the measurement procedure, that is to say a description of how the data was obtained (i.e. lineage), to the data itself. - - - - -Data Structure -Data structure defines how individual pieces of data are grouped, ordered, repeated and interleaved to form a complete data stream. The SWE Common models are based on data structures commonly accepted in computer science and formalized in ISO 11404. -Classical aggregate datatypes are defined below: - -Record: consists of a list of fields, each of them being keyed by a field identifier and defining its own type that can be any scalar or aggregate structure. - -Array: consists of many elements of the same type, usually indexed by an integer. The element type can be any data structure including scalars and aggregates. The array size constitutes the upper bound of the index. - -Choice: consists of a list of alternatives, each of them being keyed by a tag value and having its own type. Only values for one alternative at a time are actually present in the data stream described by such a structure. - - - - /req/core/aggregates-model-valid - -Aggregate data structures shall be implemented in a way that is consistent with definitions of ISO 11404. - - -This standard also defines the concept of “data component” as any part of the structure of a dataset, aggregate or not. It is thus the superset of all the aggregate structures described above and of all scalar elements implementing the representations described in . - -Example - -A dataset representing a time series of observations acquired by a mobile sensor can be encoded with various methods depending on the requirements: - -XML encoding can be used when data needs to be easily styled to other markup formats (such as HTML) or when precise error localization (in the case of an error in the stream) is needed. - -ASCII encoding can be used to achieve a good compromise between readability and size efficiency. - -Binary encoding can be used (eventually with embedded compression) when pure performance (i.e. size but also reading and writing throughput) is the main concern. - - - - -A data component can be both a data descriptor and a data container: - -A data component used as a data descriptor defines the structure, representation, semantics, quality, and other metadata of a data set but does not include the actual data values. - -A data component used as a data container equally defines the dataset but also includes the actual property values. - - - - - -Data Encoding -A key concept of the SWE Common Data Model is the ability to separate data values themselves from the description of the data structure, semantics and representation. This allows verbose metadata to be used in order to robustly define the content and meaning of a dataset while still being able to package the data values in very efficient manners. - -Data encoding methods define how the data is packed as blocks that can efficiently be transferred or stored using various protocols and formats. Different methods allow encoding the data as JSON, text (CSV like), binary and even compressed or encrypted formats in a way that is agnostic to a particular structure. This allows any of the encodings methods to be selected and used based on a particular requirement, such as performance, re-use of tools, alignment with existing standards and so on. - - /req/core/encoding-method-valid - -All encoding methods shall be applicable to any arbitrarily complex data structures as long as they are made of the data components described in . - - - - - -UML Conceptual Models (normative) -This standard defines normative UML models with which derived encoding models as well as all future separate extensions should be compliant. The standardization target type for the UML requirements classes defined in this clause is thus a software implementation or an encoding model that directly implements the conceptual models defined in this standard. - - -Package Dependencies -The following packages are defined by the SWE Common Data Model: - - -Internal Package Dependencies - - -This standard also has dependencies on external packages defined by other standards, namely ISO 19103, ISO 19108 and ISO 19111, as show below: - - -External Package Dependencies - - - - -Requirements Class: Basic Types and Simple Components Packages - -Simple Components UML Package /req/uml-simple-componentsSoftware Implementation or Encoding of the Conceptual Models/req/core - - - -Data components are the most essential part of the SWE Common Data Model. They are used to describe all types of data structures, whether they represent data stream contents, tasking messages, alert messages or process inputs/outputs. - -The “Simple Components” UML package contains classes modeling simple data components, that is to say scalar components and range components (i.e. value extents). These classes implement concepts defined in the core section of this standard, and are designed to collect information about nature, representation and quality of data. These include six scalar types – Boolean, Text, Category, Count, Quantity, and Time – as well as four range types – CategoryRange, CountRange, QuantityRange and TimeRange. - -The “Basic Types” UML package from which the “Simple Components” package is dependent is also included in this requirements class. - -As an overview, conceptual models of the six scalar component types are shown on the following UML class diagram: - - -Scalar Data Components - - -Classes representing the four range data components are shown on the diagram below: - - -Range Data Components - - -Details and requirements about each of these classes are given in the following sections. - - /req/uml-simple-components/package-fully-implemented - -The encoding or software shall correctly implement all classes defined in the “Simple Components” and “Basic Types” UML packages. - - -Several dependencies to ISO standards exist and are detailed below. - -Data types from several packages of the ISO 19103 standard are used directly which makes this requirement class dependent on it. These data types are “CharacterString”, “Boolean”, “Real”, “Integer”, “Date”, “Time”, “DateTime”, “ScopedName”, “UnitOfMeasure” and “UomTime”. - - /req/uml-simple-components/iso19103-implemented - -The encoding or software shall correctly implement all UML classes defined in ISO 19103 that are referenced directly or indirectly by this standard. - - -The “TM_Position” data type from the “Temporal Reference System” package of the ISO 19108 standard is also used. - - /req/uml-simple-components/iso19108-implemented - -The encoding or software shall correctly implement all UML classes defined in ISO 19108 that are referenced directly or indirectly by this standard. - - -The “SC_CRS” and “TM_Temporal_CRS” classifiers are referenced conceptually from ISO 19111 but their implementation is not required by this standard. Implementations are allowed to simply use a CRS identifier as a mean of recognizing predefined coordinate reference systems. The use of identifiers from the EPSG database is recommended in this case. However, when new CRS definitions need to be created (e.g. engineering CRS attached to sensors or platforms), the models defined in ISO 19111 shall be used. - - -Basic Data Types -This requirement class also includes requirements for the “Basic Types” UML package. This package defines low level data types that are used as property types by classes defined in the other packages. - -Data types defined in this package relate to defining pairs of data types defined in ISO 19103 for use within classes describing value extents: - - -Basic types for pairs of scalar types - - - - -Attributes shared by all data components -All SWE Common data component classes carry standard attributes inherited (transitively) from the “AbstractDataComponent” and “AbstractSWEValue” classes (The “AbstractSWEValue” class is actually defined in the “Basic Types” package but is shown here for clarity). The class hierarchy is shown on the following UML diagram: - - -AbstractDataComponent Class - - -Extension Slot - -The “extension” attribute is used as a container for future extensions. It allows adding new extended properties to an existing class at the instance level. - -Name and Description - -The optional “name” and “description” attributes can be used to provide human readable information describing what property the component represents. The “name” is meant to hold a short descriptive name whereas “description” can carry any length of plain text. These two fields should not be used to specify robust semantic information (see ). Instead, the “definition” attribute described below should be used for that purpose. - -Identifier - -The optional “identifier” attribute allows assigning a unique identifier to the component, so that it can be referenced later on. It can be used, for example, when defining the unique identifier of a universal constant. - -Definition - -The “definition” attribute identifies the property (often an observed property in our context) that the data component represents by using a scoped name. It should map to a controlled term defined in an (web accessible) dictionary, registry or ontology. Such terms provide the formal textual definition agreed upon by one or more communities, eventually illustrated by pictures and diagrams as well as additional semantic information such as relationships to units and other concepts, ontological mappings, etc. - -Examples - -The definition may indicate that the value represents an atmospheric temperature using a URN such as “urn:ogc:def:property:OGC::SamplingTime” referencing the complete definition in a register. - -The definition may also be a URL linking to a concept defined in an ontology such as [http//www.opengis.net/def/OGC/0/SamplingTime]. -The label could be “Sampling Time”, which allows quick identification by human data consumers. - -The description could be “Time at which the observation was made as measured by the on-board clock” which adds contextual details. - - -Flags - -The “optional” attribute is an optional flag indicating if the component value can be omitted in the data stream. It is only meaningful if the component is used as a schema descriptor (i.e. not for a component containing an inline value). It is ‘false’ by default. - -The “updatable” attribute is an optional flag indicating if the component value is fixed or can be updated. It is only applicable if the data component is used to define the input of a process (i.e. when used to define the input or parameter of a service, process or sensor, but not when used to define the content of a dataset). - -Examples - -The “updatable” flag can be used to identify what parameters of a system are changeable. The exact semantics depends on the context. For example: - -In SensorML process chains, the “updatable” flag is used to identify process parameters that can accept an incoming connection (and thus can get changed while the process is in execution). - -In a SensorML System it is used to indicate whether or not a system parameter is changeable, either by an operator (i.e. by turning a screw or inserting a jumper) or remotely by sending a command. - -In the Sensor Planning Service it is used to indicate if tasking parameters are changeable by the client (i.e. by using the Update operation) after a task has been submitted. - - - - - - -Attributes shared by all simple data components -As shown on , classes modeling simple data components inherit attributes from the “AbstractSimpleComponent” class from which they are directly derived. This abstract class is shown again below: - - -AbstractSimpleComponent Class - - -The definition attribute inherited from the “AbstractDataComponent” class is mandatory on this class and thus on all its descendants. - - /req/uml-simple-components/definition-present - -The “definition” attribute shall be specified by all instances of concrete classes derived from “AbstractSimpleComponent”. - - -Reference Frames and Axes - -It provides two attributes allowing the association of a data component to a reference frame and an axis and thus implements core concepts introduced in . These attributes are used for a component which value is the projection of a property along a temporal or spatial axis. - -The “referenceFrame” attribute identifies the reference frame (as defined by the “SC_CRS” object) relative to which the coordinate value is given. The “axisID” attribute takes a string that uniquely identifies one of the reference frame’s axes along which the coordinate value is given. - - /req/uml-simple-components/axis-valid - -The value of the “axisID” attribute shall correspond to the “axisAbbrev” attribute of one of the coordinate system axes listed in the specified reference frame definition. - - -The union of these two attributes thus uniquely identifies one axis of one given reference frame along which the value of the component is expressed. Note that even though the ISO 19111 model assigns units to CRS axes in addition to a direction, only the direction is used in this standard and the unit is defined by the data component itself. This allows expressing other quantities than the one predefined along the CRS’s axes such as velocity, acceleration or rotation. - -A component representing a projected quantity can be defined in isolation or can be contained within a “Vector” or ”Matrix” aggregate when it contributes to the specification of a multi-dimensional quantity (see ). In this last case the reference frame definition is usually inherited from the parent “Vector” or ”Matrix” instance and is thus omitted from the scalar component itself. However, the “axisID” attribute still needs to be specified on “Vector” components. - - /req/uml-simple-components/axis-defined - -The “axisID” attribute shall be specified by all instances of concrete classes derived from “AbstractSimpleComponent” and representing a property projected along a spatial axis. - - - /req/uml-simple-components/ref-frame-defined - -The “referenceFrame” attribute shall be specified by all instances of concrete classes derived from “AbstractSimpleComponent” and representing a property projected along a spatial or temporal axis, except if it is inherited from a parent aggregate (Vector or Matrix). - - -Quality - -The optional “quality” attribute is used to provide simple quality information as discussed in . It is of type “Quality” which is a union of several classes as defined in . Its multiplicity is more than one which means that several quality measures can be given on for a single data component. - -Example - -Both precision and accuracy of the value associated to a data component can be specified concurrently (see for a good explanation of the difference between the two). - - -Nil Values - -The optional “nilValues” attribute is used to provide a list (i.e. one or more) of NIL values as defined in . The model of the “NilValues” class is detailed in . - -Concrete sub-classes of “AbstractSimpleComponent” can also define a “constraint” attribute that allows further restriction of the possible values allowed by the corresponding representation. This implements concepts defined in . These constraints always apply to the value of the property as represented by the corresponding data component whether this value is given inline (data container case) or out-of-band (data descriptor case). - -Constraints - - /req/uml-simple-components/value-constraint-valid - -The property value (formally the representation of the property value) attached to an instance of a class derived from “AbstractSimpleComponent” shall satisfy the constraints specified by this instance. - - -All concrete sub-classes of “AbstractSimpleComponent” also define a “value” attribute. This attribute is not defined in this abstract class because it has a different primitive type in each concrete data component class (See following clauses). - - /req/uml-simple-components/value-attribute-present - -All concrete classes derived from the “AbstractSimpleComponent” class (directly or indirectly) shall define an optional “value” attribute and use it as defined by this standard. - - -The “value” attribute is always optional on any simple data component in order to allow for both data descriptor and data container cases: - -When the data component is used as a data container, this attribute always carries the value of the associated property (formally the representation of the estimated or asserted value of the property). Quality information, nil values definitions and constraints thus apply to the value taken by this attribute. - -When the data component is used as a data descriptor, its actual value is provided somewhere else, often encoded as part of a larger data block. In this case, quality information, nil values definitions and constraints apply to the out-of-band value and not to the “value” attribute. Instead, the “value” attribute can then be used to specify a default value. - - - -Whether the data component is used as a descriptor or a container depends on the context and should be explicitly stated by any standard that makes use of the SWE Common Data Model. - -All UML classes in this package that derive from “AbstractSimpleComponent” define a “value” attribute with the adequate primitive type and whose meaning is the one explained above. - - - -Boolean Class -The “Boolean” class is used to specify a scalar data component with a Boolean representation as defined in . It derives from “AbstractSimpleComponent” and is shown below: - - -Boolean Class - - -The “value” attribute of this class is of the boolean primitive type.The boolean primitive type is defined in ISO19103 and is not to be confused with the “Boolean” class defined in this standard. This clause is the only place in this standard where the ISO 19103 boolean data type is referenced. All other occurrences of the “Boolean” class in this standard refer to the class defined in this clause. - - - - - - -Text Class -The “Text” class is used to specify a component with a textual representation as defined in . It derives from “AbstractSimpleComponent” and is shown below: - - -Text Class - - -Constraints - -The “constraint” attribute allows further restricting the range of possible values by using the “AllowedTokens” class defined in . This class allows the definition of the constraint by either enumerating the allowed tokens and/or by specifying a pattern that the value must match. - -Value - -The “value” attribute (or the corresponding value in out-of-band data) is a string that must match the constraint.The “Text” component can be used to wrap a string representing complex content such as an expression in a programming language, xml or html content. This practice should however be used only for systems that don’t require high level of interoperability since the client must know how to interpret the content. Also care must be taken to properly escape such content before it is inserted in an XML document or in a SWE Common data stream. - - - - - - -Category Class -The “Category” class is used to specify a scalar data component with a categorical representation as defined in . It derives from “AbstractSimpleComponent” and is shown below: - - -Category Class - - -Code Space - -The “codeSpace” attribute is of type “Dictionary” and allows listing and defining the meaning of all possible values for this component. It is expected that instances of the “Dictionary” class will usually be referenced (rather than included inline) by implementations of this class since the code space definition is usually obtained from a controlled vocabulary maintained at a remote location. This type of implementation is the one chosen in the XML encodings defined by this standard. - -Constraints - -The “constraint” attribute allows further restricting the list of possible values by using the “AllowedTokens” class defined in . This is usually done by specifying a limited list of possible values, which have to be extracted from the code space. - - /req/uml-simple-components/category-constraint-valid - -When an instance of the “Category” class specifies a code space, the list of allowed tokens provided by the “constraint” property of this instance shall be a subset of the values listed in this code space. - - -It is also possible to use this class without a code space, even though it is not recommended as values allowed in the component would then not be formally defined. However, as the intent of this class is to always represent a value extracted from a set of possible options, a constraint shall be defined if no code space is specified. - - /req/uml-simple-components/category-enum-defined - -An instance of the “Category” class shall either specify a code space or an enumerated list of allowed tokens, or both. - - -Value - -The “value” attribute (or the corresponding value in out-of-band data) is a string that must be one of the items of the code space and also match the constraint. - - /req/uml-simple-components/category-value-valid - -When an instance of the “Category” class specifies a code space, the value of the property represented by this instance shall be equal to one of the entries of the code space. - - - - -Count Class -The “Count” class is used to specify a scalar data component with a discrete countable representation as defined in . It derives from “AbstractSimpleComponent” and is shown below: - - -Count Class - - -Constraints - -The “constraint” attribute can be used to restrict the range of possible values to a list of inclusive intervals and/or single values using the “AllowedValues” class defined in . Numbers used to define these constraints should be integers and expressed in the same scale as the count value itself. The “significantFigures” constraint allowed by the “AllowedValues” class is not applicable to the “Count” class. - -Value - -The “value” attribute (or the corresponding value in out-of-band data) is an integer that must be within one of the constraint intervals or exactly one of the enumerated values. - - - -Quantity Class -The “Quantity” class is used to specify a component with a continuous numerical representation as defined in . It derives from “AbstractSimpleComponent” and is shown below: - - -Quantity Class - - -Unit of Measure (UoM) - -In addition to attributes inherited from the “AbstractSimpleComponent” class, this class provides a unit of measure declaration through the “uom” attribute. This unit is essential for the correct interpretation of data represented as decimal numbers and is thus mandatory. Quantities with no physical unit still have a scale (such as unity, percent, per thousands, etc.) that must be specified with this property. - -Constraints - -The “constraint” attribute is used to restrict the range of possible values to a list of inclusive intervals and/or single values using the “AllowedValues” class defined in . Numbers used to define these constraints must be expressed in the same unit as the quantity value itself. Additionally, it is possible to constrain the number of significant digits that can be added after the decimal point. - -Value - -The “value” attribute (or the corresponding value in out-of-band data) is a real value that is within one of the constraint intervals or exactly one of the enumerated values, and most importantly is expressed in the unit specified. - - - -Time Class -The “Time” class is used to specify a component with a date-time representation and whose value is projected along the axis of a temporal reference frame. This class is also necessary to specify that a time value is expressed in a calendar system. This class derives from “AbstractSimpleComponent” and is shown below: - - -Time Class - - -Time is treated as a special type of continuous numerical quantity that can be either expressed as a scalar number with a temporal unit or a calendar date with or without a time of day. Consequently, this class has all properties of the “Quantity” class, plus some others that are specific to the treatment of time. - -Reference Frame - -As time is always expressed relative to a particular reference frame, the “referenceFrame” attribute inherited from the parent class “AbstractSimpleComponent” shall always be set on instances on this class unless the default ‘UTC’ is meant. - - /req/uml-simple-components/time-ref-frame-defined - -The “referenceFrame” attribute inherited from “AbstractSimple Component” shall always be set on instance of the “Time” class unless the UTC temporal reference system is used. - - -Note that specifying the frame of reference is required even when using ISO notation because there can be ambiguities between several universal time references such as UTC, TAI, GPS, UT1, etc… Differences between these different time reference systems are indeed in the order of a few seconds (and increasing), that is to say not negligible in various situations. - -Example - -J2000 is a well known epoch in astronomy and is equal to: - -January 1, 2000, 11:59:27.816 in the TAI time reference system - -January 1, 2000, 11:58:55.816 in the UTC time reference system - -January 1, 2000, 11:59:08.816 in the GPS time reference system - - - -These offsets are not always constant and depend on the irregular insertion of leap seconds in UTC. - - -The “axisID” attribute inherited from the parent class does not need to be set since a time reference system always has a single dimension. However it can be set to ‘T’ for consistency with spatial axes. - -Reference Time - -The “referenceTime” attribute is used to specify a different time origin than the one sometimes implied by the “referenceFrame”. This is used to express a time relative to an arbitrary epoch (i.e. different from the origin of a well known reference frame). The new time origin specified by “referenceTime” shall be expressed with respect to the reference frame specified and is of type “DateTime”. This forces the definition of this origin as a calendar date/time combination. - - /req/uml-simple-components/time-ref-time-valid - -The value of the “referenceTime” attribute shall be expressed with respect to the system of reference indicated by the “referenceFrame” attribute. - - -Example - -This class can be used to define a value expressed as a UNIX time (i.e. number of seconds elapsed since January 1, 1970, 00:00:00 GMT) by: - -Specifying that the reference frame is the UTC reference system - -Setting the reference time to January 1, 1970, 00:00:00 GMT. - -Setting the unit of measure to seconds - - - -See definitions of some commonly accepted time standards at or . - - -Local Frame - -The optional “localFrame” attribute allows for the definition of a local temporal frame of reference through the value of the component (i.e. we are specifying a time origin), as opposed to the referenceFrame which specifies that the value of the component is in reference to this frame. - - /req/uml-simple-components/time-local-frame-valid - -The “localFrame” attribute of an instance of the “Time” class shall have a different value than the “referenceFrame” attribute. - - -This feature allows chaining several relative time positions. This is similar to what is done with spatial position in a geopositioning algorithm (and which is also supported by this standard using the “Vector” class). - -Example 1 - -In the case of a whiskbroom scanner instrument, the “sampling time” is often expressed relative to the “scan start time” which is itself given relative to the “mission start time”. It is important to properly identify the chain of time reference systems at play so that the adequate process can compute the absolute time of every measurement made (Note that it is often not practical to record the absolute time of each single measurement when high sampling rates are used). - -Example 2 - -A model forecast may represent its result times relative to the “run time” of the model for efficient encoding. The values of the output will be in reference to this base epoch. In this example the “referenceFrame” attribute of the model time is set to UTC and the “localFrame” set as “ModelTime”. The model result would then define its “referenceFrame” as “ModelTime”, allowing the time values to be encoded relative to the specified time origin. - - -Unit of Measure (UoM) - -The “uom” attribute is mandatory since time is a continuous property that shall always be expressed in a well defined scale. The only units allowed are obviously time units. - -Constraints - -Similarly to the “Quantity” class, the “constraint” attribute allows further restricting the range of possible time values by using the “AllowedTimes” class defined in . - -Value - -The “value” attribute (or the corresponding value in out-of-band data) is of type “TimePosition” (see ) and must match the constraint. - - - -Requirements applicable to all range classes -This UML package defines four classes “CategoryRange”, “CountRange”, “QuantityRange” and “TimeRange” that are used for representing extents of property values. These classes have common requirements that are expressed in this clause. - -The “value” attribute of all these classes takes a pair of values (with a datatype corresponding to the representation) that represent the inclusive minimum and maximum bounds of the extent. These values must both satisfy the constraints specified by an instance of the class, and be expressed in the unit specified when applicable. - - /req/uml-simple-components/range-value-valid - -Both values specified in the “value” property of an instance of a class representing a property range (i.e. “CategoryRange”, “CountRange”, “QuantityRange” and “TimeRange”) shall satisfy the same requirements as the scalar value used in the corresponding scalar classes. - - -These classes are intentionally not derived from their scalar counterparts because they are aggregates of two values and should be treated as such by implementations (especially by encoding methods defined in this standard). - - - - -CategoryRange Class -The “CategoryRange” class is used to express a value extent using the categorical representation of a property. It defines the same attributes as the “Category” class and those should be used in the same way (see ): - - -CategoryRange Class - - - /req/uml-simple-components/category-range-valid - -All requirements associated to the “Category” class defined in apply to the “CategoryRange” class. - - -Code Space - -The “CategoryRange” class also requires that the underlying code space is well-ordered (i.e. the ordering of the different categories in the code space is clearly defined) so that the range is meaningful. - - /req/uml-simple-components/category-range-codespace-order - -The code space specified by the “codeSpace” attribute of an instance of the “CategoryRange” class shall define a well-ordered set of categories. - - -Example - -A “CategoryRange” can be used to specify the approximate time of a geological event by using names of geological eons, eras or periods such as [Archean — Proterozoic] or [Jurassic — Cretaceous]. - - -Value - -The “value” attribute of the “CategoryRange” class takes a pair of tokens representing the inclusive minimum and maximum bounds of the extent. - - - -CountRange Class -The “CountRange” class is used to express a value extent using the discrete countable representation of a property. It defines the same attributes as the “Count” class and those should be used in the same way (see ): - - -CountRange Class - - -Value - -The “value” attribute of the “CountRange” class takes a pair of integer numbers representing the inclusive minimum and maximum bounds of the extent. - - - -QuantityRange Class -The “QuantityRange” class is used to express a value extent using the discrete countable representation of a property. It defines the same attributes as the “Quantity” class and those should be used in the same way (see ): - - -QuantityRange Class - - -Value - -The “value” attribute of the “QuantityRange” class takes a pair of real numbers representing the inclusive minimum and maximum bounds of the extent. - - - -TimeRange Class -The “TimeRange” class is used to express a value extent of a time property. It defines the same attributes as the “Time” class and those should be used in the same way (see ): - - -TimeRange Class - - - /req/uml-simple-components/time-range-valid - -All requirements associated to the “Time” class defined in apply to the “TimeRange” class. - - -The “value” attribute of the “TimeRange” class takes a pair of values of type “TimePosition” representing the inclusive minimum and maximum bounds of the extent. - - - -Quality Union -The “Quality” class is a union allowing the use of different representations of quality. - -Quality can be indeed be specified as a decimal value, an interval, a categorical value or a textual statement. In our model, quality objects are in fact data components used in a recursive way, as shown on the following diagram: - - -Quality Union - - -These different representations of quality are useful to cover most use cases where simple quality information is provided with the data. - -Examples - -“Quantity” is used to specify quality as a decimal number such as accuracy, variance and mean, or probability. - -“QuantityRange” is used to specify a bounded interval of variation such as a bi-directional tolerance. - -“Category” is used for a quality statement based on a well defined taxonomy such as certification levels. - -“Text” is used to include a textual quality statement such as a comment written by a field operator. - - -The “definition” attribute of the chosen quality component helps to further define the type of quality information given just like any other data component, and the “uom” should be specified in the case of a decimal quality value or interval.Reusing data components to specify quality also allows the inclusion of quality values in the data stream itself. This is useful if the quality is varying and re-estimated for each measurement. This is for example the case in a GPS receiver where both horizontal and vertical errors are given along with the geographic position. See the XML implementation clause for more information on this use case. - - - - - - -NilValues Class -The “NilValues” class is used by all classes deriving from “AbstractSimpleComponent”. It allows the specification of one or more reserved values that may be included in a data stream when the normal measurement value is not available (see ). The UML model of this class is given below: - - -NilValues Class - - -An instance of the “NilValues” class is composed of one to many “NilValue” objects, each of which specifies a mapping between a reserved value and a reason. - -The mandatory “reason” attribute indicates the reason why a measurement value is not available. It is a resolvable reference to a controlled term that provides the formal textual definition of this reason (usually agreed upon by one or more communities). - - /req/uml-simple-components/nil-reason-resolvable - -The “reason” attribute of an instance of the “NilValue” class shall map to the complete human readable definition of the reason associated with the NIL value. - - -The mandatory “value” attribute specifies the data value that would be found in the stream to indicate that a measurement value is missing for the corresponding reason. The range of values allowed here is the range of values allowed by the datatype of the parent data component. - - /req/uml-simple-components/nil-value-type-coherent - -The value used in the “value” property of an instance of the “NilValue” class shall be compatible with the datatype of the parent data component object. - - -This means that when specifying NIL values for a “Quantity” component, only real values are allowed (in most implementations, this includes NaN, -INF and INF) and for a “Count” component only integer values are allowed. - -Consequently, it is also impossible to specify NIL values for a “Boolean” data component since it allows only two possible values. In this case a “Category” component should be used. - -There are no restrictions on the choice of NIL values for “Category” and “Text” components since their datatype is String. - - - -AllowedTokens Class -The “AllowedTokens” class is used to express constraints on the value of a data component represented by a “Text” or a “Category” class. The UML class is shown below: - - -AllowedTokens Class - - -This class allows defining the constraint either by enumerating a list of allowed values by using one or more “value” attributes and/or by specifying a pattern that the value must match. The value must then either be one of the enumerated tokens or match the pattern. - - - -AllowedValues Class -The “AllowedValues” class is used to express constraints on the value of a data component represented by a “Count” or a “Quantity” class. The UML class is shown below: - - -AllowedValues Class - - -This class allows constraints to be defined either by enumerating a list of allowed values and/or a list of inclusive intervals. To be valid, the value must either be one of the enumerated values or included in one of the intervals. The numbers used in the “value” and “interval” properties shall be expressed in the same unit as the parent data component. - - /req/uml-simple-components/allowed-values-unit-coherent - -The scale of the numbers used in the “enumeration” and “interval” properties of an instance of the “AllowedValues” class shall be expressed in the same scale as the value(s) that the constraint applies to. - - -If the parent data component instance is used to define a projected quantity (i.e. when the “axisID” is set), then the constraints given by this class are expressed along the same spatial reference frame axis. - -The number of significant digits can also be specified with the “significantFigures” property though it is only applicable when used with a decimal representation (i.e. within the “Quantity” class). This limits the total number of digits that can be included in the number represented whether a scientific notation is used or not. - -Examples - -All non-zero digits are considered significant. 123.45 has five significant figures: 1, 2, 3, 4 and 5. - -Zeros between two non-zero digits are significant. 101.12 has five significant figures: 1, 0, 1, 1 and 2. - -Leading zeros are not significant. 0.00052 has two significant figures: 5 and 2 and is equivalent to 5.2×10-4 and would be valid even if the number of significant figures is restricted to 2. - -Trailing zeros are significant. 12.2300 has six significant figures: 1, 2, 2, 3, 0 and 0 and would thus be invalid if the number of significant figures is restricted to 4. - - -The number of significant figures and/or an interval constraint (i.e. min/max values) can help a software implementation choosing the best data type to use (i.e. ‘float’ or ‘double’, ‘short’, ‘int’ or ‘long’) to store values associated to a given data component. - - - - -AllowedTimes Class -The “AllowedTimes” class is used to express constraints on the value of a data component represented by a “Time” class. The UML class is shown below: - - -AllowedTimes Class - - -This class is almost identical to the “AllowedValues” class and in fact all properties are used in the same way. The only difference with this class is that the “value” and “interval” properties allow the use of time data types as defined in . - -The constraints given by this class are expressed along the same time reference frame axis as the value attached to the parent data component. - - - -Unions of simple component classes -Several useful groups of classes are also defined in this package. These unions can be used as attribute types and they are shown on the following diagram: - - -Simple Component Unions - - -The “AnyScalar” union groups all classes representing scalar components, numerical or not. The “AnyNumerical” union includes all classes corresponding to numerical scalar representations. The “AnyRange” union regroups all range components. - - - - -Requirements Class: Record Components Package - -Record Components UML Package /req/uml-record-componentsSoftware Implementation or Encoding of the Conceptual Models/req/uml-simple-components - - - -As detailed in the following clauses, this package defines classes modeling record style component types that can be nested to build complex structures from the simple component types introduced in . - -The classes defined in this package are “DataRecord” and “Vector” (other aggregates are defined in the “Choice Components” and “Block Components” packages defined in respectively). The UML model is exposed below: - - -Record Data Components - - - /req/uml-record-components/package-fully-implemented - -The encoding or software shall correctly implement all classes defined in the “Record Components” UML package. - - -As with simple component types, all data aggregates inherit attributes from the “AbstractDataComponent” class. In this case, however, these attributes provide information about the group as a whole rather than its individual components. - -Examples - -A particular “DataRecord” might represent a standard collection of error codes coming from a GPS device. - -A particular “Vector” might represent the linear or angular velocity vector of an aircraft. - -In these two cases, the “definition” attribute should reference a semantic description in a registry, so that the data consumer knows what kind of data the aggregate represents. This semantic description can then be interpreted appropriately by consuming clients: for example to automatically decide how to style the data in visualization software. - - - -DataRecord Class -The “DataRecord” class is modeled on the definition of ‘Record’ from ISO 11404. In this definition, a record is a composite data type composed of one to many fields, each of which having its own name and type definition. Thus it defines some logical collection of components of any type that are grouped for a given purpose. - -As shown on the following figure, the “DataRecord” class in SWE Common is based on a full composite design pattern, such that each one of its “field” can be of a different type, including simple component types as well as any aggregate component type. - - -DataRecord Class - - -The “DataRecord” class derives from the “AbstractDataComponent” class, which is necessary to enable the full composite pattern in which a “DataRecord” can be used to group scalar components, but also other records, arrays and choices recursively. - -Fields - -Each “field” attribute can take an instance of any concrete sub-class of “AbstractDataComponent”, which is the superset of all data component types defined in this standard. The name of each field must be unique within a given “DataRecord” instance so that it can be used as a key to uniquely identify and/or index each one of the record components. - - /req/uml-record-components/record-field-name-unique - -Each “field” attribute in a given instance of the “DataRecord” class shall be identified by a name that is unique to this instance. - - -Example - -A “DataRecord” can group related values such as “temperature”, “pressure” and “wind speed” into a structure called “weather measurements”. This feature is often used to organize the data and present it in a clear way to the user. - -Similarly a “DataRecord” can be used to group values of several spectral bands in multi-spectral sensor data. However, using a “DataArray” may be easier to describe hyper spectral datasets with several hundreds of bands. - - -The slightly different definition of record found in ISO 19103 provides for its schema to be specified in an associated “RecordType”. When used as a descriptor, the “DataRecord” implements the ISO 19103 “RecordType”. When used as a data container, it is self-describing: the descriptive information is then interleaved with the record values. - - - - -Vector Class -The “Vector” class is used to express multi-dimensional quantities with respect to a well defined referenced frame (usually a spatial or spatio-temporal reference frame). This is done by projecting the quantity on one or several axes that define the reference frame and assigning a value to each of the axis projections. - -The “Vector” class is a special case of a record that takes a collection of coordinates that are restricted to a numerical representation. Coordinates of a “Vector” can thus only be of type “Quantity”, “Count” or “Time”. Its UML diagram is shown below: - - -Vector Class - - -Coordinates - -Just like record fields, vector coordinates must have a unique name: - - /req/uml-record-components/vector-coord-name-unique - -Each “coordinate” attribute in a given instance of the “Vector” class shall be identified by a name that is unique to this instance. - - -Reference Frame - -This class contains a mandatory “referenceFrame” attribute that identifies the frame of reference with respect to which the vector quantity is expressed. The coordinates of the vector correspond to values projected on the axes of this frame. - -The “referenceFrame” attribute is inherited by all components of the “Vector”, so that it shall not be redefined for each coordinate. However the “axisID” attribute shall be specified for each coordinate, in order to unambiguously indicate what axis of the reference frame it corresponds to. - - /req/uml-record-components/vector-component-no-ref-frame - -The “referenceFrame” attribute shall be ommited from all data components used to define coordinates of a “Vector” instance. - - - /req/uml-record-components/vector-component-axis-defined - -The “axisID” attribute shall be specified on all data components used as children of a “Vector” instance. - - -Local Frame - -The optional “localFrame” attribute allows identifying the frame of interest, that is to say the frame we are positioning with the coordinate values associated to this component (by opposition to the “referenceFrame” that specifies the frame with respect to which the values of the coordinates are expressed). - - /req/uml-record-components/vector-local-frame-valid - -The “localFrame” attribute of an instance of the “Vector” class shall have a different value than the “referenceFrame” attribute. - - -Correctly identifying the local and reference frame is an important feature that allows chaining several relative positions, something that is essential to correctly compute accurate position of sensor data (especially remote sensing data). - -Example 1 - -A position vector (or location vector) is used to locate the origin of a frame of interest (the local frame) relative to the origin of a frame of reference (the reference frame) through a linear translation. It is composed of three coordinates of type “Quantity”, each with a definition indicating that the coordinate represents a length expressed in the desired unit. The definition of the “Vector” itself should also indicate that it is a “location vector”. - - - -Example 2 - -An orientation vector is used to indicate the rotation of the axes of a frame of interest (the local frame) relative to a frame of reference (the reference frame). It is composed of three coordinates of type “Quantity” with a definition indicating an angular property. The “Vector” definition should indicate the type of orientation vector such as “Euler Angles” or “Quaternion”. Depending on the exact definition, the order in which the coordinates are listed in the vector may matter. - - -“Vector” aggregates are most commonly used to describe position, orientation, velocity, and acceleration within temporal and spatial domains, but can also be used to express relationships between any two coordinate frames. - - - - - -Requirements Class: Choice Components Package - -Choice Components UML Package /req/uml-choice-componentsSoftware Implementation or Encoding of the Conceptual Models/req/uml-simple-components - - - -As detailed in the following clauses, this package defines a class modeling a disjoint union component type. This aggregate type can be nested with other aggregate components to build complex structures. - - /req/uml-choice-components/package-fully-implemented - -The encoding or software shall correctly implement all classes defined in the “Choice Components” UML package. - - - -DataChoice Class -The “DataChoice” class (also called Disjoint Union) is modeled on the definition of ‘Choice’ from ISO 11404. It is a composite component that allows for a choice of child components. By opposition to records that carry all their fields simultaneously, only one item at a time can be present in the data when wrapped in a “DataChoice”. The following diagram shows the “DataChoice” class as implemented in the SWE Common Data Model: - - -DataChoice Class - - -This class implements a full composite pattern, so that each “item” can be any data component, including simple and aggregate types. - -The “choiceValue” attribute is used to represent the token value that would be present in the data stream and that indicates the actual choice selection before the corresponding data can be given (i.e. knowing what choice item was selected ahead of time is necessary for proper decoding of encoded data streams). - -Items - -Each “item” attribute can take an instance of any concrete sub-class of “AbstractDataComponent”, which is the superset of all data component types defined in this standard. The name of each item shall be unique within a given “DataChoice” instance so that it can be used as a key to uniquely identify and/or index each one of the choice components. - - /req/uml-choice-components/choice-item-name-unique - -Each “item” attribute in a given instance of the “DataChoice” class shall be identified by a name that is unique to this instance. - - -The “DataChoice” component is used to describe a data structure (or a part of the structure) that can alternatively contain different types of objects. It can also be used to define the input of a service or process that allows a choice of structures as its input. - -Examples - -NMEA 0183 compatible devices can output several types of sentences in the same data stream. Some sentences include GPS location, while some others contain heading or status data. This can be described by a “DataChoice” which items represent all the possible types of sentences output by the device. - -A Sensor Planning Service (SPS) can define a choice in the tasking messages that the service can accept, thus leaving more possibilities to the users. - - - - - -Requirements Class: Block Components Package - -Block Components UML Package /req/uml-block-componentsSoftware Implementation or Encoding of the Conceptual Models/req/uml-simple-components/req/uml-simple-encodings - - - -This package defines additional aggregate components for describing arrays of values that are designed to be encoded as efficient data blocks. These additional aggregate components are purposely defined in a separate requirement class because they require a more advanced implementation for handling data values as encoded blocks. - -The UML models for these additional aggregate components are shown below: - - -Array Components - - - /req/uml-block-components/package-fully-implemented - -The encoding or software shall correctly implement all classes defined in the “Block Components” UML package. - - -The principle of these two classes is that the number and type of elements contained in the array is defined once, while the actual array values are listed separately without being redefined with each value. In order to achieve this, all array values are encoded as a single data block in the “values” attribute. Consequently, these classes are restricted to cases where all elements are homogeneous and thus can be described only once even though the array data may in fact contain many of them. - -This package also defines the “DataStream” class that is similar in principle to the “DataArray” class but cannot be nested within other aggregate data components. It is a top level class that encapsulates the description of a full data stream. - - -DataArray Class -The “DataArray” class is modeled on the corresponding definition of ISO 11404. This definition states that an array is a collection of elements of the same type (as opposed to a record where each field can have a different type), with a defined size. This class is shown on the following UML diagram: - - -DataArray Class - - -This class implements a full composite pattern, so that the “elementType” can be any data component, including simple and aggregate types. It can be used to group identical scalar components as well as records, choices and arrays in a recursive manner. - -Element Count - -The “elementCount” attribute is used to indicate the size of the array, that is to say the number of elements of the given type in the array. Note that each element is not necessarily scalar but can be a record, another array, etc. - -Element Type - -The content of the “elementType” attribute defines the exact structure of each element in the array. The data component used and all of its children shall not include any inline values, as these will be block encoded in the “values” attribute of the parent “DataArray”. - - /req/uml-block-components/array-component-no-value - -Data components that are children of an instance of a block component shall be used solely as data descriptors. Their values shall be block encoded in the “values” attribute of the block component rather than included inline. - - -However, the “DataArray” class itself, like any other data component can be used either as a data descriptor or as a data container. To use it as a data descriptor the “encoding” and “values” attributes are not set. To use it as a data container, these attributes are both set as described below. - -Encoding and Values - -The “encoding” and “values” fields are there to provide array data as an efficient block which can be encoded in several ways. The different encoding methods are described in . The “encoding” field shall have a value if the “values” field is present, and the data shall be encoded using the specified encoding. - - /req/uml-block-components/array-values-properly-encoded - -Whenever an instance of a block component contains values, an encoding method shall be specified by the “encoding” property and array values shall be encoded as specified by this method. - - -The choice of simple encodings (defined in the “Simple Encodings” package) allows encoding data as text using a delimiter separated values (DSV, a variant of CSV) format or as XML tagged values. The “Advanced Encodings” package defines binary encodings that can be used to efficiently package large datasets. - -Nested Components - -By combining instances of “DataArray”, “DataRecord” and scalar components, one can obtain the complex data structures that are necessary to fully describe any kind of sensor data. In particular, the possibility of nesting a “DataRecord” or “Vector” inside a “DataArray” allows defining structures such as trajectories, profiles, multi-band images, etc. - -Example 1 - -The “DataArray” class can be used to describe a simple 1D array of measurements such as radiance values obtained using a 12000 cells (1 row) CCD strip for instance. This can be done by using the “Quantity” class as the element type. In such a case, describing the dataset as a “DataRecord” would be a very repetitive task given the number of elements (12000 in this case!). - - - -Example 2 - -The “DataArray” class can be used as a descriptor for a trajectory dataset by using a vector of [latitude, longitude] coordinates as its element type. Note that this can also be considered as a 1D coverage in a 2D CRS. - - - - -Multi-dimensional Arrays - -Since the “DataArray” class alone can only represent 1-dimensional arrays, the construction of multi-dimensional arrays is done by nesting “DataArray” objects inside each other. - -Example - -The structure of panchromatic imagery data can be described with two nested arrays, which sizes indicate the two dimensions of the image. A “Quantity” is used as the element type of the nested array in order to indicate that the repeated element of the 2D array is of type infrared radiance with a given unit. - - - -In this example, the image is described as an array of rows, each row being an array of samples. It is also possible to describe an image as an array of columns by reversing the two dimensions. Note that this would change the order in which the data values would appear in a stream (by rows vs. by columns). - - -Array Size - -One powerful feature of the “DataArray” model is that it allows for the element count to be either fixed or variable, thus allowing the description of data streams with variable number of repetitive elements as is often the case with many kinds of sensor. - -In a fixed size array, the number of elements can be provided in the descriptor as an instance of the “Count” class with an inline value. This value is only present in the data description and not in the encoded block of array values. The definition of the “Count” instance is not required. - -In a variable size array, the “elementCount” attribute either contains an instance of the “Count” class with no value or references an instance of a “Count” class in a parent or sibling data component. The value giving the actual array size is then included in the stream, before the array values themselves, so that the block can be properly decoded. One obvious implementation constraint is that the value representing the array size must be received before the array values. This is detailed further in the XML implementation section. - -Examples - -Argo profiling floats can measure ocean salinity and temperature profiles of variable lengths by diving at different depths and depending on the conditions. A variable size “DataArray” could be used to describe their output data as well as a dataset aggregating data from several Argo floats. - -Variable size arrays can often be used to avoid unnecessary padding of fixed size array data. However for efficiency reasons (usually to enable fast random access w/o preliminary indexation), padding can also be specified in SWE Common when using the binary encoding. - - -Array Semantics - -As with any other data component, the “name” and “description” can be used to better describe the array and more importantly the “definition” attribute can be used to formally indicate the semantics behind the array. - -Example - -When a “DataArray” is used to package data relative to the spectral response of a sensor, the array “definition” attribute can be used to point to the formal out-of-band definition of the “spectral response” concept. - -Similarly a “DataArray” used to describe the output data of an Argo float would have its “definition” attribute reference the formal definition of a “profile”. - - -The value of the “definition” attribute of the “Count” instance used as the “elementCount” is also especially important, since it is used to define the meaning of the array dimension. Thanks to this, it is possible to tag the dimension of an array as spatial, temporal, spectral, or any other kind. However it is not mandatory as it is on other simple components. - -Examples - -In the CCD strip example described as a 1D array, the array index is the cell number in the strip. - -In the 2D image example, the outer array index is the row number, while the inner array index is the column (or sample) number. - -In a 1D array representing a time series, the array index is along the temporal dimension. - -In a 2D array representing a spatial coverage, the two array indices are along spatial dimensions. - -In a 3D array representing hyper-spectral imagery, the two first arrays have indices along spatial dimension while the most inner array is indexed along the spectral dimension. - - -This extra information can be used by software to make decisions (or at least ask the user by providing him this information) about how to represent or even interpolate the data. - - - -Matrix Class -The “Matrix” extends the “DataArray” class by providing a reference frame within which the matrix elements are expressed and a local frame of interest. The UML diagram of this class is shown below: - - -Matrix Class - - -The “Matrix” class is usually used to represent a position matrix or a tensor quantity of second or higher order. Each matrix element is expressed along the axis of a well defined reference frame. - -Element Type - -The “elementType” attribute inherited from the “DataArray” class can only take a nested “Matrix” instance or a scalar numerical component. Nested matrix objects allow the full description of N-dimensional matrices. - - /req/uml-block-components/matrix-element-type-valid - -The “elementType” attribute of an instance of the “Matrix” class can only be an instance of “Matrix” or of the classes listed in the “AnyNumerical” union. - - -Reference Frame - -The “referenceFrame” attribute is used in the same way as with the “Vector” class to specify the frame of reference with respect to which the matrix element values are expressed. It is inherited by all child components. - -Local Frame - -The “localFrame” attribute is used to identify the frame of interest, that is to say the frame whose orientation or position is given with the matrix in the case where it is a position matrix. If the matrix does not specify position, “localFrame” should not be used. Whether an instance of the “Matrix” class represents a position matrix or not should be disambiguated by setting the value of its “definition” attribute. - -Examples - -The “Matrix” class can be used to represent for instance: -- A 3D 3×3 stress tensor -- A 4D 4×4 homogeneous affine transformation matrix - -In particular it is often used to specify the orientation of an object relative to another one, like for instance the attitude of a plane relative to the earth. - - - - -DataStream Class -The “DataStream” class has a structure similar than the “DataArray” class but is not a data component (i.e. it does not derive from “AbstractDataComponent”) and thus cannot be used as a child of other aggregate components. Below is its UML diagram: - - -DataStream Class - - -This class should be used as the wrapper object to define a complete data stream. It defines a data stream as containing a list of elements with an arbitrary complex structure. An important feature is that the data stream can be open ended (i.e. the number of elements is not known in advance) and is thus designed to support real time streaming of data. - -Element Count - -The “elementCount” attribute is optional and can be used to indicate the number of elements in the stream if it is known. This is done by instantiating an instance of the “Count” class whose “value” attribute would be set to the number of elements. - -Element Type - -The “elementType” attribute is used to define the structure of each element in the stream. The data component used as the element type and all of its children shall be used solely as data descriptors, meaning that they shall not include any inline values. These values will instead be block encoded in the “values” attribute of the parent “DataStream”. - -Encoding and Values - -The “encoding” and “values” fields are there to provide the stream values as an efficient block which can be encoded in several ways. The same encoding methods as for the “DataArray” class are available and are described in . The “values” attribute is optional as the DataStream class can be used as a simple descriptor. - - /req/uml-block-components/datastream-array-valid - -Data components that are children of an instance of the ”DataStream” class shall be used solely used as data descriptors. Their values shall never be included inline since they will be block encoded in the stream described by the ”DataStream”. - - - - - -Requirements Class: Geometry Components Package - -Geometry Components UML Package /req/uml-geom-componentsSoftware Implementation or Encoding of the Conceptual Models/req/uml-simple-components - - - -This package defines an additional component for representing simple feature geometries, as defined by , within an encoded SWE Common data block or stream. - - /req/uml-geom-components/package-fully-implemented - -The encoding or software shall correctly implement all classes defined in the “Geometry Components” UML package. - - - -Geometry Class -The “Geometry” class extends the “AbstractDataComponent” class with a value of type geometry and a constraint that can be used to limit the types of allowed geometries. This class is shown on the following UML diagram: - - -Geometry Class - - -Coordinate Reference System - -The “crs” attribute provides the URI of the coordinate reference system w.r.t which the geometry coordinates are expressed. The unit of the coordinates is also provided by the coordinate reference system. - - /req/uml-geom-components/srs-valid - -The “srs” attribute shall reference the definition of a valid 2D or 3D spatial reference system. - - -Constraints - -The “constraint” attribute is used to restrict the possible geometries that can be provided using this component when it is used as a descriptor. The constraint is provided using the “AllowedGeometries” class that includes a list of allowed geometry types. - -Value - -The value of this component must be a geometry instance, whether it’s provided inline using the “value” attribute, or as part of a datastream. - - /req/uml-geom-components/geom-value-valid - -The “value” attribute shall be one of the concrete geometry value classes defined in : “Point”, “MultiPoint”, “LineString”, “MultiLineString”, “Polygon”, or “MultiPolygon”. - - -Encoding sections in this standard define how the geometry value is encoded: - -GML in the XML implementation and XML encoding rules - -GeoJSON in the JSON implementation and JSON encoding rules - -WKT in the Text encoding rules - -WKB in the Binary encoding rules - - - - - - - -Requirements Class: Simple Encodings Package - -Simple Encodings UML Package /req/uml-simple-encodingsSoftware Implementation or Encoding of the Conceptual Models/req/core - - - -Encoding methods describe how structured array and stream data is encoded into a low level byte stream (see related concepts in ). Once encoded as a sequence of bytes, the data can then be transmitted using various digital means such as files on a disk or network connections. - -This package includes two classes that provide definitions of simple encoding methods. They are used as descriptors of the method used to encode data component values wrapped by aggregate classes defined in the “Block Components” package. There model is shown on the diagram below: - - -Simple Encodings - - - /req/uml-simple-encodings/package-fully-implemented - -The encoding or software shall correctly implement all classes defined in the “Simple Encodings” UML package. - - -All classes defining encoding methods derive from a common abstract class called “AbstractEncoding”. Extensions to this standard that define new encoding methods shall derive encoding classes from this abstract class. - -The intent of this standard is to provide a set of core encodings covering most common needs. Each encoding has specific benefits that match the needs of different applications. Sometimes several encodings of the same dataset can be offered in order to satisfy several types of consumers and/or use cases. - -In the model provided in this standard, the encoding specification is provided separately from the data component tree describing the dataset structure, thus enabling several encodings to be applied to the same data structure without changing it. - - -TextEncoding Class -The “TextEncoding” class defines a method allowing encoding arbitrarily complex data using a text based delimiter separated values (DSV) format. The class used to specify this encoding method is shown below: - - -TextEncoding Class - - -The “tokenSeparator” attribute specifies the characters to use for separating each scalar value from one another. Scalar values appear sequentially in the stream alternatively with the token separator characters, in an order unambiguously defined by the data component structure. The detailed rules are given in the implementation . - -The “blockSeparator” attribute specifies characters used to mark the end of a “block”, corresponding to the complete structure defined by the data component tree (in a “DataArray”, “Matrix” or “DataStream” one block corresponds to one element, that is to say the structure defined by the “elementType” property). Stream or array data can then be composed of several blocks of the same type separated by block separator characters. - -The “decimalSeparator” attribute specifies the character used as the decimal point in decimal number. This attribute is optional and the default is a period (‘.’). - -Example - -In the case of a “DataStream” with an element type that is a “DataRecord” containing three fields – one of type “Category” and two of type “Quantity” — a data stream encoded using the Text method would look like the following: - -STATUS_OK,24.5,1022.5¶ -STATUS_OK,24.5,1022.5¶ -STATUS_OK,24.5,1022.5¶ - -Where , (comma) is the token separator and (carriage return) is the block separator (i.e. this is the CSV format). -Note that there could be many more values in a single block if the data set has a large number of fields, or if it contains an array of values. - - -The “collapseWhiteSpaces” attribute is a boolean flag used to specify if extra white spaces (including line feeds, tabs, spaces and carriage returns) surrounding the token and block separators should be ignored (skipped) when processing the stream. This is useful for encoded blocks of data that are embedded in an XML document, since formatting (indenting with spaces or tabs especially) is often done in XML content. - -This type of encoding is used when compactness is important but balanced by a desire of human readability. This type of encoding is easily readable (for debugging or manual usage) as well as easily imported in various spreadsheet, charting or scientific software. - -The main drawback of such an encoding is the impossibility of locating an error in the stream with certitude. Secondly, if only one expected value is missing, the whole block is usually lost since the parser cannot resynchronize correctly before the next block separator. This last issue can however be solved by transmitting this type of encoded stream using error resilient protocols when needed. - - - - -Requirements Class: Advanced Encodings Package - -Advanced Encodings UML Package /req/uml-advanced-encodingsSoftware Implementation or Encoding of the Conceptual Models/req/uml-simple-encodings - - - -This package defines an additional encoding method for packaging sensor data as raw or base 64 binary blocks. When this package is implemented, the binary encoding method is usable, as any other encoding method, within the “DataArray” and “DataStream” classes. - - /req/uml-advanced-encodings/package-fully-implemented - -The encoding or software shall correctly implement all classes defined in the “Advanced Encodings” UML package. - - - -BinaryEncoding Class -The “BinaryEncoding” class defines a method that allows encoding complex structured data using primitive data types encoded directly at the byte level, in the same way that they are usually represented in memory. - -The binary encoding method can lead to very compact streams that can be optimized for efficient parsing and fast random access. However this comes with the lack of human readability of the data and sometimes lack of compatibility with other software (i.e. software that is not SWE Common enabled). - -More information is needed to fully define a binary encoding, so the model is more complex than the other encodings. It is shown below: - - -BinaryEncoding Class - - -The main class “BinaryEncoding” specifies overall characteristics of the encoded byte stream such as the byte order (big endian or little endian) and the byte encoding (raw or base64). The two corresponding attributes, respectively “byteOrder” and “byteEncoding” are mandatory. Base64 encoding is usually chosen to insert binary content within an XML document. - -The “byteLength” attribute is optional and can be used to specify the overall length of the encoded data as a total number of bytes. This should be indicated whenever possible if the data size is known in advance as it can be useful for efficient memory allocation. - -The “BinaryEncoding” class also has several “member” attributes that contain detailed information about parts of the data stream. This attribute can take a choice of instance of two classes: “Component” or “Block”. - -The “Component” class is used to specify binary encoding details of a given scalar component in the stream. The following information can be provided for each scalar field: - -The “ref” attribute allows identifying the data component in the dataset structure for which we’re specifying the encoding parameters. Soft-typed property names are used to uniquely identify a given component in the tree. - -The “dataType” attribute allows selecting a data type among commonly accepted ones such as ‘byte’, ‘short’, ‘int’, ‘long’, ‘double’, ‘float’, ‘string’, etc… - -The “byteLength” or “bitLength” attributes are mutually exclusive and used to further specify the length of the data type in the case where it is not a standard length (i.e. to encode integer numbers on more than 8 bytes or less than 8 bits for instance). - -The “significantBits” can be used to signal that only some of the bits of the data type are actually used to carry the value (i.e. a value may be encoded as a byte but only use 4 bits to encode a value between 0 and 15). This is mostly informational. - -The “encryption” attribute can be used to select the method with which the value is encrypted before being written to the stream. - - - -The “Block” class is used to specify binary encoding details of a given aggregate component representing a block of values in the data stream. This is used either to specify padding before and/or after a block of data or to enable compression or encryption of all or part of a dataset. - -The “ref” attribute allows identifying the data component in the dataset structure for which we’re specifying the encoding parameters. Soft-typed property names are used to uniquely identify a given component in the tree. - -The optional “byteLength” attribute allows indicating the overall length of the encoded block to facilitate memory allocation. - -The “paddingBytes-before” and “paddingBytes-after” are used to specify the number of empty bytes (i.e. usually 0 bytes) that are inserted in the stream respectively before and after data for the referenced component. This is sometimes used to align data on N-bytes block for faster access. - -The “encryption” attribute identifies the encryption method that is used to encrypt the block of data before it is inserted in the stream. - -The “compression” attribute identifies the compression method that is used to compress the block of data before it is inserted in the stream. - - - -This standard does not define any concrete encryption and compression methods, so that software implementations of this requirement class are not required to support any value in the “encryption” and “compression” attributes of the “Component” and “Block” classes. Extensions of this standard that define binary encryption and compression methods shall describe how the encrypted or compressed data is inserted in the SWE Common data stream. - - - - - -JSON Implementation (normative) -This standard defines a normative JSON implementation of the conceptual models presented in . The standardization target type for all requirements classes in this clause is a JSON instance document that seeks compliance with this JSON encoding model. - -JSON schemas defined in this section are a direct implementation of the UML conceptual models described in . They have been generated from these models by strictly following well-defined encoding rules. All attributes and composition/aggregation associations contained in the UML models are encoded as JSON object members. - -All JSON examples given in this section are informative and are used solely for illustrating features of the normative model. Many of these examples reference semantic information by using URLs that resolve to the following online ontologies: - -The OGC online registry at . - -The QUDT quantity kinds ontology at . - -The SWEET ontology maintained by ESIP at . - -The MMI ontology registry and repository at . - - - -Some of the JSON examples contain inline values while others don’t. This is meant to illustrate that the component objects defined by the JSON implementation can be used as value objects for properties of larger metadata objects (e.g. SensorML system descriptions), but can also be used as descriptors to describe, for instance, the content of a datastream or the rangeset of a coverage. - - -Requirements Class: Basic Types and Simple Components JSON Schemas - -Basic Types and Simple Components JSON Schemas /req/json-simple-componentsJSON Document/req/uml-simple-components - - - -Validation patterns that implement all classes defined respectively in the “Basic Types” and “Simple Components” UML packages are provided as JSON schema files at . - -The entry point schema used for validation is “sweCommon.json”. - - /req/json-simple-components/schema-valid - -The JSON document instance shall be valid with respect to the JSON schema “sweCommon.json”. - - - -General JSON Principles -The following rules were used when generating the JSON schemas: - -Classes are implemented as JSON Objects; - -Any property with a multiplicty greater than one is implemented as a JSON Array and its name is converted to plural form; - -Textual fields are implemented as a JSON String; - -Decimal fields are implemented as a union of JSON Number and JSON String value types (the string value allowing for special values, see ); - -ISO8601 date/time fields are implemented as a JSON String with a union of date/time formats. - - - - - -Special Numerical Values -JSON does not define special decimal values for ‘Not a Number’, positive infinity and negative infinity. It is thus necessary to encode them as strings. - - /req/json-simple-components/special-numerical-values - -The special JSON Strings NaN, -Infinity and +Infinity shall be allowed as the inline or out-of-band value for Quantity and Time (and Count?) components (except when the Time component uses the ISO 8601 format). - - -These special value strings have been chosen because they are supported natively by Javascript/ECMA Script implementations. The + unary operator can be used to transparently parse one of these strings to a Number type (see ). - -These values also correspond to infinities and NaN values defined in . - - - - -Abstract Base Classes -The three abstract base classes defined in the UML models are implemented by the following JSON schemas: - -AbstractSweIdentifiable.json - -AbstractDataComponent.json - -AbstractSimpleComponent.json - - - - /req/json-simple-components/definition-resolvable - -The “definition” object member defined in the “AbstractDataComponent.json” schema shall contain a URI that can be resolved to the complete human readable definition of the property that is represented by the data component. - - - /req/json-simple-components/inline-value-constraint-valid - -The inline value included in a JSON instance validating against the “AbstractSimpleComponent.json” schema shall satisfy the constraints specified by this instance. - - - - -Boolean Object -The “Boolean” object is the JSON schema implementation of the “Boolean” UML class defined in . The schema for this class is provided in Boolean.json. - -The following snippet shows an example boolean component with an inline value: - -{ - "type": "Boolean", - "definition": "http://sweet.jpl.nasa.gov/2.0/physDynamics.owl#Motion", - "label": "Motion Detected", - "description": "True when motion was detected in the room", - "value": true -} - - -The next snippet is an example of boolean component used as data descriptor, hence with no value: - -{ - "type": "Boolean", - "definition": "http://mmisw.org/ont/q2o/test/timeContinuityTest", - "label": "Time Continuity Test", - "description": "Set to true to enable time continuity test" -} - - - - -Text Object -The “Text” object is the JSON schema implementation of the “Text” UML class defined in . The schema for this class is provided in Text.json. - -Constraints on a “Text” representation are expressed using the . - -The following snippets show how the “Text” component can be used to define human readable text fields, as well as any other alpha-numerical properties: - -{ - "type": "Text", - "definition": "http://sensorml.com/ont/swe/property/Manufacturer", - "label": "Manufacturer", - "value": "Ocean Devices, Inc." -} - - -{ - "type": "Text", - "definition": "http://sensorml.com/ont/x-swe/property/VehicleRegistrationNumber", - "label": "License Plate", - "value": "45ER-EJK-235" -} - - -Constraints can also be used — typically when the component is used as a descriptor — to limit the possible text values, either by enumeration or a regular expression pattern: - -{ - "type": "Text", - "definition": "http://sensorml.com/ont/x-swe/property/VehicleRegistrationNumber", - "label": "License Plate", - "constraint": { - "pattern": "^[0-9][A-Z]{4}-[A-Z]{3}-[0-9]{3}$" - } -} - - -This standard does not define any limit on the size of the text data than can be included as the value of a “Text” component, either inline or as part of a datastream. Implementations are responsible for documenting this upper limit. - - - - -Category Object -The “Category” object is the JSON schema implementation of the “Category” UML class defined in . The schema for this class is provided in Category.json. - -Constraints on a “Category” representation are expressed using the . - -The following examples illustrate how the “Category” component is used to define various fields with categorical representations. The categorical scale is defined either via a code space, an enumeration constraint, or both (in which case the enumeration constraint defines a subset of possible values from a code space): - -{ - "type": "Category", - "definition": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#GeologicTime", - "label": "Geological Period", - "description": "Name of the geological period according to the nomenclature of the International Commission on Stratigraphy", - "codeSpace": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#Period", - "value": "Jurassic" -} - - -{ - "type": "Category", - "definition": "http://sweet.jpl.nasa.gov/2.0/biol.owl#Species", - "label": "Bird Species", - "description": "Bird species according to the classification of the World Bird Database", - "codeSpace": "http://www.birdlife.org/datazone/species/index.html" -} - - - - -Count Object -The “Count” object is the JSON schema implementation of the “Count” UML class defined in . The schema for this class is provided in Count.json. - -Constraints on a “Count” representation are expressed using the . - -The following snippet shows a “Count” component used to define the size of a row in a raster dataset: - -{ - "type": "Count", - "definition": "http://www.opengis.net/def/property/OGC/0/NumberOfPixels", - "label": "Row Size", - "description": "Number of pixels in each row of the image", - "value": 1024 -} - - - - -Quantity Object -The “Quantity” object is the JSON schema implementation of the “Quantity” UML class defined in . The schema for this class is provided in Quantity.json. - -Constraints on a “Quantity” representation are expressed using the . - -The unit of measure is defined using either a URI or a code expressed using the Unified Code for Units of Measure () standard. - - /req/json-simple-components/ucum-code-used - -Whenever it can be constructed using the specification, the unit of measure shall be specified using a UCUM code as the value of the “uom/code” property. Otherwise the “uom/href” property shall be used to reference an external unit definition. - - -The following snippets show how “Quantity” components are used to define various (observable or controllable) properties with continuous decimal representations: - -{ - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Temperature", - "label": "Outside Temperature", - "description": "Outside temperature taken at the top of the antenna", - "uom": { "code": "Cel" }, - "value": 21.5 -} - - -{ - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/SpectralRadiance", - "label": "Radiance", - "description": "Radiance measured on band1", - "uom": { "code": "W.m-2.Sr-1.um-1" }, - "value": 2.83e-2 -} - - -{ - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/HeightAboveMSL", - "referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/5714", - "axisID": "H", - "label": "MSL Height", - "description": "Height above mean sea level", - "uom": { "code": "m" } -} - - - - -Time Object -The “Time” object is the JSON schema implementation of the “Time” UML class defined in . The schema for this class is provided in Time.json. - -Constraints on a “Time” representation are expressed using the . - -The unit of measure is defined using either a URI or a code expressed using the Unified Code for Units of Measure () standard. When the temporal property is provided in the format, this is indicated by using a specific URI. - - /req/json-simple-components/iso8601-uom-used - -When ISO 8601 notation is used to express the value associated to a “Time” element, the URI “http://www.opengis.net/def/uom/ISO-8601/0/Gregorian” shall be used as the value of the “uom/href” property. - - -The following snippets show how “Time” components are used to define various temporal properties, with different time scales: - -ISO8601 formatted time stamp based on the UTC time standard: - -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC-EO/0/MissionStartTime", - "referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC", - "localFrame": "urn:org:systems:001#MISSION-START-TIME", - "label": "Flight Time", - "description": "Time at take-off in UTC", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - }, - "value": "2009-01-26T10:21:45+01:00" -} - - -ISO8601 formatted time stamp based on the GPS time standard: - -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/USNO/0/GPS", - "label": "Sampling Time", - "description": "Time at which the measurement was made", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - }, - "value": "2009-11-05T16:29:26Z" -} - - -Time stamp in seconds past the Unix epoch: - -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/RunTime", - "referenceTime": "1970-01-01T00:00:00Z", - "label": "Model Run Time", - "description": "Run time of the model expressed as a Unix time", - "uom": {"code": "s" }, - "value": 1257415633 -} - - -Time stamp in seconds past a custom time reference called MISSION_START_TIME: - -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC-EO/0/ScanStartTime", - "referenceFrame": "urn:org:systems:001#MISSION-START-TIME", - "localFrame": "urn:org:systems:001#SCAN-START-TIME", - "label": "Scanline Time", - "description": "Acquisition time of the scan line", - "uom": { "code": "s" } -} - - - - -CategoryRange Object -The “CategoryRange” object is the JSON schema implementation of the “CategoryRange” UML class defined in . The schema for this class is provided in CategoryRange.json. - -“CategoryRange” objects share most properties with “Category” object, as shown on the following snippet: - -{ - "type": "CategoryRange", - "definition": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#GeologicTime", - "label": "Approximate Dating", - "description": "Approximate geological dating expressed as a range of geological eras", - "codeSpace": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#Era", - "value": ["Paleozoic", "Mesozoic"] -} - - - - -CountRange Object -The “CountRange” object is the JSON schema implementation of the “CountRange” UML class defined in . The schema for this class is provided in CountRange.json. - -“CountRange” objects share most properties with “Count” object, as shown on the following snippet: - -{ - "type": "CountRange", - "definition": "http://www.opengis.net/def/property/OGC/0/ArrayIndex", - "label": "Index Range", - "value": [0, 3000] -} - - - - -QuantityRange Object -The “QuantityRange” object is the JSON schema implementation of the “QuantityRange” UML class defined in . The schema for this class is provided in QuantityRange.json. - -“QuantityRange” objects share most properties with the “Quantity” object, as shown on the following snippet: - -{ - "type": "QuantityRange", - "definition": "http://mmisw.org/ont/mmi/device/OperationalRange", - "label": "Operational Range", - "description": "Operational temperature range of the cryogenic thermometer", - "uom": { "code": "K" }, - "value": [10, 300] -} - - - - -TimeRange Object -The “TimeRange” object is the JSON schema implementation of the “TimeRange” UML class defined in . The schema for this class is provided in TimeRange.json. - -“TimeRange” objects share most properties with the “Time” object, as shown on the following snippet: - -{ - "type": "TimeRange", - "definition": "http://www.opengis.net/def/property/EO/0/SurveyPeriod", - "referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC", - "label": "Survey Period", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - }, - "value": ["2008-01-05T11:02:54Z", "2009-11-05T16:29:26Z"] -} - - - - -NilValues Object -The “NilValues” object is the JSON schema implementation of the “NilValues” UML class defined in . Schema patterns for this class are provided in basicTypes.json. Several sub-patterns are defined for the decimal, integer and text cases. - -Examples of NIL values definitions are provided below, in the case of numerical, countable and textual representations: - -{ - "type": "Quantity", - "definition": "http://sweet.jpl.nasa.gov/2.0/physRadiation.owl#IonizingRadiation", - "label": "Radiation Dose", - "description": "Radiation dose measured by Gamma detector", - "uom": { "code": "uR" }, - "nilValues": [ - { "reason": "http://www.opengis.net/def/nil/OGC/0/BelowDetectionRange", "value": "-Infinity" }, - { "reason": "http://www.opengis.net/def/nil/OGC/0/AboveDetectionRange", "value": "Infinity" } - ] -} - - -{ - "type": "Count", - "definition": "http://sweet.jpl.nasa.gov/2.0/physRadiation.owl#Radiance", - "label": "Band 1", - "nilValues": [ - { "reason": "http://www.opengis.net/def/nil/OGC/0/BelowDetectionRange", "value": 0 }, - { "reason": "http://www.opengis.net/def/nil/OGC/0/AboveDetectionRange", "value": 255 } - ] -} - - -{ - "type": "Text", - "definition": "http://sensorml.com/ont/x-swe/property/VehicleRegistrationNumber", - "label": "License Plate", - "nilValues": [ - { "reason": "http://www.opengis.net/def/nil/OGC/0/Missing", "value": "Missing" }, - { "reason": "http://www.opengis.net/def/nil/OGC/0/Unknown", "value": "Unknown" } - ] -} - - - - -AllowedTokens Object -The “AllowedTokens” object is the JSON schema implementation of the “AllowedTokens” UML class defined in . The schema for this class is provided in basicTypes.json (see #definitions/AllowedTokens). - -Examples of constraints for textual or categorical properties are provided below: - -{ - "type": "Text", - "definition": "http://sensorml.com/ont/swe/property/ModelNumber", - "label": "Model Number", - "constraint": { - "pattern": "^[0-9][A-Z]{3}[0-9]{2}S1$" - } -} - - -{ - "type": "Category", - "definition": "http://www.opengis.net/def/property/OGC/0/SensorStatus", - "label": "Sensor Status", - "description": "Current connection status of the sensor", - "constraint": { - "values": [ "Off", "Stand-by", "Ready", "Busy" ] - } -} - - - - -AllowedValues Object -The “AllowedValues” object is the JSON schema implementation of the “AllowedValues” UML class defined in . The schema for this class is provided in basicTypes.json (see #definitions/AllowedValues). - -Examples of constraints for various numerical properties are provided below: - -{ - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Angle", - "label": "Planar Angle", - "uom": { "code": "deg" }, - "constraint": { - "intervals": [[-180, 180]] - } -} - - -{ - "type": "Count", - "definition": "http://www.opengis.net/def/property/OGC/0/NumberOfPixels", - "label": "Image Width", - "constraint": { - "values": [256, 512, 1024] - } -} - - -{ - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude", - "label": "Latitude", - "uom": { "code": "deg" }, - "constraint": { - "intervals": [[-90, 90]], - "significantFigures": 6 - } -} - - -Numerical constraints can also be unbounded: - -{ - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/RadialDistance", - "label": "Radial Distance", - "description": "Radial distance is always positive", - "uom": { "code": "m" }, - "constraint": { - "intervals": [[0, "+Infinity"]] - } -} - - - - -AllowedTimes Object -The “AllowedTimes” object is the JSON schema implementation of the “AllowedTimes” UML class defined in . The schema for this class is provided in basicTypes.json (see #definitions/AllowedTimes). - -Examples of constraints for various temporal properties, expressed as ISO-8601 or decimal values, are provided below: - -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/USNO/0/GPS", - "label": "Acquisition Time", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - }, - "constraint": { - "intervals": [["2009-01-01T00:00:00Z", "+Infinity"]] - } -} - - -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "urn:org:systems:001#SCAN-START-TIME", - "label": "Lidar Pulse Time", - "description": "Time stamp of LiDAR pulse relative to start of scan", - "uom": { "code": "ms" }, - "constraint": { - "intervals": [[0, 1e6]] - } -} - - - - - -Requirements Class: Record Components JSON Schema - -Record Components JSON Schema /req/json-record-componentsJSON Document/req/uml-record-components/req/json-simple-components - - - - -DataRecord Object -The “DataRecord” object is the JSON schema implementation of the “DataRecord” UML class defined in . The schema for this class is provided in DataRecord.json. - -The example below describes a record composed of weather data fields. In this case the “DataRecord” element is used as a descriptor for records of data that are provided as part of a datastream: - -{ - "type": "DataRecord", - "label": "Weather Data Record", - "fields": [ - { - "name": "time", - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC", - "label": "Sampling Time", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - } - }, - { - "name": "temperature", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/air_temperature", - "label": "Air Temperature", - "uom": { "code": "Cel" } - }, - { - "name": "pressure", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/air_pressure_at_mean_sea_level", - "label": "Air Pressure", - "uom": { "code": "mbar" } - }, - { - "name": "windSpeed", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/wind_speed", - "label": "Wind Speed", - "uom": { "code": "km/h" } - }, - { - "name": "windDirection", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/wind_to_direction", - "label": "Wind Direction", - "uom": { "code": "deg" } - } - ] -} - - -{ - "type": "DataRecord", - "definition": "urn:x-ogc:def:property:CSM::RadialDistortionCoefficients", - "label": "Radial Distortion Coefficients", - "fields": [ - { - "name": "k1", - "type": "Quantity", - "definition": "urn:x-ogc:def:property:CSM::DISTOR_RAD1", - "label": "Coef k1", - "uom": { "code": "mm-2" }, - "value": 1.92709e-5 - }, - { - "name": "k2", - "type": "Quantity", - "definition": "urn:x-ogc:def:property:CSM::DISTOR_RAD2", - "label": "Coef k2", - "uom": { "code": "mm-2" }, - "value": -5.14206e-10 - }, - { - "name": "k3", - "type": "Quantity", - "definition": "urn:x-ogc:def:property:CSM::DISTOR_RAD3", - "label": "Coef k3", - "uom": { "code": "mm-2" }, - "value": -3.33356e-12 - } - ] -} - - - - -Vector Object -The “Vector” object is the JSON schema implementation of the “Vector” UML class defined in . The schema for this class is provided in Vector.json. - -{ - "type": "Vector", - "definition": "http://www.opengis.net/def/property/OGC/0/PlatformLocation", - "referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/4326", - "label": "Platform Location", - "coordinates": [ - { - "name": "lat", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude", - "label": "Latitude", - "axisID": "Lat", - "uom": { "code": "deg" }, - "value": 45.36 - }, - { - "name": "lon", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Longitude", - "label": "Longitude", - "axisID": "Lon", - "uom": { "code": "deg" }, - "value": 5.2 - } - ] -} - - -{ - "type": "Vector", - "definition": "http://qudt.org/vocab/quantitykind/LinearVelocity", - "referenceFrame": "http://www.opengis.net/def/crs/OGC/0/ECI_J2000", - "label": "Platform Velocity", - "coordinates": [ - { - "name": "vx", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Speed", - "label": "Velocity X", - "uom": { "code": "m/s" } - }, - { - "name": "vy", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Speed", - "label": "Velocity Y", - "uom": { "code": "m/s" } - }, - { - "name": "vz", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Speed", - "label": "Velocity Z", - "uom": { "code": "m/s" } - } - ] -} - - -{ - "type": "Vector", - "definition": "http://sensorml.com/ont/swe/property/RotationQuaternion", - "referenceFrame": "http://www.opengis.net/def/crs/OGC/0/ECI_J2000", - "localFrame": "urn:org:systems:001#PLATFORM_FRAME", - "label": "Platform Orientation", - "coordinates": [ - { - "name": "qx", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Coordinate", - "label": "QX", - "uom": { "code": "1" } - }, - { - "name": "qy", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Coordinate", - "label": "QY", - "uom": { "code": "1" } - }, - { - "name": "qz", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Coordinate", - "label": "QZ", - "uom": { "code": "1" } - }, - { - "name": "qw", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Coordinate", - "label": "QW", - "uom": { "code": "1" } - } - ] -} - - - - - -Requirements Class: Choice Components JSON Schema - -Choice Components JSON Schema /req/json-choice-componentsJSON Document/req/uml-choice-components/req/json-simple-components - - - - -DataChoice Object -The “DataChoice” object is the JSON schema implementation of the “DataChoice” UML class defined in . The schema for this class is provided in DataChoice.json. - -{ - "type": "DataChoice", - "label": "Weather Data Message", - "items": [ - { - "name": "TEMP", - "type": "DataRecord", - "label": "Temperature Measurement", - "fields": [ - { - "name": "time", - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC", - "label": "Sampling Time", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - } - }, - { - "name": "temp", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/air_temperature", - "label": "Air Temperature", - "uom": { "code": "Cel" } - } - ] - }, - { - "name": "PRESS", - "type": "DataRecord", - "label": "Pressure Measurement", - "fields": [ - { - "name": "time", - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC", - "label": "Sampling Time", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - } - }, - { - "name": "press", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/air_pressure_at_mean_sea_level", - "label": "Air Pressure", - "uom": { "code": "HPa" } - } - ] - } - ] -} - - - - - -Requirements Class: Block Components JSON Schema - -Block Components JSON Schema /req/json-block-componentsJSON Document/req/uml-block-components/req/json-simple-components - - - - -DataArray Object -The “DataArray” element is the JSON schema implementation of the “DataArray” UML class defined in . The schema for this class is provided in DataArray.json. - -{ - "type": "DataArray", - "label": "Calibration Table", - "elementType": { - "name": "point", - "type": "DataRecord", - "label": "Data Point", - "fields": [ - { - "name": "t", - "type": "Quantity", - "definition": "https://qudt.org/vocab/quantitykind/Temperature", - "label": "Temperature", - "uom": { "code": "Cel" } - }, - { - "name": "r", - "type": "Quantity", - "definition": "https://qudt.org/vocab/quantitykind/Resistance", - "label": "Resistance", - "uom": { "code": "KOhm" } - } - ] - }, - "values": [ - {"t": 12, "r": 3.03}, - {"t": 30.1, "r": 1.68}, - {"t": 40.0, "r": 1.16}, - {"t": 50.1, "r": 0.85}, - {"t": 59.8, "r": 0.62} - ] -} - - -When provided inline, “DataArray” values are encoded using the method defined in . - -The following example shows how to define a 1D variable size array whose data is provided separately. - -{ - "type": "DataArray", - "definition": "http://sensorml.com/ont/swe/property/Trajectory", - "label": "Mobile Trajectory", - "elementCount": { - "definition": "http://www.opengis.net/def/property/OGC/0/NumberOfPoints", - "label": "Implicit Size" - }, - "elementType": { - "name": "point", - "type": "Vector", - "definition": "http://www.opengis.net/def/property/OGC/0/PlatformLocation", - "referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/4326", - "label": "Location Point", - "coordinates": [ - { - "name": "lat", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude", - "label": "Latitude", - "axisID": "Lat", - "uom": { "code": "deg" } - }, - { - "name": "lon", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Longitude", - "label": "Longitude", - "axisID": "Lon", - "uom": { "code": "deg" } - } - ] - } -} - - -“DataArray” components can also be nested to form multi-dimensional arrays, as shown in the following example of a 2D array: - -{ - "type": "DataArray", - "definition": "http://sensorml.com/ont/swe/property/RasterImage", - "label": "Satellite Image", - "elementCount": { - "definition": "http://www.opengis.net/def/property/OGC/0/NumberOfRows", - "value": 3000 - }, - "elementType": { - "name": "row", - "type": "DataArray", - "definition": "http://sensorml.com/ont/swe/property/RasterImage", - "elementCount": { - "definition": "http://www.opengis.net/def/property/OGC/0/NumberOfSamples", - "value": 3000 - }, - "elementType": { - "name": "pixel", - "type": "DataRecord", - "definition": "http://sensorml.com/ont/swe/property/GridCell", - "fields": [ - { - "name": "band1", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Radiance", - "label": "Radiance", - "description": "Radiance measured on band1", - "uom": { "code": "W.m-2.Sr-1" } - }, - { - "name": "band2", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Radiance", - "label": "Radiance", - "description": "Radiance measured on band2", - "uom": { "code": "W.m-2.Sr-1" } - }, - { - "name": "band3", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Radiance", - "label": "Radiance", - "description": "Radiance measured on band3", - "uom": { "code": "W.m-2.Sr-1" } - } - ] - } - } -} - - - - -Matrix Object -The “Matrix” object is the JSON schema implementation of the “Matrix” UML class defined in . The schema for this class is provided in Matrix.json. - -{ - "type": "Matrix", - "definition": "http://sensorml.com/ont/swe/property/RotationMatrix", - "referenceFrame": "http://www.opengis.net/def/crs/OGC/0/ECI_J2000", - "label": "3D Orientation Matrix", - "elementType": { - "name": "row", - "type": "Matrix", - "elementType": { - "name": "coef", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Coordinate", - "label": "Matrix Coef", - "uom": { "code": "1" } - } - }, - "values": [ - [0.36,0.48,-0.8], - [-0.8,0.6,0], - [0.48,0.64,0.6] - ] -} - - -When provided inline, “Matrix” values are encoded using the method defined in . - - - -DataStream Object -The “DataStream” object is the JSON schema implementation of the “DataStream” UML class defined in . The schema for this class is provided in DataStream.json. - -{ - "type": "DataStream", - "label": "Aircraft Navigation", - "elementType": { - "name": "navData", - "type": "DataRecord", - "fields": [ - { - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/USNO/0/GPS", - "referenceTime": "1970-01-01T00:00:00Z", - "label": "Sampling Time", - "uom": { "code": "s" } - }, - { - "name": "location", - "type": "Vector", - "definition": "http://www.opengis.net/def/property/OGC/0/PlatformLocation", - "referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/4979", - "label": "Platform Location", - "coordinates": [ - { - "name": "lat", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude", - "label": "Latitude", - "axisID": "Lat", - "uom": { "code": "deg" } - }, - { - "name": "lon", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Longitude", - "label": "Longitude", - "axisID": "Lon", - "uom": { "code": "deg" } - }, - { - "name": "alt", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/HeightAboveEllipsoid", - "label": "Altitude", - "axisID": "h", - "uom": { "code": "m" } - } - ] - }, - { - "name": "attitude", - "type": "Vector", - "definition": "http://www.opengis.net/def/property/OGC/0/PlatformOrientation", - "referenceFrame": "http://www.opengis.net/def/cs/OGC/0/ENU", - "label": "Platform Attitude", - "coordinates": [ - { - "name": "heading", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/TrueHeading", - "label": "Heading", - "axisID": "Z", - "uom": { "code": "deg" } - }, - { - "name": "pitch", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/PitchAngle", - "label": "Pitch", - "axisID": "X", - "uom": { "code": "deg" } - }, - { - "name": "roll", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/RollAngle", - "label": "Roll", - "axisID": "Y", - "uom": { "code": "deg" } - } - ] - } - ] - }, - "encoding": { - "type": "TextEncoding", - "tokenSeparator": ",", - "blockSeparator": "\n", - "decimalSeparator": "." - } -} - - -When provided inline, “DataStream” values are encoded using the method defined in . - - - -Inline Value Blocks -This clause specifies how inline vaues for “DataArray”, “Matrix” and “DataStream” components shall be encoded when provided within a JSON document. No other method is allowed within a JSON document compliant with this standard. - -However, when values are provided separately from the component description (e.g. when datastream values are provided separately), any encoding methods defined in can be used. - -Inline block component values shall always be wrapped using JSON Arrays. - - - - -Requirements Class: Geometry Components JSON Schema - -Geometry Components JSON Schema /req/json-geom-componentsJSON Document/req/uml-geom-components/req/json-simple-components - - - - -Geometry Object -The “Geometry” object is the XML schema implementation of the “Geometry” UML class defined in . The schema for this class is provided in Geometry.json. - -{ - "type": "Geometry", - "definition": "http://sensorml.com/ont/swe/property/TargetLocation", - "srs": "http://www.opengis.net/def/crs/EPSG/0/4326", - "label": "Target Location", - "description": "A point geometry", - "value": { - "type": "Point", - "coordinates": [12.34, 56.36] - } -} - -{ - "type": "Geometry", - "definition": "http://sensorml.com/ont/swe/property/Trajectory", - "srs": "http://www.opengis.net/def/crs/EPSG/0/4326", - "label": "Desired Trajectory", - "description": "Desired UxS trajectory defined as a line string", - "value": { - "type": "LineString", - "coordinates": [[12.34, 56.36], [12.45, 56.37], [12.45, 56.39], [12.34, 56.36]] - } -} - -{ - "type": "Geometry", - "definition": "http://sensorml.com/ont/x-swe/property/SurveillanceArea", - "srs": "http://www.opengis.net/def/crs/EPSG/0/4326", - "label": "Surveillance Area", - "description": "Desired UxS surveillance area defined as a polygon", - "value": { - "type": "Polygon", - "coordinates": [ - [[12.34, 56.36], [12.45, 56.37], [12.45, 56.39], [12.34, 56.36]] - ] - } -} - - - - - -Requirements Class: Simple Encodings JSON Schema - -Simple Encodings JSON Schema /req/json-simple-encodingsJSON Document/req/json-simple-encodings/req/text-encoding-rules/req/json-encoding-rules - - - -Validation patterns that implement classes defined respectively in the “Simple Encodings” UML packages are provided in the JSON schema encodings.json. - -When datastream or data array values are provided out-of-band (i.e. not inline in the “DataArray”, “Matrix” or “DataStream” description), a different encoding than JSON can be selected. This is specified by using one of the following classes. - - -TextEncoding Object -The “TextEncoding” object is the JSON schema implementation of the “TextEncoding” UML class defined in . The schema for this class is provided in encodings.json#/definitions/TextEncoding. - -{ - "type": "TextEncoding", - "tokenSeparator": ",", - "blockSeparator": "\n", - "decimalSeparator": "." -} - - - - - -Requirements Class: Advanced Encodings JSON Schema - -Advanced Encodings JSON Schema /req/json-advanced-encodingsJSON Document/req/uml-advanced-encodings/req/json-simple-encodings/req/binary-encoding-rules - - - -This requirement class defines an additional encoding method that can be used to encode data values as raw or base64 binary blocks. - - -BinaryEncoding Object -The “BinaryEncoding” object is the JSON schema implementation of the “BinaryEncoding” UML class defined in . The schema for this class is provided in encondings.json#/definitions/BinaryEncoding. - - - -These elements allow for the detailed specification of the encoding parameters associated to components of the data description tree as discussed in . The “ref” attribute takes a value of a particular syntax that allows pointing to any data component. The syntax is a ‘/’ separated list of component names, starting with the name of the root component and listed hierarchically. Each of these component names shall match the value of the “name” attribute defined in the data definition tree. - - /req/xsd-advanced-encodings/ref-syntax-valid - -The “ref” attribute of the “Component” and “Block” elements shall contain a hierarchical ‘/’ separated list of data component names. - - -The “ref” attribute used on the “Component” element shall point exclusively to a scalar component. - - /req/xsd-advanced-encodings/scalar-ref-component-valid - -The “ref” attribute of a “Component” element shall reference a scalar or range component. - - -This standard defines the list of data types that are allowed for scalar values when encoded with the binary encoding method. The corresponding URIs listed below shall be used as the value of the datatype attribute of an instance of the “Component” element. - - /req/xsd-advanced-encodings/datatype-valid - -The value of the “dataType” XML attribute of the “Component” element shall be one of the URIs listed in . - - -These data types are specified in the normative table below: - - -Allowed Binary Data Types -Common Name -URI to use in “dataType” attribute -Description -Signed Byte - -8-bits signed binary integer. - Range: −128 to +127 -Unsigned Byte - -8-bits unsigned binary integer. - Range: 0 to +255 -Signed Short - -16-bits signed binary integer. - Range: −32,768 to +32,767 -Unsigned Short - -16-bits unsigned binary integer. - Range: 0 to +65,535 -Signed Int - -32-bits signed binary integer. - Range: −2,147,483,648 to +2,147,483,647 -Unsigned Int - -32-bits unsigned binary integer. - Range: 0 to +4,294,967,295 -Signed Long - -64-bits signed binary integer. - Range: −263 to +263 — 1 -Unsigned Long - -64-bits unsigned binary integer. - Range: 0 to +264 — 1 -Half Precision - Float - -16-bits single precision floating point number as defined in IEEE 754. -Float - -32-bits single precision floating point number as defined in IEEE 754. -Double - or - -64-bits double precision floating point number as defined in IEEE 754. -Long Double - -128-bits quadruple precision floating point number as defined in IEEE 754. -UTF-8 String - (Variable Length) - - “byteLength” attribute is not set. -Variable length string composed of a 2-bytes unsigned short value indicating its length followed by a sequence of UTF-8 encoded characters as specified by the Unicode Standard (2.5). -UTF-8 String* - (Fixed Length) - - “byteLength” attribute is set. -Fixed length string composed of a sequence of UTF-8 encoded characters as specified by the Unicode Standard (2.5), and padded with 0 characters. - - - -The data type should be chosen so that its range allows the encoding of all possible values for a field (i.e. compatible with the field representation and constraints) including NIL values. This means that certain combinations of data type and components are not allowed. If a scalar component does not specify any constraint, any data type compatible with its representation can be used and it is the responsibility of the implementation to insure that all future values for the component will “fit” in the data type. - - /req/xsd-advanced-encodings/datatype-compatible - -The chosen data type shall be compatible with the scalar component representation, constraints and NIL values. - - -Only data types marked with an asterisk allow the usage of the “byteLength” or “bitLength” attribute to customize their size. Usage of these attributes is forbidden on all other data types since their size is fixed and already specified in this standard (in the case of a variable length string, the size is included in the stream). This is enforced by a Schematron pattern. - - /req/xsd-advanced-encodings/no-datatype-length - -The “bitLength” and “byteLength” XML attributes shall not be set when a fixed size data type is used. - - -The value of the “byteEncoding” XML attribute allows the selection of either the ‘raw’ or ‘base64’ encoding methods. When ‘base64’ is selected each byte is converted to its base 64 representation before it is included in encoded block, making it possible to include the values directly inline in the XML instance. - -The following binary encoded image data illustrates how the BinaryEncoding element is used to specify encoding options to each scalar value in the dataset: - - - - - -Data Blocks and Streams Encoding Rules (normative) - -Requirements Class: General Encoding Rules - -General Encoding Rules/req/general-encoding-rulesEncoded Values Instanceindirect-dependency/req/uml-simple-encodings - - - -All encodings defined in this standard follow general principles so that it is possible to implement them in a similar way. - -The way values are encoded is linked to the data structure specified using a hierarchy of data components. The values are included sequentially in the data stream by recursively processing all data components composing the dataset definition tree. - - -Rules for Scalar Components -The value of each scalar component is encoded as a single scalar value. The actual binary representation of this scalar value depends on the encoding method. For example, in “TextEncoding”, a numerical value is represented by its string representation that usually span several bytes (e.g. ‘1.2345’ spans 6 bytes), why with the “BinaryEncoding” encode a similar value would likely be encoded as an IEEE 754 single precision floating-point format. - -The value of a “Time” component is encoded either as a decimal value or as a string in the case where a calendar representation or indeterminate value is used. - -When the value of a scalar component is NIL, the appropriate nil value is used in the stream and replaces the actual measurement value. This is always possible because nil values are required to be expressed with a data type that is compatible with the representation of the corresponding field. - - - -Rules for Range Components -The values of range components are encoded as a sequence of two successive values, first the lower bound of the range, then the upper bound. Each of these values is encoded exactly like the values of scalar components. - - - -Rules for DataRecord and Vector -Both “DataRecord” and “Vector” components are aggregates consisting of an ordered sequence of child components. The values contained in these aggregates are encoded by successively encoding each child component in the order in which they are listed in the XML description and including the resulting values sequentially in the stream. - -The definition of a “DataRecord” (or “Vector”) structure composed of N fields (or coordinates for vectors) can be represented in the following way: - - - -The data block corresponding to such a structure would sequentially include all values for field 1, then all values for field 2, etc. until the last field is reached. Each field may consist of a single value if it is a scalar but may also consist of multiple values if it is itself an aggregate or a range component. - - /req/general-encoding-rules/record-encoding-rule - -“DataRecord” fields or “Vector” coordinates shall be encoded sequentially in a data block in the order in which these fields or coordinates are listed in the data descriptor. - - - - -Rules for DataChoice -The “DataChoice” is an aggregate consisting of a choice of several child components called items. When values of a data choice are encoded, the resulting data block consists of two things: A token identifying the selecting item and the item values themselves. Only values of a single item can be encoded in each instance of a choice. - - - -The data block corresponding to such a structure would then sequentially include the item identifier (i.e. the choice value) and then the value(s) for the selected item. The item may consist of a single value if it is a scalar or multiple values if it is itself an aggregate or a range component. - - /req/general-encoding-rules/choice-encoding-rule - -Encoded values for the selected item of a “DataChoice” shall be provided along with information that unambiguously identifies the selected item. - - - - -Rules for DataArray and Matrix -The “DataArray” is an aggregate consisting of a number of repeated elements, all of the same type as defined by the element type. Values contained by a “DataArray” are encoded by sequentially including the values of each element. - -The definition of a “DataArray” (“Matrix”) structure composed of the array dimension and size and the element type definition. This can be represented in the following way: - - - -The data block corresponding to such a structure would sequentially include the number representing the array size (only if it is variable) followed by one or more values corresponding to each array element. The number of values encoded for each element depends only on the array element definition, and the total number of values also depends on the array size. - - /req/general-encoding-rules/array-encoding-rule - -“DataArray” elements shall be encoded sequentially in a data block in the order of their index in the array (i.e. from low to high index). - - - /req/general-encoding-rules/array-size-encoding-rule - -Encoded data for a variable size “DataArray” shall include a number specifying the array size whatever the encoding method used. - - - - - -Requirements Class: JSON Encoding Rules - -JSON Encoding Rules/req/json-encoding-rulesEncoded Values Instance/req/general-encoding-rulesindirect-dependency/req/uml-simple-encodings - - - -The “JSON Encoding” method encodes field values by their JSON representation. - - /req/json-encodings-rules/json-valid - -Data blocks and datastreams encoded using the JSON Encoding rules shall be valid JSON documents as defined by . - - -The encoding rules defined in this document refer to JSON data types defined by . Their definitions are recalled below: - -JSON Object: An object structure is represented as a pair of curly brackets surrounding zero or more name/value pairs (or members). Members are separated by commas. Each member must have a distinct name. - -JSON Array: An array structure is represented as square brackets surrounding zero or more values (or elements). Elements are separated by commas. - -JSON Number: A decimal or integer number represented in base 10, with a sign and optional exponent. - -JSON String: A string of Unicode characters that begins and ends with quotation marks. - - -Rules for Scalar Components -Scalar components are encoded as specified in . Special numerical values allowed for “Quantity” and “Time” components are defined in . - - /req/json-encoding-rules/scalar-value-valid - -The value of a scalar component shall be represented using a JSON Number, a JSON String, or a boolean literal value, as defined in . - - - -Simple Component to JSON Value Types Mapping -Component Type -JSON Value Type -Examples - -Boolean -Boolean literal -true - false -Text -JSON String -"word" - "a full sentence" - "BYC-589-AA" -Category -JSON String -"ON" - "Paleozoic" - "diesel" -Count -JSON Number -12 - 0 -Quantity -JSON Number, or - JSON String with special numerical value. -12 - 23.1 - "NaN" - "-Infinity" - "+Infinity" -Time -JSON String with a ISO8601 date/time string, or - JSON Number, or - JSON String with special numerical value. -"2023-03-15T12:45:56Z" - -23.1 - 12 - "NaN" - "-Infinity" - "+Infinity" - - - - - -Rules for Range Components -A range component is encoded using a JSON array of two values. - - /req/json-encoding-rules/range-value-validValues of range components shall be wrapped in a JSON Array with exactly 2 scalar values. -Each value is encoded in the same manner as the corresponding scalar component as defined in . - - - - -Range Component to JSON Mapping -Component Type -Examples - -CategoryRange -["Cenozoic", "Paleozoic"] -CountRange -[0, 12] -QuantityRange -[-12, 35] - [-180.0, 180.0] - ["-Infinity", 0.0] - [10.0, "+Infinity"] - ["NaN", "NaN"] -TimeRange -["2023-01-01T00:00:00Z", "2023-03-15T12:45:56Z"] - ["2023-01-01T00:00:00Z", "+Infinity"] - ["-Infinity", "2023-01-01T00:00:00Z"] - ["2023-01-01T00:00:00Z", "+Infinity"] - ["NaN", "NaN"] - - - - - -Rules for DataRecord and Vector -“DataRecord” components are encoded using a JSON Object whose members are named like the record fields. - - /req/json-encoding-rules/record-object-valid“DataRecord” values shall be wrapped in a JSON Object. -The name of the JSON object members shall be the same as the “DataRecord” field names. -The value of each JSON Object member shall be chosen by following the encoding rules of the data component used as the record field with the same name. -If a record field is marked as ‘optional’, the corresponding JSON object member can be omitted or its JSON value can be set to null. - - - - /req/json-encoding-rules/vector-object-valid“Vector” values shall be wrapped in a JSON Object. -The name of the JSON object members shall be the same as the “Vector” coordinate names. -The value of each JSON Object member shall be chosen by following the encoding rules of the data component used as the vector coordinate field with the same name. - - - -When a field has its ‘optional’ flag set to true, its value can be either omitted or set to the literal value null. - -See the following examples: - - - - - - - - - - - -Rules for DataChoice -Values of “DataChoice” components are encoded using a JSON Object with a single member whose name is the name of the selected choice item. - - /req/json-encoding-rules/choice-object-valid“DataChoice” values shall be encapsulated in a JSON Object. -The JSON object shall contain a single member whose name is the same as the selected choice item. -The JSON value of this unique member shall be chosen according to the encoding rules of the data component corresponding to the selected item. - - - -See example: - - - -Rules for DataArray and Matrix -Values of “DataArray” and “Matrix” components are encoded using a JSON Array, containing as many elements as there are elements in the Array component. - - /req/json-encoding-rules/array-values-valid“DataArray” and “Matrix” values shall be encapsulated in a JSON Array. -Each array element shall be encoded using the rules corresponding to the data component used as the array element type. - - - -See the following examples: - - - - - - - - - -Rules for Geometry -The value of a “Geometry” component is encoded using a GeoJSON Geometry object. - - /req/json-encodings-rules/geometry-validThe value of a “Geometry” component shall be encoded as a GeoJSON Geometry Object, following rules defined by . -The allowed GeoJSON geometry types shall be restricted to: Point, LineString, Polygon, MultiPoint, MultiLineString, and MultiPolygon -The number of dimensions of the GeoJSON geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component. - - - -See example: - - - -JSON Schema -In order to maximize compatibility with existing tools, A JSON Schema can be easily auto-generated from the Datastream description. - - - -Media Types -When array or datastream values are encoded with the JSON encoding method and provided standalone (i.e. outside of any wrapper format), one of the following media type identifiers shall be used: - -One of application/json or application/swe+json shall be used as the content-type for files and HTTP reponses. - -application/swe+json shall be used for format negotiation between server and client (e.g. when the format is advertised by an API or web service). In particular, this media type shall be used in HTTP Accept and Link headers and in any server response used to advertise support or link to a resource encoded with this format. - - - -alternative would be application/vnd.ogc.swe+json - - - - -Requirements Class: Text Encoding Rules - -Text Encoding Rules/req/text-encoding-rulesEncoded Values Instance/req/general-encoding-rulesindirect-dependency/req/uml-simple-encodings - - - -The “TextEncoding” method encodes field values (especially numbers) by their text representation. Special characters provide a way to separate successive values and successive blocks. The ABNF syntax defined in IETF RFC 5234 is used to formalize the encoding rules, and thus all ABNF snippets provided in this section are normative. - - /req/text-encodings-rules/abnf-syntax-valid - -The encoded values block shall be formatted as defined by the ABNF grammar defined in this clause. - - - -Separators -Token separators are used between single values and the block separator is used at the end of each block. The block corresponds to one element of the “DataArray” or “DataStream” carrying the “values” element in which the values are encoded. There are no special separators to delimitate nested records, arrays and choices. - -Separators shall be chosen so that nothing in the dataset contains the exact same character sequence as the one chosen for token or block separator. - - /req/text-encodings-rules/separators-valid - -Block and token separators used in the “TextEncoding” method shall be chosen as a sequence of characters that never occur in the data values themselves. - - -When the attribute “collapseWhiteSpaces” is set to true (its default value), all white space characters surrounding the token and block separators shall be ignored. The BNF grammar for separators is given below: - -white-space = %d9 / %d10 / %d13 / %d32 ; TAB, LF, CR or SPACE - -token-separator-chars = < Value of the tokenSeparator attribute > - -block-separator-chars = < Value of the blockSeparator attribute > - -token-separator = [white-space] token-separator-chars [white-space] - -block-separator = [white-space] block-separator-chars [white-space] - - -White spaces around separators are in fact only allowed when the “collapseWhiteSpaces” attribute is set to ‘true’ (which is the default). - - - -Rules for Scalar Components -The value for a scalar component is encoded as its text representation, following XML schema datatypes conventions. - -scalar-value = xs:bool / xs:string / xs:double / xs:int / xs:date / xs:dateTime - - -Nil values are included in the stream just like normal scalar values. Since their data type has to match the field data type, there is no special treatment necessary for a decoder or encoder. It is the responsibility of the application to match the data value against the list of registered nil values for a given field in order to detect if it is associated to a nil reason or if it is an actual measurement value. - - - -Rules for Range Components -Range components are encoded as a sequence of two tokens (each one representing a scalar value) separated by a token separator: - -min-value = scalar-value - -max-value = scalar-value - -range-values = min-value token-separator max-value - - - - -Rules for DataRecord and Vector -Values of fields of a “DataRecord” are recursively encoded following rules associated to the type of component used for the field’s description (i.e. scalar, record, array, etc.) and separated by token separators as expressed by the following grammar: - -field-count = < Number of fields in the record minus one. Greater or equal to 0 > - -any-field-value = scalar-value / range-values / record-values / choice-values / array-values - -mandatory-field-value = any-field-value - -optional-field-value = (“Y” token-separator any-field-value) / “N” - -field-value = mandatory-field-value / optional-field-value - -record-values = field-value <field-count>*(token-separator field-value) - - -When a field is marked as optional in the definition, the token ‘Y’ or ‘N’ shall be inserted in the data block. When the field value is omitted, the token ‘N’ is inserted alone. When it is included, the token ‘Y’ is inserted followed by the actual field value. - - /req/text-encodings-rules/optional-field-marker-present - -The ‘Y’ or ‘N’ token shall be inserted in a text encoded data block for all fields that have the “optional” attribute set to ‘true’. - - -Coordinate values of “Vector” components are encoded with a similar syntax, but a coordinate value can only be scalar and cannot be omitted: - -coord-count = < Number of coordinates in the vector minus one. Greater or equal to 0 > - -vector-values = scalar-value <coord-count>*(token-separator scalar-value) - - -See the following examples: - - - - - - - - - - - -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. - -selected-item-name = < Value of the “name” attribute of the item selected > -selected-item-values = scalar-value / range-values / record-values / choice-values / array-values -choice-values = selected-item-name token-separator selected-item-values - - - /req/text-encodings-rules/choice-selection-marker-valid - -The selected-item-name token shall correspond to the value of the “name” attribute of the “item” property element that represents the selected item. - - -See example: . - - - -Rules for DataArray and Matrix -Values of each “DataArray” or “Matrix” element are recursively encoded following rules associated to the type of component used for the element type (i.e. scalar, record, array, etc.). Groups of values (or single value in the case of a scalar element type) corresponding to each element are sequentially appended to the data block and separated by token or block separators, depending on the context: When the “DataArray” is the root of the component tree that is being encoded, its elements are separated by block separators, otherwise its elements are separated by token separators. - -A “DataArray” or “Matrix” can have a fixed or variable size, which leads to two slightly different syntaxes for encoding values: -array-separator = token-separator / block-separator ; block-separator is only used when the array is the root of the component tree whose values are being encoded. - -array-values = fixed-size-array-values / variable-size-array-values - - -Fixed size arrays have a size of at least one, and are encoded as defined below: - -fixed-element-count = < Number of elements in a fixed size array minus one. Greater or equal to 0 since fixed size is always at least one > - -element-values = scalar-value / range-values / record-values / choice-values / array-values - -fixed-size-array-values = element-values <fixed-element-count>*(array-separator element-values) - - -When a “DataArray” (“Matrix”) is defined as variable size, its size can be 0 and the array size is included as a token in the data block, before the actual array elements values are listed: - -variable-element-count = < Number of elements in a variable size array. Greater or equal to 0 since variable size can be 0 for an empty array > - -variable-size-array-values = variable-element-count <variable-element-count>*(array-separator element-values) - - -See the following examples: - - - - - - - - - - - -Rules for DataStream -Values of “DataStream” elements are encoded as a sequence of tokens in a way similar to how “DataArray” values are encoded. Groups of encoded values corresponding to one element of a “DataStream” are always separated by block separators, while all values within these groups are separated by token separators: - -stream-element-count = < Number of elements in a data stream minus one. Greater or equal to 0 since the number of elements in a data stream is always at least one > - -stream-values = element-values <stream-element-count>*(block-separator element-values); - - -Examples of “DataStream” with “TextEncoding” have already been given in previous sections. - - - -Rules for Geometry -The value of a “Geometry” component is encoded using the WKT format defined in the Simple Feature Access Standard (). - - /req/text-encodings-rules/geometry-validThe value of a “Geometry” component shall be encoded using the WKT format defined in , clause 7. -The WKT representation shall be either a “Two-Dimension Geometry WKT” (clause 7.2.2 of ) or a “Three-Dimension Geometry WKT” (clause 7.2.3 of ). The ‘M’ coordinate shall not be used. -The number of dimensions of the WKT geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component. -When a geometry value is included in a text-encoded datastream, the token separator shall not be the comma character (ASCII code 44) to avoid conflicting with commas used inside the WKT representation. - - - -See example: - - - -Media Types -When array or datastream values are encoded with the Text encoding method and provided standalone (i.e. outside of any wrapper format such as an XML document), one of the following media type identifiers shall be used: - -One of text/plain, text/csv, or application/swe+text shall be used as the content-type for files and HTTP reponses. -text/csv can be used only when the token separator is set to a single comma ‘,’ and the block separator is set to ‘CRLF’. - -text/plain and application/swe+text can be used for any combination of separators. - - - -application/swe+text shall be used for format negotiation between server and client (e.g. when the format is advertised by an API or web service). In particular, this media type shall be used in HTTP Accept and Link headers and in any server response used to advertise support or link to a resource encoded with this format. - -It is recommended that the character set code be correctly appended to these media types if it differs from US-ASCII or UTF-8. - - - - -alternative would be application/vnd.ogc.swe+text - - - - -Requirements Class: Binary Encoding Rules - -Binary Encoding Rules/req/binary-encoding-rulesEncoded Values Instance/req/general-encoding-rulesindirect-dependency/req/uml-advanced-encodings - - - -The “BinaryEncoding” method encodes field values by their binary representation. The ABNF syntax defined in IETF RFC 5234 is used to formalize the encoding rules, and thus all ABNF snippets provided in this section are normative. - - /req/binary-encoding-rules/abnf-syntax-valid - -The encoded values block shall be formatted as defined by the ABNF grammar defined in this clause. - - -The encoding rules are similar to those of the “TextEncoding” method except that numerical values are encoded directly as their binary representation and that no separators are used. Separators are not needed because data types have either a fixed size or contain length information (See String encoding). - - -Rules for Scalar Components -The value for a scalar component is encoded as its binary representation. This especially applies to numerical values that are encoded directly in binary form in accordance to the selected data type and the value of the “byteOrder” attribute. - -scalar-value = < binary value encoded according to data type, byte encoding and byte order specifications > - - -The last column of in indicates how each data type shall be binary encoded into a low level byte sequence. The actual order of bytes composing a multi-bytes data type depends on the value of the “byteOrder” attribute. The ‘bigEndian’ option indicates that muti-bytes data types are encoded with the most significant byte (MSB) first, while selecting ‘littleEndian’ signifies that encoding is done with the less significant byte (LSB) first. A UTF-8 string is not considered as a multi-byte data type and is always encoded in the same order, as specified by the Unicode Standard. - - /req/binary-encoding-rules/type-encoding-valid - -Binary data types in shall be encoded according to their definition in the description column and the value of the “byteOrder” attribute. - - -Nil values are included in the stream just like normal scalar values. Since their data type has to match the field data type, there is no special treatment necessary for a decoder or encoder. It is the responsibility of the application to match the data value against the list of registered nil values for a given field in order to detect if it is associated to a nil reason or if it is an actual measurement value. - -When the ‘raw’ byte encoding option is selected, bytes resulting from the data type encoding process defined above are inserted in the binary stream directly. This is refered to as ‘raw binary’ encoding. When the ‘base64’ option is selected, each byte resulting from the binary encoding process is also encoded in Base64 before being included in the stream. Scalar values can be Base 64 encoded one by one or by blocks as long as the resulting stream is compatible with requirements of IETF RFC 2045. - - /req/binary-encoding-rules/base64-translation-applied - -When the ‘base64’ encoding option is selected, binary data shall be encoded with the Base64 technique defined in IETF RFC 2045 Section 6.8: Base64 Content-Transfer-Encoding. - - - - -Rules for Range Components -Range components are encoded as a sequence of two binary values (each one representing a scalar value): - -min-value = scalar-value - -max-value = scalar-value - -range-values = min-value max-value - - -Values are always included in the same order: The lower bound of the range first, followed by the upper bound. - - - -Rules for DataRecord and Vector -Values of fields of a “DataRecord” are recursively encoded following rules associated to the type of component used as the field’s description (i.e. scalar, record, array, etc.) and appended to the binary block: - -field-count = < Number of fields in the record. Greater or equal to 1 > - -any-field-value = scalar-value / range-values / record-values / choice-values / array-values / block_values - -mandatory-field-value = any-field-value - -optional-field-value = (“Y” any-field-value) / “N” - -field-value = mandatory-field-value / optional-field-value - -record-values = <field-count>*field-values - - -When a field is marked as optional in the definition, the 1-byte value ‘Y’ (ASCII code 89) or ‘N’ (ASCII code 78) shall be inserted in the data block. When the field value is omitted, the token ‘N’ is inserted alone. When it is included, the token ‘Y’ is inserted followed by the actual field value. - - /req/binary-encoding-rules/optional-field-marker-present - -The one byte ASCII character ‘Y’ or ‘N’ shall be inserted in a binary encoded data block for all “DataRecord” fields that have the “optional” attribute set to ‘true’. - - -Coordinate values of “Vector” components are encoded with a similar syntax, but a coordinate value can only be scalar and cannot be omitted: - -coord-count = < Number of coordinates in the vector. Greater or equal to 1 > - -vector-values = <coord-count>*scalar-value - - -Vector coordinates cannot be optional. - - - -Rules for DataChoice -A “DataChoice” is encoded with the binary method by providing the zero-based index of the selected item before the item values themselves. The index value ranges from 0 for the first choice item to (number_of_items - 1) for the last item. - -selected-item-idx = < Index of the item selected > - -selected-item-value = scalar-value / range-values / record-values / choice-values / array-values - -choice-values = selected-item-idx selected-item-value - - - /req/binary-encoding-rules/choice-selection-marker-valid - -The value of the selected-item-idx flag shall be the zero-based index of the selected item (within the ordered list of items provided by the choice descriptor) and be encoded on a single unsigned byte. - - - - -Rules for DataArray and Matrix -Values of each “DataArray” or “Matrix” element are recursively encoded following rules associated to the type of component used for the element type (i.e. scalar, record, array, etc.). Groups of values (or single value in the case of a scalar element type) corresponding to each element are sequentially appended to the data block. Since a “DataArray” or “Matrix” can have a fixed or variable size, two slightly different syntaxes for encoding values are possible: - -array-values = fixed-size-array-values / variable-size-array-values - -element-value = scalar-value / range-values / record-values / choice-values / array-values / block_values - - -Fixed size arrays have a size of at least one, and are encoded as defined below: - -fixed-element-count = < Number of elements in a fixed size array > - -fixed-size-array-values = <fixed-element-count>*element-value - - -When a “DataArray” (“Matrix”) is defined as variable size, its size can be 0 and the array size is included as a token in the data block, before the actual array elements values are listed: - -variable-element-count = < Number of elements in a variable size array > - -variable-size-array-values = variable-element-count <variable-element-count>*element-value - - -When the array size is 0, only this number is encoded and no element values are included in the data block. - - - -Rules for DataStream -Values of “DataStream” elements are encoded exactly as elements of an array: - -stream-element-count = < Number of elements in a data stream > - -stream-values = <stream-element-count>*element-value - - -A data stream usually contains at least one value but could be empty. - - - -Rules for Geometry -The value of “Geometry” is encoded using the WKB format defined in the Simple Feature Access Standard (). - - /req/binary-encodings-rules/geometry-validThe value of a “Geometry” component shall be encoded using the WKB format defined in , clause 8. -The WKB geometry type shall be one of the following types listed in , clause 8.2.3, table 7: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, Point Z, LineString Z, Polygon Z, MultiPoint Z, MultiLineString Z, MultiPolygon Z. Other geometry type codes shall not be used. -The number of dimensions of the WKB geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component. - - - -No specific marker or length information needs to be pre-pended to the binary representation since the WKB format is self descriptive and parsable without knowing the total length ahead of time. - - - -Block encoded components -When block encoding characteristics are also specified in the encoding description, the encryption and/or compression algorithm shall be applied after the binary encoding process described above is completed for the block. Extensions of this standard can define compression and encryption methods that fit the needs of particular communities. - -In order to maximize compatibility with existing software, when compressing a binary encoded data stream results in a well known binary format, the corresponding mime type can be used instead of application/octet-stream. For instance video/h264 can be used when the entirety of the dataset (presumably a video stream) is compressed using the H264 video codec. - - - -Media Types -When array or stream values are encoded with the Binary encoding method and provided standalone (i.e. outside of any wrapper format), one of the following media type identifiers shall be used: - -One of application/octet-stream or application/swe-binary shall be used as the content-type for files and HTTP responses. - -application/swe+binary shall be used for format negotiation between server and client (e.g. when the format is advertised by an API or web service). In particular, this media type shall be used in HTTP Accept and Link headers and in any server response used to advertise support or link to a resource encoded with this format. - - - -alternative would be application/vnd.ogc.swe-binary - - - - - - - - - - - - - - -Conformance Class Abstract Test Suite - -Core Conformance Classes - -Conformance Class: Core Concepts - /conf/coreTarget TypeDerived Models and Software Implementationstarget/req/core - - - -Core concepts are the base of all derived models/conf/core/core-concepts-usedtarget/req/core/core-concepts-usedVerify that the target implementation correctly implements the core concepts. - - - -Inspect the target implementation. - - - - -A boolean representation consists of a boolean value/conf/core/boolean-rep-validtarget/req/core/boolean-rep-validVerify that the target implementation correctly implements the Boolean representation. - - - -Inspect the target implementation. - - - - -A categorical representation consists of a token with a code space/conf/core/categorical-rep-validtarget/req/core/categorical-rep-validVerify that the target implementation correctly implements the Categorical representation. - - - -Inspect the target implementation. - - - - -A continuous numerical representation consists of a number with a scale/conf/core/numerical-rep-validtarget/req/core/numerical-rep-validVerify that the target implementation correctly implements the Numerical representation. - - - -Inspect the target implementation. - - - - -A countable representation consists of an integer number/conf/core/countable-rep-validtarget/req/core/countable-rep-validVerify that the target implementation correctly implements the Countable representation. - - - -Inspect the target implementation. - - - - -A textual representation is implemented as a character string/conf/core/textual-rep-validtarget/req/core/textual-rep-validVerify that the target implementation correctly implements the Textual representation. - - - -Inspect the target implementation. - - - - -A semantic definition of each property shall be provided/conf/core/semantics-definedtarget/req/core/semantics-definedVerify that the target implementation allows attaching a semantic definition to all property representations. - - - -Inspect the target implementation. - - - - -References to semantical information shall be resolvable/conf/core/semantics-resolvabletarget/req/core/semantics-resolvableVerify that the target implementation encodes the semantic links in a way that they can be resolved to an actual concept definition. - - - -Inspect the target implementation. - - - - -A temporal quantity is associated to a temporal reference frame/conf/core/temporal-frame-definedtarget/req/core/temporal-frame-definedVerify that the target implementation allows providing a temporal reference frame along with any date/time quantity. - - - -Inspect the target implementation. - - - - -A spatial quantity is associated to an axis of a spatial reference frame/conf/core/spatial-frame-definedtarget/req/core/spatial-frame-definedVerify that the target implementation allows providing a spatial reference frame and axis along with any quantity that is projected along a spatial dimension. - - - -Inspect the target implementation. - - - - -A NIL value maps a reserved value to a reason/conf/core/nil-reasons-definedtarget/req/core/nil-reasons-definedVerify that the target implementation allows providing a reason along with each NIL (reserved) value. - - - -Inspect the target implementation. - - - - -Aggregate data types are modeled according to ISO 11404/conf/core/aggregates-model-validtarget/req/core/aggregates-model-validVerify that the target implementation models aggregate data types according to ISO 11404 definitions. - - - -Inspect the target implementation. - - - - -Encoding methods shall be defined for all possible data structures/conf/core/encoding-method-validtarget/req/core/encoding-method-validVerify that the target implementation provides encoding methods for all representations and all implemented data structures. - - - -Inspect the target implementation. - - - - - - -UML Conformance Classes - -Conformance Class: Basic Types and Simple Components UML Packages - -Basic Types and Simple Components UML Packages/conf/uml-simple-components/conf/coreTarget TypeDerived Models and Software Implementationstarget/req/uml-simple-components - - - - -Compliance with UML models defined in this package/conf/uml-simple-components/package-fully-implementedtarget/req/uml-simple-components/package-fully-implementedVerify that the target implements all classes in the UML package. - - - -Inspect the model or software implementation. - - - - -Compliance with UML models defined in ISO 19103/conf/uml-simple-components/iso19103-implementedtarget/req/uml-simple-components/iso19103-implementedVerify that the target implements all classes imported from ISO 19103 UML packages. - - - -Inspect the model or software implementation. - - - - -Compliance with UML models defined in ISO 19108/conf/uml-simple-components/iso19108-implementedtarget/req/uml-simple-components/iso19108-implementedVerify that the target implements all classes imported from ISO 19108 UML packages. - - - -Inspect the model or software implementation. - - - - -A definition URI is mandatory on all simple components/conf/uml-simple-components/definition-presenttarget/req/uml-simple-components/definition-presentVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -The value of the axisID and axisAbbrev attributes match/conf/uml-simple-components/axis-validtarget/req/uml-simple-components/axis-validVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -The axis ID is always specified on scalar spatial properties/conf/uml-simple-components/axis-definedtarget/req/uml-simple-components/axis-definedVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -The reference frame is specified on scalar spatial properties not part of a vector/conf/uml-simple-components/ref-frame-definedtarget/req/uml-simple-components/ref-frame-definedVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -The value of a component satisfies the constraints/conf/uml-simple-components/value-constraint-validtarget/req/uml-simple-components/value-constraint-validVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -All derived simple components have an optional value attribute/conf/uml-simple-components/value-attribute-presenttarget/req/uml-simple-components/value-attribute-presentVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -The list of values allowed in a Category component is a subset of the code space/conf/uml-simple-components/category-constraint-validtarget/req/uml-simple-components/category-constraint-validVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -A Category component always specifies a list of possible values/conf/uml-simple-components/category-enum-definedtarget/req/uml-simple-components/category-enum-definedVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -The value of a Category component is one defined in the code space/conf/uml-simple-components/category-value-validtarget/req/uml-simple-components/category-value-validVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -The temporal reference frame is defined/conf/uml-simple-components/time-ref-frame-definedtarget/req/uml-simple-components/time-ref-frame-definedVerify that the implementation correctly assumes the default value when the attribute is not set. - - - -Inspect the model or software implementation. - - - - -The time of reference is expressed relative to the origin of the reference frame/conf/uml-simple-components/time-ref-time-validtarget/req/uml-simple-components/time-ref-time-validVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -The local and reference frames of a Time component are different/conf/uml-simple-components/time-local-frame-validtarget/req/uml-simple-components/time-local-frame-validVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -Values of range components satisfy the same requirements as scalar values/conf/uml-simple-components/range-value-validtarget/req/uml-simple-components/range-value-validVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -CategoryRange components satisfy all requirements of a Category component/conf/uml-simple-components/category-range-validtarget/req/uml-simple-components/category-range-validVerify that the target implementation has constraints that enforce the requirement. - - - -Inspect the model or software implementation. -Apply the following conformance tests to the “CategoryRange” class: - - - - - - - - - - - - -The code space of a CategoryRange component is well-ordered/conf/uml-simple-components/category-range-codespace-ordertarget/req/uml-simple-components/category-range-codespace-orderVerify that the code space contains elements that have a specific order (either implied or defined). - - - -Inspect instances generated by the implementation of the “CategoryRange” class, including a codepace, to verify the requirement. - - - - -TimeRange components satisfy all requirements of the Time class/conf/uml-simple-components/time-range-validtarget/req/uml-simple-components/time-range-validVerify that the target implementation has constraints that enforce the requirement. - - - -Inspect the model or software implementation. -Apply the following conformance tests to the “TimeRange” class: - - - - - - - - - - - - -The reason attribute is a URI that is resolvable to a definition/conf/uml-simple-components/nil-reason-resolvabletarget/req/uml-simple-components/nil-reason-resolvableVerify that the target implementation allows the value of a NIL reason identifier to be either: -a well known reason code defined by OGC - -a URI that can be resolved to the textual description of a custom reason. - - - - - -Inspect the model or software implementation. - - - - -Values reserved for NIL reasons are compatible with the component data type/conf/uml-simple-components/nil-value-type-coherenttarget/req/uml-simple-components/nil-value-type-coherentVerify that the target implementation has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -The scale of constraints is the same as the scale of the component value/conf/uml-simple-components/allowed-values-unit-coherenttarget/req/uml-simple-components/allowed-values-unit-coherentVerify that numerical constraints are expressed with the correct scale. - - - -Inspect instances generated by the implementation of the “Quantity”, “Count” and “Time” classes, including an “AllowedValues” constraint, to verify the requirement. - - - - - -Conformance Class: Record Components UML Package - -Record Components UML Package/conf/uml-record-components/conf/uml-simple-componentsTarget TypeDerived Models and Software Implementationstarget/req/uml-record-components - - - - -Compliance with UML models defined in this package/conf/uml-record-components/package-fully-implementedtarget/req/uml-record-components/package-fully-implementedVerify that the target implements all classes in the UML package. - - - -Inspect the model or software implementation. - - - - -Each DataRecord field has a unique name/conf/uml-record-components/record-field-name-uniquetarget/req/uml-record-components/record-field-name-uniqueVerify that the implementation of the “DataRecord” class has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -Each Vector coordinate has a unique name/conf/uml-record-components/vector-coord-name-uniquetarget/req/uml-record-components/vector-coord-name-uniqueVerify that the implementation of the “Vector” class has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - -The reference frame is not specified on individual coordinates of a Vector/conf/uml-record-components/vector-component-no-ref-frametarget/req/uml-record-components/vector-component-no-ref-frameVerify that the implementation of the “Vector” class has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. -The “referenceFrame” attribute shall be ommited from all data components used to define coordinates of a “Vector” instance. - - - - -The axis ID is specified on all coordinates of a Vector/conf/uml-record-components/vector-component-axis-definedtarget/req/uml-record-components/vector-component-axis-definedVerify that the implementation of the “Vector” class has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. -The “axisID” attribute shall be present on all data components used to define coordinates of a “Vector” instance. - - - - -The local and reference frames of a Vector component are different/conf/uml-record-components/vector-local-frame-validtarget/req/uml-record-components/vector-local-frame-validVerify that the implementation of the “Vector” class has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - - -Conformance Class: Choice Components UML Package - -Choice Components UML Package/conf/uml-choice-components/conf/uml-simple-componentsTarget TypeDerived Models and Software Implementationstarget/req/uml-choice-components - - - - -Compliance with UML models defined in this package/conf/uml-choice-components/package-fully-implementedtarget/req/uml-choice-components/package-fully-implementedVerify that the target implements all classes in the UML package. - - - -Inspect the model or software implementation. - - - - -Each DataChoice item has a unique name/conf/uml-choice-components/choice-item-name-uniquetarget/req/uml-choice-components/choice-item-name-uniqueVerify that the implementation of the “DataChoice” class has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - - -Conformance Class: Block Components UML Package - -Block Components UML Package/conf/uml-block-components/conf/uml-simple-componentsTarget TypeDerived Models and Software Implementationstarget/req/uml-block-components - - - - -Compliance with UML models defined in this package/conf/uml-block-components/package-fully-implementedtarget/req/uml-block-components/package-fully-implementedVerify that the target implements all classes in the UML package. - - - -Inspect the model or software implementation. - - - - -Components nested in a block component are data descriptors/conf/uml-block-components/array-component-no-valuetarget/req/uml-block-components/array-component-no-valueVerify that implementations of the block component classes have a constraint that enforces the requirement. - - - -Inspect the model or software implementation. -Check that the “DataArray”, “Matrix” and “DataStream” classes have the constraint. - - - - -An encoding method is specified whenever an encoded data block is included/conf/uml-block-components/array-values-properly-encodedtarget/req/uml-block-components/array-values-properly-encodedtarget/req/uml-block-components/datastream-array-validVerify that the implementation of block component classes have a constraint that enforces the requirement. - - - -Inspect the model or software implementation. -Check that the “DataArray”, “Matrix” and “DataStream” classes have the constraint. -Inspect instances of these classes generated by the implementation to verify that an encoding method is specified whenever there are encoded values present. - - - - -Elements of a matrix are of scalar types or nested matrices/conf/uml-block-components/matrix-element-type-validtarget/req/uml-block-components/matrix-element-type-validVerify that the implementation of the “Matrix” class has a constraint that enforces the requirement. - - - -Inspect the model or software implementation. - - - - - -Conformance Class: Simple Encodings UML Package - -Simple Encodings UML Package/conf/uml-simple-encodings/conf/coreTarget TypeDerived Models and Software Implementationstarget/req/uml-simple-encodings - - - - -Compliance with UML models defined in this package/conf/uml-simple-encodings/package-fully-implementedtarget/req/uml-simple-encodings/package-fully-implementedVerify that the target implements all classes in the UML package. - - - -Inspect the model or software implementation. - - - - - -Conformance Class: Advanced Encodings UML Package - -Advanced Encodings UML Package/conf/uml-advanced-encodings/conf/uml-simple-encodingsTarget TypeDerived Models and Software Implementationstarget/req/uml-advanced-encodings - - - - -Compliance with UML models defined in this package/conf/uml-advanced-encodings/package-fully-implementedtarget/req/uml-advanced-encodings/package-fully-implementedVerify that the target implements all classes in the UML package. - - - -Inspect the model or software implementation. - - - - - - -Datastream Encoding Conformance Classes - -Conformance Class: General Encoding Rules - -General Encoding Rules/conf/general-encoding-rulesTarget TypeEncoded Values Instancetarget/req/general-encoding-rules - - - - -DataRecord fields and Vector coordinates are encoded recursively/conf/general-encoding-rules/record-encoding-ruletarget/req/general-encoding-rules/record-encoding-rule - - -Verify that the sequence of scalar values (obtained after decoding the section of the encoded data block corresponding to the “DataRecord” or “Vector”) includes values for the successive fields/coordinates in the right order. - - - - -DataChoice selected item is properly encoded/conf/general-encoding-rules/choice-encoding-ruletarget/req/general-encoding-rules/choice-encoding-rule - - -Verify that the sequence of scalar values (obtained after decoding the section of the encoded data block corresponding to the “DataChoice”) includes a value identifying the selected item as well as values for the item itself. - - - - -DataArray elements are encoded recursively/conf/general-encoding-rules/array-encoding-ruletarget/req/general-encoding-rules/array-encoding-rule - - -Verify that the sequence of scalar values obtained after decoding the section of the encoded data block corresponding to the “DataArray” includes values for the successive elements of the array. - - - - -The length of variable size arrays is encoded in the data block/conf/general-encoding-rules/array-size-encoding-ruletarget/req/general-encoding-rules/array-size-encoding-rule - - -Verify that the sequence of values obtained after decoding the section of the encoded data block corresponding to a variable size “DataArray” includes a value specifying the size of the array. - - - - - -Conformance Class: Text Encoding Rules - -Text Encoding Rules/conf/text-encoding-rules/conf/general-encoding-rulesTarget TypeEncoded Values Instancetarget/req/text-encoding-rules - - - - -Compliance with ABNF grammar/conf/text-encoding-rules/abnf-syntax-validtarget/req/text-encoding-rules/abnf-syntax-valid - - -Verify that the text encoded data block is correct with respect to the ABNF grammar corresponding to the particular dataset (The complete ABNF grammar of the dataset should be dynamically constructed from the ABNF snippets provided in the specification). - - - - -Separator characters are well chosen/conf/text-encoding-rules/separators-validtarget/req/text-encoding-rules/separators-valid - - -Verify that the values encoded in the data block never include the reserved separator characters. This can be detected by looking for invalid or superfluous values. - - - - -Special flags are inserted before optional component values/conf/text-encoding-rules/optional-field-marker-presenttarget/req/text-encoding-rules/optional-field-marker-present - - -Verify that the sequence of values corresponding to the optional field starts with the ‘Y’ or ‘N’ flag. - - - - -The name of a selected choice item is inserted in the stream/conf/text-encoding-rules/choice-selection-marker-validtarget/req/text-encoding-rules/choice-selection-marker-valid - - -Verify that the sequence of values corresponding to the “DataChoice” starts with a character string matching the name of one item of the choice descriptor. - - - - - -Conformance Class: Binary Encoding Rules - -Binary Encoding Rules/conf/binary-encoding-rules/conf/general-encoding-rulesTarget TypeEncoded Values Instancetarget/req/binary-encoding-rules - - - - -Compliance with ABNF grammar/conf/binary-encoding-rules/abnf-syntax-validtarget/req/binary-encoding-rules/abnf-syntax-valid - - -Verify that the binary encoded data block is correct with respect to the ABNF grammar of the particular dataset (The complete ABNF grammar of the dataset should be dynamically constructed from the ABNF snippets provided in the specification). - - - - -Data types are encoded as specified in this standard/conf/binary-encoding-rules/type-encoding-validtarget/req/binary-encoding-rules/type-encoding-valid - - -Verify that valid and realistic scalar values are obtained when the binary data block is parsed by extracting the number of bits specified in the table and decoding the resulting bytes in the order specified by the “byteOrder” attribute. When the encoded data and the encoding parameters are not consistent, abberant values (such as -65502 for a temperature field, etc…) are usually obtained, which can be easily detected. - - - - -Base64 encoding is implemented as defined by IETF/conf/binary-encoding-rules/base64-translation-appliedtarget/req/binary-encoding-rules/base64-translation-applied - - -Verify that only characters allowed by base64 encoding are used in the encoded data content. - -Verify that the data block can be properly parsed after the base64 data is decoded into a raw binary data stream. - - - - - - -Special flags are inserted before optional component values/conf/binary-encoding-rules/optional-field-marker-presenttarget/req/binary-encoding-rules/optional-field-marker-present - - -Verify that any optional field is preceded by the a 1-byte ASCII character with value ‘Y’ or ‘N’. - -Verify that the actual field value is only present if the flag has the ‘Y’ value. - - - - - - -The name of a selected choice item is inserted in the stream/conf/binary-encoding-rules/choice-selection-marker-validtarget/req/binary-encoding-rules/choice-selection-marker-valid - - -Verify that the sequence of bytes corresponding to the “DataChoice” starts with a byte value that is greater or equal to 0 and less than the total number of items defined in the choice descriptor. - -Verify that the parsed index value corresponds to the proper item in the choice descriptor. - - - - - - - -Examples - -Text Encoding Rules Examples - -DataArray with inline values (curve) -The following example shows how elements of an array defined as a “DataRecord” can be encoded inline with the text method: - -<swe:DataArray definition="http://sweet.jpl.nasa.gov/2.0/mathFunction.owl#Function"> - <swe:description>Measurement error vs. temperature</swe:description> - <swe:elementCount> - <swe:Count> - <swe:value>5</swe:value> - </swe:Count> - </swe:elementCount> - <swe:elementType name="point"> - <swe:DataRecord> - <swe:label>Error vs. Temperature</swe:label> - <swe:field name="temp"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/physThermo.owl#Temperature"> - <swe:label>Temperature</swe:label> - <swe:uom code="Cel"/> - </swe:Quantity> - </swe:field> - <swe:field name="error"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/sciUncertainty.owl#Error"> - <swe:label>Relative Error</swe:label> - <swe:uom code="%"/> - </swe:Quantity> - </swe:field> - </swe:DataRecord> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator=" " tokenSeparator=","/> - </swe:encoding> - <swe:values>0,5 10,2 50,2 80,5 100,15</swe:values> -</swe:DataArray> - - -In this example, each element consists of a record of two values. The array element structure also corresponds to one block so that tuples are separated by block separators (here the ‘,’ character). Since the array is of size 5, there are 5 tuples listed sequentially in the data block, each one composed of the two values of the data record separated by the token separator. The pattern is “temp,error temp,error …” since values have to be listed in the same order as the fields. - - - -Datastream with records (weather data) -The following snippet defines a datastream with an element of type record: - -<swe:DataStream> - <swe:label>Weather Data</swe:label> - <swe:elementType name="weatherData"> - <swe:DataRecord> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime" - referenceFrame="http://www.opengis.net/def/trs/BIPM/0/UTC"> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="temp"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> - <swe:label>Air Temperature</swe:label> - <swe:uom code="Cel"/> - </swe:Quantity > - </swe:field> - <swe:field name="press"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_pressure_at_mean_sea_level"> - <swe:label>Atmospheric Pressure</swe:label> - <swe:uom code="HPa"/> - </swe:Quantity > - </swe:field> - <swe:field name="windSpeed"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_speed"> - <swe:label>Wind Speed</swe:label> - <swe:uom code="km/h"/> - </swe:Quantity> - </swe:field> - <swe:field name="windDir"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_to_direction"> - <swe:label>Wind Direction</swe:label> - <swe:uom code="deg"/> - </swe:Quantity> - </swe:field> - </swe:DataRecord> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=","/> - </swe:encoding> -</swe:DataStream> - - -The datastream records are encoded using the Text encoding method as shown below: - -2023-03-20T15:40:00Z,15.3,1014,3.5,56.0 -2023-03-20T15:45:00Z,15.4,1015,5.6,123.0 -2023-03-20T15:50:00Z,15.8,1014,13.2,34.0 -... - - - - -Datastream with records and optional fields (navigation data) -The following snippet defines a datastream with an element of type record that contains optional fields: - -<swe:DataStream> - <swe:label>Aircraft Navigation</swe:label> - <swe:elementType name="navData"> - <swe:DataRecord> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime" - referenceFrame="http://www.opengis.net/def/trs/OGC/0/GPS"> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="speed"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/humanTransportAir.owl#GroundSpeed"> - <swe:uom code="m/s"/> - </swe:Quantity > - </swe:field> - <swe:field name="location"> - <swe:Vector optional="true" referenceFrame="http://www.opengis.net/def/crs/EPSG/0/4979"> - <swe:coordinate name="lat"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/spaceCoordinates.owl#Latitude" axisID="Lat"> - <swe:uom code="deg"/> - </swe:Quantity> - </swe:coordinate> - <swe:coordinate name="lon"> - <swe:Quantity definition=" http://sweet.jpl.nasa.gov/2.0/spaceCoordinates.owl#Longitude" axisID="Long"> - <swe:uom code="deg"/> - </swe:Quantity> - </swe:coordinate> - <swe:coordinate name="alt"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/spaceExtent.owl#Altitude" axisID="h"> - <swe:uom code="m"/> - </swe:Quantity> - </swe:coordinate> - </swe:Vector> - </swe:field> - </swe:DataRecord> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=","/> - </swe:encoding> -</swe:DataStream> - - -The datastream records are encoded using the Text encoding method as shown below: - -2007-10-23T15:46:12Z,15.3,Y,45.3,-90.5,311 -2007-10-23T15:46:22Z,25.3,N -2007-10-23T15:46:32Z,20.6,Y,45.3,-90.6,312 -2007-10-23T15:46:52Z,18.9,Y,45.4,-90.6,315 -2007-10-23T15:47:02Z,22.3,N -... - - -In this example, the whole location “Vector” is marked as optional and thus the coordinate values are only included when the optional flag is set to ‘Y’ in the stream. Field values in each block have to be listed in the same order as the field properties in the record definition thus following the “time,speed,Y,lat,lon,alt” or “time,speed,N” pattern depending on whether or not the location is omitted. - - - -Datastream with choice (navigation data) -This is illustrated by the following example: - -<swe:DataStream> - <swe:elementType name="message"> - <swe:DataChoice> - <swe:item name="TEMP"> - <swe:DataRecord> - <swe:label>Temperature Measurement</swe:label> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="temp"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> - <swe:uom code="Cel"/> - </swe:Quantity> - </swe:field> - </swe:DataRecord> - </swe:item> - <swe:item name="WIND"> - <swe:DataRecord> - <swe:label>Wind Measurement</swe:label> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="wind_speed"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_speed"> - <swe:uom code="km/h"/> - </swe:Quantity> - </swe:field> - <swe:field name="wind_dir"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_to_direction"> - <swe:uom code="deg"/> - </swe:Quantity> - </swe:field> - </swe:DataRecord> - </swe:item> - </swe:DataChoice> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=","/> - </swe:encoding> -</swe:DataStream> - - -The datastream records are encoded using the Text encoding method as shown below: - -TEMP,2009-05-23T19:36:15Z,25.5 -TEMP,2009-05-23T19:37:15Z,25.6 -WIND,2009-05-23T19:37:17Z,56.3,226.3 -TEMP,2009-05-23T19:38:15Z,25.5 -... - - -This datastream interleaves different types of messages separated by the block separator character. The element type is a “DataChoice” which means that each encoded block is composed of the item name ‘TEMP’ or ‘WIND’, followed by values of the item. This example also demonstrates that items of a choice can be of different types and length. - - - -Fixed size 2D array (stress matrix) -The following example illustrates how values of a fixed size 3×3 stress matrix can be text encoded inline: - -<swe:Matrix definition="http://sweet.jpl.nasa.gov/2.0/physPressure.owl#Stress"> - <swe:elementCount> - <swe:Count> - <swe:value>3</swe:value> - </swe:Count> - </swe:elementCount> - <swe:elementType name="row"> - <swe:Matrix definition="http://sweet.jpl.nasa.gov/2.0/info.owl#Row"> - <swe:elementCount> - <swe:Count> - <swe:value>3</swe:value> - </swe:Count> - </swe:elementCount> - <swe:elementType name="coef"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/mathVector.owl#Coordinate"> - <swe:uom code="MPa"/> - </swe:Quantity> - </swe:elementType> - </swe:Matrix> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator=" " tokenSeparator=","/> - </swe:encoding> - <swe:values>0.36,0.48,-0.8 -0.8,0.6,0.0 0.48,0.64,0.6</swe:values> -</swe:Matrix> - - -Note that elements of the outer array (i.e. a matrix is a special kind of array) are separated by block separators (i.e. each block surrounded by spaces corresponds to one row of the matrix) while the inner array elements are separated by token separators. - - - -Datastream of variable size 1D arrays (profile series) -The following example shows how SWE Common can be used to encode a series of irregular length profiles by using a variable size array: - -<swe:DataStream> - <swe:elementType name="profileData"> - <swe:DataRecord> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> - <swe:label>Sampling Time</swe:label> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="profilePoints"> - <swe:DataArray definition="http://sweet.jpl.nasa.gov/2.0/info.owl#Profile"> - <swe:elementCount> - <swe:Count/> - </swe:elementCount> - <swe:elementType name="point"> - <swe:DataRecord> - <swe:field name="depth"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/depth"> - <swe:label>Sampling Point Vertical Location</swe:label> - <swe:uom code="m"/> - </swe:Quantity> - </swe:field> - <swe:field name="salinity"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter#sea_water_salinity"> - <swe:label>Salinity</swe:label> - <swe:uom code="[ppth]"/> - </swe:Quantity> - </swe:field> - </swe:DataRecord> - </swe:elementType> - </swe:DataArray> - </swe:field> - </swe:DataRecord> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator="@@&#10;" tokenSeparator=","/> - </swe:encoding> -</swe:DataStream> - - -The datastream records are encoded using the Text encoding method as shown below: - -2005-05-16T21:47:12Z,5,0,45,10,20,20,30,30,35,40,40@@ -2005-05-16T22:43:05Z,4,0,45,10,20,20,30,30,35@@ -2005-05-16T23:40:52Z,5,0,45,10,20,20,30,30,35,40,40 -... - - -The example shows data for 3 profiles with a variable number of measurements along the vertical dimension. The number of measurements is indicated in the encoded data block by a number inserted after the timestamp, and before the measurements themselves. Since the array is itself the element of a “DataStream”, elements of the array are separated by token separators. - - - -Datastream with geometry (feature detection) -The following snippet is an example of datastream that contains a geometry. Here, each datastream record represents a feature detected in a video stream, and is composed of a timestamp, a scalar field and the geometry of the geolocated feature. - -<swe:DataStream> - <swe:label>Feature Detections</swe:label> - <swe:elementType name="detection"> - <swe:DataRecord> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime" - referenceFrame="http://www.opengis.net/def/trs/OGC/0/GPS"> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="type"> - <swe:Category definition="http://www.opengis.net/def/featureType"> - <swe:codeSpace xlink:href="http://x-myorg.net/def/VehicleTypes"/> - </swe:Category> - </swe:field> - <swe:field name="geom"> - <swe:Geometry definition="http://www.opengis.net/def/property/OGC/0/SamplingTime" srs="http://www.opengis.net/def/crs/EPSG/0/4326"> - <swe:constraint> - <swe:AllowedGeometries> - <swe:geomType>Point</swe:geomType> - <swe:geomType>Polygon</swe:geomType> - </swe:AllowedGeometries> - </swe:constraint> - </swe:Geometry> - </swe:field> - </swe:DataRecord> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=";"/> - </swe:encoding> -</swe:DataStream> - - -The datastream records are encoded using the Text encoding method as shown below: - -2007-10-23T15:46:12Z;Car;POINT(-86.3254 35.4812) -2007-10-23T15:49:03Z;Truck;POLYGON((-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812)) -2007-10-23T15:56:45Z;Bus;POLYGON((-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812)) -... - - - - - -XML Encoding Rules Examples -The following examples build on the ones provided in the section. The datastream descriptions are kept the same, except that the encoding method would have to be changed to: - -<swe:encoding> - <swe:XMLEncoding/> -</swe:encoding> - - -In the following sections, encoded values were kept identical to the ones used in the text encoding section, in order to facilitate comparison. - - -Datastream with records (weather data) -This example is based on the same datastream description as the one provided in . - -The following snippet shows how this datastream records are encoded using the XML encoding method: - -<swe:values xmlns:ns="http://www.myorg.com/datasets/id"> - <ns:weatherData> - <ns:time>2023-03-20T15:40:00Z</ns:time> - <ns:temp>15.3</ns:temp> - <ns:press>1014</ns:press> - <ns:windSpeed>3.5</ns:windSpeed> - <ns:windDir>56.0</ns:windDir> - </ns:weatherData> - <ns:weatherData> - <ns:time>2023-03-20T15:45:00Z</ns:time> - <ns:temp>15.4</ns:temp> - <ns:press>1015</ns:press> - <ns:windSpeed>5.6</ns:windSpeed> - <ns:windDir>123.0</ns:windDir> - </ns:weatherData> - <ns:weatherData> - <ns:time>2023-03-20T15:50:00Z</ns:time> - <ns:temp>15.8</ns:temp> - <ns:press>1014</ns:press> - <ns:windSpeed>13.2</ns:windSpeed> - <ns:windDir>34.0</ns:windDir> - </ns:weatherData> - ... -</swe:values> - - - - -Datastream with records and optional fields (navigation data) -This example is based on the same datastream description as the one provided in . - -The following snippet shows how this datastream records are encoded using the XML encoding method: - -<swe:values xmlns:ns="urn:myorg:dataset:X156822"> - <ns:navData> - <ns:time>2007-10-23T15:46:12Z</ns:time> - <ns:speed>15.3</ns:speed> - <ns:location> - <ns:lat>45.3</ns:lat> - <ns:lon>-90.5</ns:lon> - <ns:alt>311</ns:alt> - </ns:location> - </ns:navData> - <ns:navData> - <ns:time>2007-10-23T15:46:22Z</ns:time> - <ns:speed>25.3</ns:speed> - </ns:navData> - <ns:navData> - <ns:time>2007-10-23T15:46:32Z</ns:time> - <ns:speed>20.6</ns:speed> - <ns:location> - <ns:lat>45.3</ns:lat> - <ns:lon>-90.6</ns:lon> - <ns:alt>312</ns:alt> - </ns:location> - </ns:navData> - ... -</swe:values> - - -Notice that the optional ‘location’ field in the second stream element has been completely omitted. - - - -Datastream with choice (navigation data) -This example is based on the same datastream description as the one provided in . - -The following snippet shows how this datastream records are encoded using the XML encoding method: - -<swe:values xmlns:ns="urn:myorg:dataset:DC4578"> - <ns:message> - <ns:TEMP> - <ns:time>2009-05-23T19:36:15Z</ns:time> - <ns:temp>25.5</ns:temp> - </ns:TEMP> - </ns:message> - <ns:message> - <ns:TEMP> - <ns:time>2009-05-23T19:37:15Z</ns:time> - <ns:temp>25.6</ns:temp> - </ns:TEMP> - </ns:message> - <ns:message> - <ns:WIND> - <ns:time>2009-05-23T19:37:17Z</ns:time> - <ns:wind_speed>56.3</ns:wind_speed> - <ns:wind_dir>226.3</ns:wind_dir> - </ns:WIND> - </ns:message> - <ns:message> - <ns:TEMP> - <ns:time>2009-05-23T19:38:15Z</ns:time> - <ns:temp>25.5</ns:temp> - </ns:TEMP> - </ns:message> - ... -</swe:values> - - - - -Datastream of variable size 1D arrays (profile series) -This example is based on the same datastream description as the one provided in . - -The following snippet shows how this datastream records are encoded using the XML encoding method: - -<swe:values xmlns:ns="urn:myorg:dataset:PS3658"> - <ns:profileData> - <ns:time>2005-05-16T21:47:12Z</ns:time> - <ns:profilePoints elementCount="5"> - <ns:point> - <ns:depth>0</ns:depth> - <ns:salinity>45</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>10</ns:depth> - <ns:salinity>20</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>20</ns:depth> - <ns:salinity>30</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>30</ns:depth> - <ns:salinity>35</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>40</ns:depth> - <ns:salinity>40</ns:salinity> - </ns:point> - </ns:profilePoints> - </ns:profileData> - <ns:profileData> - <ns:time>2005-05-16T22:43:05Z</ns:time> - <ns:profilePoints elementCount="4"> - <ns:point> - <ns:depth>0</ns:depth> - <ns:salinity>45</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>10</ns:depth> - <ns:salinity>20</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>20</ns:depth> - <ns:salinity>30</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>30</ns:depth> - <ns:salinity>35</ns:salinity> - </ns:point> - </ns:profilePoints> - </ns:profileData> - ... -</swe:values> - - -This example shows how the array size is specified on the ‘profilePoints’ element corresponding to each nested array, and how element local names correspond to the “name” attributes of each component’s parent property. - - - -Datastream with geometry (feature detection) -This example is based on the same datastream description as the one provided in . - -The following snippet shows how this datastream records are encoded using the XML encoding method: - -<swe:values xmlns:ns="urn:myorg:dataset:X151451" xmlns:gml="http://www.opengis.net/gml/3.2"> - <ns:detection> - <ns:time>2007-10-23T15:46:12Z</ns:time> - <ns:type>Car</ns:type> - <ns:geom> - <gml:Polygon srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> - <gml:exterior> - <gml:LinearRing> - <gml:posList srsDimension="2">-86.3254 35.4812 -86.3253 35.4812 -86.3253 35.4811 -86.3254 35.4811 -86.3254 35.4812</gml:posList> - </gml:LinearRing> - </gml:exterior> - </gml:Polygon> - </ns:geom> - </ns:detection> - <ns:detection> - <ns:time>2007-10-23T15:49:03Z</ns:time> - <ns:type>Truck</ns:type> - <ns:geom> - <gml:Polygon srsName="http://www.opengis.net/def/crs/EPSG/0/4326" > - <gml:exterior> - <gml:LinearRing> - <gml:posList srsDimension="2">-86.3254 35.4812 -86.3253 35.4812 -86.3253 35.4811 -86.3254 35.4811 -86.3254 35.4812</gml:posList> - </gml:LinearRing> - </gml:exterior> - </gml:Polygon> - </ns:geom> - </ns:detection> - <ns:detection> - <ns:time>2007-10-23T15:56:45Z</ns:time> - <ns:type>Bus</ns:type> - <ns:geom> - <gml:Polygon srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> - <gml:exterior> - <gml:LinearRing> - <gml:posList srsDimension="2">-86.3254 35.4812 -86.3253 35.4812 -86.3253 35.4811 -86.3254 35.4811 -86.3254 35.4812</gml:posList> - </gml:LinearRing> - </gml:exterior> - </gml:Polygon> - </ns:geom> - </ns:detection> - ... -</swe:values> - - - - - -JSON Encoding Rules Examples -The following examples build on the ones provided in the section. The datastream descriptions are kept the same, except that the encoding method would have to be changed to: - -<swe:encoding> - <swe:JSONEncoding/> -</swe:encoding> - - -In the following sections, encoded values were kept identical to the ones used in the text encoding section, in order to facilitate comparison. - - -DataArray with inline values (curve) -This example is based on the same “DataArray” description as the one provided in . - -The equivalent JSON description for this “DataArray” is provided below: - -{ - "type": "DataArray", - "definition": "http://sweet.jpl.nasa.gov/2.0/mathFunction.owl#Function" - "description": "Measurement error vs. temperature", - "elementCount": { - "type": "Count", - "value": 5 - }, - "elementType": { - "name": "point", - "type": "DataRecord", - "label": "Error vs. Temperature", - "fields": [ - { - "name": "temp", - "type": "Quantity", - "definition": "http://sweet.jpl.nasa.gov/2.0/physThermo.owl#Temperature", - "label": "Temperature", - "uom": { "code": "Cel" } - }, - { - "name": "error", - "type": "Quantity", - "definition": "http://sweet.jpl.nasa.gov/2.0/sciUncertainty.owl#Error", - "label": "Relative Error", - "uom": { "code": "%" } - } - ] - }, - "values": [[0,5], [10,2], [50,2], [80,5], [100,15]] -} - - - - -Datastream with records (weather data) -This example is based on the same datastream description as the one provided in . - -The following snippet shows how this datastream records are encoded using the JSON encoding method: - -[ - { - "time": "2023-03-20T15:40:00Z", - "temp": 15.3, - "press": 1014, - "windSpeed": 3.5, - "windDir": 56.0 - }, - { - "time": "2023-03-20T15:45:00Z", - "temp": 15.4, - "press": 1015, - "windSpeed": 5.6, - "windDir": 123.0 - }, - { - "time": "2023-03-20T15:50:00Z", - "temp": 15.8, - "press": 1014, - "windSpeed": 13.2, - "windDir": 34.0 - }, - ... -] - - - - -Datastream with records and optional fields (navigation data) -This example is based on the same datastream description as the one provided in . - -The following snippet shows how this datastream records are encoded using the XML encoding method: - -[ - { - "time": "2007-10-23T15:46:12Z", - "speed": 15.3, - "location": { - "lat": 45.3, - "lon": -90.5, - "alt": 311 - } - }, - { - "time": "2007-10-23T15:46:22Z", - "speed": 25.3, - "location": null - }, - { - "time": "2007-10-23T15:46:32Z", - "speed": 20.6, - "location": { - "lat": 45.3, - "lon": -90.6, - "alt": 312 - } - }, - ... -] - - - - -Datastream with choice (navigation data) -This example is based on the same datastream description as the one provided in . - -The following snippet shows how this datastream records are encoded using the JSON encoding method: - -[ - { - "TEMP": { - "time": "2009-05-23T19:36:15Z", - "temp": 25.5 - } - }, - { - "TEMP": { - "time": "2009-05-23T19:37:15Z", - "temp": 25.6 - } - }, - { - "WIND": { - "time": "2009-05-23T19:37:17Z", - "wind_speed": 56.3, - "wind_dir": 226.3 - } - }, - { - "TEMP": { - "time": "2009-05-23T19:38:15Z", - "temp": 25.5 - } - }, - ... -] - - - - -Fixed size 2D array (stress matrix) -This example is based on the same “Matrix” description as the one provided in . - -The equivalent JSON description for this “Matrix” is provided below: - -{ - "type": "Matrix", - "definition": "http://sweet.jpl.nasa.gov/2.0/physPressure.owl#Stress" - "elementCount": { - "type": "Count", - "value": 3 - }, - "elementType": { - "name": "row", - "type": "Matrix", - "elementCount": { - "type": "Count", - "value": 3 - }, - "elementType": { - "name": "coef", - "type": "Quantity", - "definition": "http://sweet.jpl.nasa.gov/2.0/mathVector.owl#Coordinate", - "uom": { "code": "MPa" } - } - }, - "values": [[0.36,0.48,-0.8], [-0.8,0.6,0.0], [0.48,0.64,0.6]] -} - - - - -Datastream of variable size 1D arrays (profile series) -This example is based on the same datastream description as the one provided in . - -The following snippet shows how this datastream records are encoded using the JSON encoding method: - -[ - { - "time": "2005-05-16T21:47:12Z", - "profilePoints": [ - { "depth": 0, "salinity": 45 }, - { "depth": 10, "salinity": 20 }, - { "depth": 20, "salinity": 30 }, - { "depth": 30, "salinity": 35 }, - { "depth": 40, "salinity": 40 } - ] - }, - { - "time": "2005-05-16T22:43:05Z", - "profilePoints": [ - { "depth": 0, "salinity": 45 }, - { "depth": 10, "salinity": 20 }, - { "depth": 20, "salinity": 30 }, - { "depth": 30, "salinity": 35 } - ] - }, - { - "time": "2005-05-16T23:40:52Z", - "profilePoints": [ - { "depth": 0, "salinity": 45 }, - { "depth": 10, "salinity": 20 }, - { "depth": 20, "salinity": 30 }, - { "depth": 30, "salinity": 35 }, - { "depth": 40, "salinity": 40 } - ] - }, - ... -] - - - - -Datastream with geometry (feature detection) -This example is based on the same datastream description as the one provided in . - -The following snippet shows how this datastream records are encoded using the JSON encoding method: - -[ - { - "time": "2007-10-23T15:46:12Z", - "type": "Car", - "geom": { - "type": "Point", - "coordinates": [-86.3254, 35.4812] - } - }, - { - "time": "2007-10-23T15:49:03Z", - "type": "Truck", - "geom": { - "type": "Polygon", - "coordinates": [ - [-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812] - ] - } - }, - { - "time": "2007-10-23T15:56:45Z", - "type": "Bus", - "geom": { - "type": "Polygon", - "coordinates": [ - [-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812] - ] - } - }, - ... -] - - - - -Relationship with other ISO models - -Feature model -SWE “Records” can sometimes be seen as feature data from which GML feature representations could be derived. Even if it is true that a SWE “Record” contains values of feature properties, it does not always represent an object like a “Feature” does. The “Record” is simply a logical collection of fields that may be grouped together for a different reason than the fact that they all represent properties of the same object. - -The “Feature” model is a higher level model that is used to regroup property values inside the objects that they correspond to, as well as associate a meaning to the object itself. - -A good example is a set of weather observations obtained from different sensors that may be grouped into a single “Record” in SWE Common, but which does not constitute a feature in the GIS sense. - - - -Coverage model -SWE “Arrays” can sometimes be interpreted as coverage range data or grid data. However, SWE data arrays are lower level data types and don’t constitute a “Coverage” in themselves. The “Coverage” model described in OGC Abstract Topic 6 (OGC 07-011) can be used on top of the SWE “Array” model (which only provides means for describing and encoding the data), in order to provide a stronger link between range data and domain definition. - -Additionally, sensor descriptions given in SensorML (and thus using the SWE Common model) can be used to define a geo-referencing transformation that can be associated with a coverage via the same model. - - -Revision History -Date -Release -Editor -Primary clauses modified -Description - -2008-08-20 -2.0 draft -Alexandre Robin -All -Initial draft version -2008-10-30 -2.0 draft -Ingo Simonis -All -General revision -2009-10-30 -2.0 draft -Alexandre Robin -All -Draft candidate standard -2009-11-04 -2.0 draft -Peter Taylor -Clauses 6 and 7 -Additional examples, minor edits -2009-11-10 -2.0 draft -Alexandre Robin -All -General revision, added section 8 -2010-01-15 -2.0 draft -Alexandre Robin -All -Clarifications in requirements -2010-03-10 -2.0 final -Alexandre Robin -All -Corrections following RFC comments -2023-03-07 -2.1 draft -Alexandre Robin -All -Conversion to AsciiDoc / Metanorma -2023-03-08 -2.1 draft -Alexandre Robin -Clauses 7,8,9 -Removed requirements that were redundant with dependencies -2023-03-16 -2.1 draft -Alexandre Robin -Clause 7,8,9 -Added Geometry class -2023-03-21 -2.1 draft -Alexandre Robin -Clause 9 -Added JSON datastream encoding rules -2023-03-21 -2.1 draft -Alexandre Robin -Clause 9 -Clarified use of media types -2024-04-29 -3.0 draft -Alexandre Robin -All -Refactored to v3.0, removed XML encoding sections - - - -Normative referencesThe following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies. - - - - - 2024-02-05 -The Specification Model - -Standard for Modular specifications - -The Specification Model — Standard for Modular specifications - https://portal.ogc.org/files/?artifact_id=34762&version=2 08-131r3 2009-10-19 - Policy SWG - -Open Geospatial Consortium - 3 en Latn This standard contains requirements for writing standards to be used for any document whose eventual purpose is the specification of requirements for software, services or data structures. - 2024-02-05 -OpenGIS Implementation Specification for Geographic information - -Simple feature access - -Part 1: Common architecture - -OpenGIS Implementation Specification for Geographic information — Simple feature access — Part 1: Common architecture - http://www.opengis.net/doc/is/sfa/1.2.1 https://portal.ogc.org/files/?artifact_id=25355 06-103r4 2011-05-28 - John Herring - -Open Geospatial Consortium - 4 en Latn The OpenGIS® Simple Features Interface Standard (SFS) provides a well-defined and common way for applications to store and access feature data in relational or object-relational databases, so that the data can be used to support other applications through a common feature model, data store and information access interface. OpenGIS Simple Features are geospatial features described using vector data elements such as points, lines and polygons. - 2024-02-05 -Geography Markup Language (GML) simple features profile (with Corrigendum) - -Geography Markup Language (GML) simple features profile (with Corrigendum) - https://portal.ogc.org/files/?artifact_id=42729 10-100r3 2011-05-11 - Linda van den Brink - - Clemens Portele - - Panagiotis (Peter) A. Vretanos - -Open Geospatial Consortium - 3 en Latn This approved OGC Implementation Standard defines a Simple Features profile of the Geography Markup Language version 3.2. This Simple Features Profile has been aligned with the OGC Simple Features standard for SQL version 1.2. Simple Features include: Point, Curve (LineString), Surface (Polygon), Geometry, MultiPoint, MultiCurve, MultiSurface, and MultiGeometry. The detailed abstract model for OGC features and geometry can be found in the OGC Abstract Specification, Topic Volume 1: Features (which is equivalent to ISO 19107). This Simple Features profile of GML began as a product of OGC’s Interoperability Program: a global, collaborative, hands-on engineering and testing program designed to deliver prototype technologies and proven candidate standards into the OGC’s Specification Development Program. In OGC Interoperability Initiatives, international teams of technology providers work together to solve specific geo-processing interoperability problems posed by Initiative. - -Date and time — Representations for information interchange — Part 1: Basic rules. International Organization for Standardization, Geneva (2019). . -ISO 8601:201986012019 -ISO - - -Date and time — Representations for information interchange — Part 2: Extensions. International Organization for Standardization, Geneva (2019). . -ISO 8601:201986012019 -ISO - - 2024-02-05 -Information technology - -Information technology - https://www.iso.org/standard/39479.html https://www.iso.org/contents/data/standard/03/94/39479.detail.rss https://standards.iso.org/ittf/PubliclyAvailableStandards/index.html ISO/IEC 11404:2007 ISO/IEC 11404:2007(E) urn:iso:std:iso-iec:11404:stage-90.92:ed-2 11404 2007-12 -International Organization for Standardization - ISO www.iso.org -International Electrotechnical Commission - IEC www.iec.ch 2 en Latn ISO/IEC 11404:2007 specifies the nomenclature and shared semantics for a collection of datatypes commonly occurring in programming languages and software interfaces, referred to as the General-Purpose Datatypes (GPD). It specifies both primitive datatypes, in the sense of being defined ab initio without reference to other datatypes, and non-primitive datatypes, in the sense of being wholly or partly defined in terms of other datatypes. The specification of datatypes in ISO/IEC 11404:2007 is “general-purpose” in the sense that the datatypes specified are classes of datatype of which the actual datatypes used in programming languages and other entities requiring the concept “datatype” are particular instances. These datatypes are general in nature; thus, they serve a wide variety of information processing applications. ISO/IEC 11404:2007 expressly distinguishes three notions of datatype: — the conceptual, or abstract, notion of a datatype, which characterizes the datatype by its nominal values and properties; — the structural notion of a datatype, which characterizes the datatype as a conceptual organization of specific component datatypes with specific functionalities; and — the implementation notion of a datatype, which characterizes the datatype by defining the rules for representation of the datatype in a given environment. ISO/IEC 11404:2007 defines the abstract notions of many commonly used primitive and non-primitive datatypes which possess the structural notion of atomicity. ISO/IEC 11404:2007 does not define all atomic datatypes; it defines only those which are common in programming languages and software interfaces. ISO/IEC 11404:2007 defines structural notions for the specification of other non-primitive datatypes, and provides a means by which datatypes not defined herein can be defined structurally in terms of the GPDs defined herein. ISO/IEC 11404:2007 defines a partial terminology for implementation notions of datatypes and provides for the use of this terminology in the definition of datatypes. The primary purpose of this terminology is to identify common implementation notions associated with datatypes and to distinguish them from conceptual notions. ISO/IEC 11404:2007 specifies the required elements of mappings between the GPDs and the datatypes of some other language. ISO/IEC 11404:2007 does not specify the precise form of a mapping, but rather the required information content of a mapping. 90 92 2007 -ISO/IEC - ISO/IEC 11404:1996 ISO/IEC 11404:1996 - ISO/IEC CD 11404 ISO/IEC CD 11404 - Geneva - 2024-02-05 -Geographic information - -Geographic information - https://www.iso.org/standard/59164.html https://www.iso.org/contents/data/standard/05/91/59164.detail.rss ISO 19101-1:2014 ISO 19101-1:2014(E) urn:iso:std:iso:19101:-1:stage-90.93:ed-1 19101 2014-11 -International Organization for Standardization - ISO www.iso.org 1 en Latn ISO 19101-1:2014 defines the reference model for standardization in the field of geographic information. This reference model describes the notion of interoperability and sets forth the fundamentals by which this standardization takes place. Although structured in the context of information technology and information technology standards, ISO 19101-1:2014 is independent of any application development method or technology implementation approach. 90 93 2014 -ISO - ISO 19101:2002 ISO 19101:2002 - Geneva - -Conceptual Schema Language -ISO 19103:2005191032005 -ISO - - -Spatial Schema -ISO 19107:2003191072003 -ISO - - 2024-02-05 -Geographic information - -Geographic information - https://www.iso.org/standard/26013.html https://www.iso.org/contents/data/standard/02/60/26013.detail.rss ISO 19108:2002 ISO 19108:2002(E) urn:iso:std:iso:19108:stage-90.93:ed-1 19108 2002-09 -International Organization for Standardization - ISO www.iso.org 1 en Latn ISO 19108:2002 defines concepts for describing temporal characteristics of geographic information. It depends upon existing information technology standards for the interchange of temporal information. It provides a basis for defining temporal feature attributes, feature operations, and feature associations, and for defining the temporal aspects of metadata about geographic information. Since this International Standard is concerned with the temporal characteristics of geographic information as they are abstracted from the real world, it emphasizes valid time rather than transaction time. 90 93 2002 -ISO - ISO 19108:2002/Cor 1:2006 ISO 19108:2002/Cor 1:2006 2021-03-15 - Geneva - -Spatial Referencing by Coordinates -ISO 19111:2007191112007 -ISO - -Unified Code for Units of Measure (UCUM), Version 2.1, November 2017, UCUM -Unicode Technical Std #18, Unicode Regular Expressions, Version 13, Aug. 2009Unicode -The Unicode Standard, Version 5.2, October 2009Unicode - - 2024-02-05 -The JavaScript Object Notation (JSON) Data Interchange Format - https://www.rfc-editor.org/info/rfc8259 RFC 8259 10.17487/RFC8259 RFC8259 2017-12 - T. Bray - -RFC Publisher - -RFC Series - en Latn JavaScript Object Notation (JSON) is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript Programming Language Standard. JSON defines a small set of formatting rules for the portable representation of structured data. - This document removes inconsistencies with other specifications of JSON, repairs specification errors, and offers experience-based interoperability guidance. - -STD - 90 -RFC - 8259 -IETF - - 2024-02-05 -The GeoJSON Format - https://www.rfc-editor.org/info/rfc7946 RFC 7946 10.17487/RFC7946 RFC7946 2016-08 - H. Butler - - M. Daly - - A. Doyle - - S. Gillies - - S. Hagen - - T. Schaub - -RFC Publisher - -RFC Series - en Latn GeoJSON is a geospatial data interchange format based on JavaScript Object Notation (JSON). It defines several types of JSON objects and the manner in which they are combined to represent data about geographic features, their properties, and their spatial extents. GeoJSON uses a geographic coordinate reference system, World Geodetic System 1984, and units of decimal degrees. - -RFC - 7946 -IETF - JSON Geospatial JavaScript Object Notation - 2024-02-05 -Web Linking - https://www.rfc-editor.org/info/rfc8288 RFC 8288 10.17487/RFC8288 RFC8288 2017-10 - M. Nottingham - -RFC Publisher - -RFC Series - en Latn This specification defines a model for the relationships between resources on the Web (“links”) and the type of those relationships (“link relation types”). - It also defines the serialisation of such links in HTTP headers with the Link header field. - -RFC - 8288 -IETF - link relation -JSON Schema Validation: A Vocabulary for Structural Validation of JSON, Version 2020-12, IETF JSON Schema - 2024-02-05 -Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies - https://www.rfc-editor.org/info/rfc2045 RFC 2045 10.17487/RFC2045 RFC2045 1996-11 - N. Freed - - N. Borenstein - -RFC Publisher - -RFC Series - en Latn This initial document specifies the various headers used to describe the structure of MIME messages. [STANDARDS-TRACK] - -RFC - 2045 -IETF - MIME media types headers - 2024-02-05 -Augmented BNF for Syntax Specifications: ABNF - https://www.rfc-editor.org/info/rfc5234 RFC 5234 10.17487/RFC5234 RFC5234 2008-01 - D. Crocker - - P. Overell - -RFC Publisher - -RFC Series - en Latn Internet technical specifications often need to define a formal syntax. Over the years, a modified version of Backus-Naur Form (BNF), called Augmented BNF (ABNF), has been popular among many Internet specifications. The current specification documents ABNF. It balances compactness and simplicity with reasonable representational power. The differences between standard BNF and ABNF involve naming rules, repetition, alternatives, order-independence, and value ranges. This specification also supplies additional rule definitions and encoding for a core lexical analyzer of the type common to several Internet specifications. [STANDARDS-TRACK] - -STD - 68 -RFC - 5234 -IETF - ABNF backus-naur form augmented backus-naur form rule definitions encoding core lexical analyzer - 2024-02-05 -IEEE Standard for Floating-Point Arithmetic - https://ieeexplore.ieee.org/document/4610935 IEEE 754-2008 IEEE 754™-2008 978-0-7381-5752-8 10.1109/IEEESTD.2008.4610935 IEEE 754-2008 2009-01-26 2008-08-29 2013-08-15 2008-06-12 -Institute of Electrical and Electronics Engineers - IEEE http://www.ieee.org en Latn This standard specifies interchange and arithmetic formats and methods for binary and decimal floating-point arithmetic in computer programming environments. This standard specifies exception conditions and their default handling. An implementation of a floating-point system conforming to this standard may be realized entirely in software, entirely in hardware, or in any combination of software and hardware. For operations specified in the normative part of this standard, numerical results and exceptions are uniquely determined by the values of the input data, sequence of operations, and destination formats, all under user control. 2008 -Institute of Electrical and Electronics Engineers - IEEE http://www.ieee.org IEEE 754-2019 IEEE 754-2019 - revises ANSI/IEEE 754-1985 ANSI/IEEE 754-1985 - IEEE 754-2019 IEEE 754-2019 - revises ANSI/IEEE 754-1985 ANSI/IEEE 754-1985 - revises ANSI/IEEE 754-1985 ANSI/IEEE 754-1985 - IEEE 754-2019 IEEE 754-2019 - IEEE Standards Floating-point arithmetic Microprocessors Software Hardware Trademarks 754-2008 arithmetic binary computer decimal exponent floating-point format interchange NaN number rounding significand subnormal - -Bibliography -TODOThe TC has approved Springer LNCS as the official document citation type. - -Springer LNCS is widely used in technical and computer science journals and other publications - - -– Actual References: - -[n] Journal: Author Surname, A.: Title. Publication Title. Volume number, Issue number, Pages Used (Year Published) - - OGC: OGC Testbed 12 Annex B: Architecture (2015). - OGCTB12 - 12 - - - - - - - - - - - - - - - : - - - - -sourcecode table td { padding: 5px; } -sourcecode table pre { margin: 0; } -sourcecode, sourcecode .w { - color: #444444; -} -sourcecode .cp { - color: #CC00A3; -} -sourcecode .cs { - color: #CC00A3; -} -sourcecode .c, sourcecode .ch, sourcecode .cd, sourcecode .cm, sourcecode .cpf, sourcecode .c1 { - color: #1E90FF; -} -sourcecode .kc { - color: #C34E00; -} -sourcecode .kd { - color: #0000FF; -} -sourcecode .kr { - color: #007575; -} -sourcecode .k, sourcecode .kn, sourcecode .kp, sourcecode .kt, sourcecode .kv { - color: #0000FF; -} -sourcecode .s, sourcecode .sb, sourcecode .sc, sourcecode .ld, sourcecode .sd, sourcecode .s2, sourcecode .se, sourcecode .sh, sourcecode .si, sourcecode .sx, sourcecode .sr, sourcecode .s1, sourcecode .ss { - color: #009C00; -} -sourcecode .sa { - color: #0000FF; -} -sourcecode .nb, sourcecode .bp { - color: #C34E00; -} -sourcecode .nt { - color: #0000FF; -} -
- - - -Copyright notice -

Copyright © 2024 Open Geospatial Consortium
-To obtain additional rights of use, visit -

-
- - -Note -

Attention is drawn to the possibility that some of the elements of this document may be the subject of patent rights. The Open Geospatial Consortium shall not be held responsible for identifying any or all such patent rights.

- -

Recipients of this document are requested to submit, with their comments, notification of any relevant patent claims or other intellectual property rights of which they may be aware that might be infringed by any implementation of the standard set forth in this document, and to provide supporting documentation.

-
-
- - - - -License Agreement -

Use of this document is subject to the license agreement at

-
-
- - - - -Notice for Drafts -

This document is not an OGC Standard. This document is distributed for review and comment. This document is subject to change without notice and may not be referred to as an OGC Standard.

- -

Recipients of this document are invited to submit, with their comments, notification of any relevant patent rights of which they are aware and to provide supporting documentation.

-
-
- - - - -

Suggested additions, changes and comments on this document are welcome and encouraged. Such suggestions may be submitted using the online change request form on OGC web site:

-
-
-
Contents -I.<tab/>Abstract

The primary focus of the SWE Common Data Model is to define and package data in a self-describing and semantically enabled way. The main objective is to achieve interoperability, first at the syntactic level, and later at the semantic level (by using ontologies and probably semantic mediation) so that (sensor) data can be better understood by machines, processed automatically in complex workflows and easily shared between intelligent nodes.

- -

This standard is one of several implementation standards produced under OGC’s Connected Systems activity, and is a revision of content that was previously developed in the context of the Sensor Web Enablement initiative. These common data models are intended to be used in various OGC standards, and in particular, SensorML and OGC API — Connected Systems.

-
-II.<tab/>Keywords -

The following are keywords to be used by search engines and document catalogues.

-

ogcdoc, OGC document, html, SWE, sensor, sensorweb, connected systems, json, encoding, observation, command, tasking, property

- -III.<tab/>Preface -

The OGC SWE Common Data Model Encoding Standard is the result of worked done by the Connected Systems Working Group of the OGC, with the aim of modernizing the Sensor Wen Enablement (SWE) suite of Standards.

- -

To increase the brevity and readability of this Standard, many OGC document titles are shortened and/or abbreviated. Therefore, in the context of this document, the following phrases are defined:

- -

“this Standard” shall be interpreted as equivalent to “OGC SWE Common Data Model Encoding Standard”. -“SensorML” or “SensorML Standard” shall be interpreted as equivalent to “OGC Sensor Modeling Language Encoding Standard”

-
-IV.<tab/>Security considerations -

No security considerations have been made for this Standard.

-
-V.<tab/>Submitting Organizations -

The following organizations submitted this Document to the Open Geospatial Consortium (OGC):

-
  • GeoRobotix, Inc.
  • -
  • Botts Innovative Research, Inc.
  • -
  • Cesium GS, Inc.
  • -
  • 52° North Initiative for Geospatial Open Source Software GmbH
  • -
  • Pelagis Data Solutions
  • -
  • National Geospatial-Intelligence Agency (NGA)
-
- -VI.<tab/>Submitters -

All questions regarding this submission should be directed to the editor or the submitters:

- - - - - - - - - - - - - -
NameAffiliation
Alex Robin (Editor)GeoRobotix, Inc.
Christian Autermann52° North Initiative
Chuck HeazelHeazeltech
Mike BottsBotts Innovative Research, Inc.
- -

Additional contributors to this Standard include the following:

- - - - - - - - - - - - - - - - - - - - -
NameAffiliation
Arne Broering52° North Initiative
Barry ReffUS DHS
Ingo SimonisiGSI
Johannes EchterhoffiGSI
John HerringOracle USA
Luis BermudezSURA
Nick GarayBotts Innovative Research, Inc.
Peter TaylorCSIRO
-
-VII.<tab/>Foreword -

This document deprecates version 2.0 of the OGC® SWE Common Data Model Encoding Standard (OGC 08-094r2).

- -

The following changes have been made:

- -
  • Addition of the JSON encodings and schemas

    -
  • -
  • Addition of the Geometry data component (modeled on OGC simple feature geometries)

    -
  • -
  • Deprecation of the XML encodings

    -
  • -
  • Technical revision and improved explanations in various clauses

    -
  • -
- -

This release is not fully backward compatible with version 2.0 even though changes were kept to a minimum.

-
- - - - - - - -1.<tab/>Scope -

This standard defines low level data models for exchanging sensor related data between nodes of the OGC® Connected Systems framework (previously Sensor Web Enablement (SWE) framework). These models allow applications and/or servers to structure, encode and transmit sensor datasets in a self describing and semantically enabled way.

- -

More precisely, the SWE Common Data Model is used to define the representation, nature, structure and encoding of sensor related data. These four pieces of information, essential for fully describing a data stream, are further defined in section 6.

- -

The SWE Common Data Model is intended to be used for describing static data (files) as well as dynamically generated datasets (on the fly processing), data subsets, process and web service inputs and outputs, and real time streaming data and commands. All categories of sensor observations are in scope ranging from simple in-situ temperature data to satellite imagery and full motion video.

- -

This standard defines JSON encodings for the dataset/datastream description, while the data itself can be encoded in JSON, text or binary form. This standard is used by other existing OGC standards such as the Sensor Model Language (SensorML) and OGC API — Connected Systems. One goal of the SWE Common Data Model is to maintain the functionality and consistency between these related standards.

-
- - -2.<tab/>Conformance -

This standard has been written to be compliant with the OGC Specification Model – A Standard for Modular Specification (OGC 08-131r3). Extensions of this standard shall themselves be conformant to the OGC Specification Model.

- -

Conformance with this specification shall be checked using all the relevant tests specified in Annex A. The framework, concepts, and methodology for testing, and the criteria to be achieved to claim conformance are specified in ISO 19105: Geographic information — Conformance and Testing. In order to conform to this OGC™ encoding standard, a standardization target shall implement the core conformance class, and choose to implement any one of the other conformance classes.

- -

Additionally, it is highly recommended that JSON based implementations of the conceptual models do implement requirement classes from clause 8 and clause 9 of this standard, respectively, and pass the corresponding conformance classes instead of defining new encodings.

- -

TODO

- -

This standard defines XXXX.

- -

Requirements for N standardization target types are considered:

- -
  • AAAA

    -
  • -
  • BBBB

    -
  • -
- -

Conformance with this standard shall be checked using all the relevant tests specified in Annex A (normative) of this document. The framework, concepts, and methodology for testing, and the criteria to be achieved to claim conformance are specified in the OGC Compliance Testing Policies and Procedures and the OGC Compliance Testing web site.

- -

In order to conform to this OGC® interface standard, a software implementation shall choose to implement:

- -
  • Any one of the conformance levels specified in Annex A (normative).

    -
  • -
  • Any one of the Distributed Computing Platform profiles specified in Annexes TBD through TBD (normative).

    -
  • -
- -

All requirements-classes and conformance-classes described in this document are owned by the standard(s) identified.

-
- - - - -4.<tab/>Terms and definitions

This document uses the terms defined in OGC Policy Directive 49, which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this document and OGC documents do not use the equivalent phrases in the ISO/IEC Directives, Part 2.

-

This document also uses terms defined in the OGC Standard for Modular specifications (OGC 08-131r3), also known as the ‘ModSpec’. The definitions of terms such as standard, specification, requirement, and conformance test are provided in the ModSpec.

-

For the purposes of this document, the following additional terms and definitions apply.

- -

This document uses the terms defined in Sub-clause 5.3 of [OGC06-121r9], which is based on the ISO/IEC Directives, Part 2, Rules for the structure and drafting of International Standards. In particular, the word “shall” (not “must”) is the verb form used to indicate a requirement to be strictly followed to conform to this standard.

- -

For the purposes of this document, the following additional terms and definitions apply.

- -

TODO

- -4.1.Feature -

Abstraction of real-world phenomena

- - - [SOURCE: ISO-19101, definition 4.11]
- -4.2.Observation -

Act of observing a property

- - - [SOURCE: ISO-19156, definition 4.10]
- -4.3.Observation Procedure -

Method, algorithm or instrument, or system of these which may be used in making an observation

Note: In the context of the sensor web, an observation procedure is often composed of one or more sensors that transform a real world phenomenon into digital information, plus additional processing steps.

- - - - - [SOURCE: ISO-19156, definition 4.11]
- -4.4.Property -

Facet or attribute of an object referenced by a name -Example : Abby’s car has the colour red, where “colour red” is a property of the car instance

- - - [SOURCE: ISO-19143]
- -4.5.Sensor -

Type of observation procedure that provides the estimated value of an observed property at its output -Note: A sensor uses a combination of physical, chemical or biological means in order to estimate the underlying observed property. At the end of the measuring chain electronic devices often produce signals to be processed

-
- -4.6.Sensor Network -

A collection of sensors and processing nodes, in which information on properties observed by the sensors may be transferred and processed -Note: A particular type of a sensor network is an ad hoc sensor network.

-
- -4.7.Sensor Data -

List of digital values produced by a sensor that represents estimated values of one or more observed properties of one or more features -Note: Sensor data is usually available in the form of data streams or computer files.

-
- -4.8.Sensor Related Data -

List of digital values produced by a sensor that contains auxiliary information that is not directly related to the value of observed properties -Example: sensor status, quality of measure, quality of service, etc… When such data is measured, it is sometimes considered sensor data as well.

-
- -4.9.Data Component -

Element of sensor data definition corresponding to an atomic or aggregate data type -Note: A data component is a part of the overall dataset definition. The dataset structure can then be seen as a hierarchical tree of data components.

-
-
- - -6.<tab/>Conventions - -6.1.<tab/>Identifiers -

The normative provisions in this standard are denoted by the URI

- -

- -

All requirements and conformance tests that appear in this document are denoted by partial URIs which are relative to this base.

-
- - -6.2.<tab/>Abbreviated terms -

In this document the following abbreviations and acronyms are used or introduced:

- -
  • CRS: Coordinate Reference System

    -
  • -
  • CSML: Climate Science Modeling Language

    -
  • -
  • GPS: Global Positioning System

    -
  • -
  • ISO International Organization for Standardization

    -
  • -
  • MISB Motion Imagery Standards Board

    -
  • -
  • OGC Open Geospatial Consortium

    -
  • -
  • SAS Sensor Alert Service

    -
  • -
  • SensorML Sensor Model Language

    -
  • -
  • SI Système International (International System of Units)

    -
  • -
  • SOS Sensor Observation Service

    -
  • -
  • SPS Sensor Planning Service

    -
  • -
  • SWE Sensor Web Enablement

    -
  • -
  • TAI Temps Atomique International (International Atomic Time)

    -
  • -
  • UML Unified Modeling Language

    -
  • -
  • UTC Coordinated Universal Time

    -
  • -
  • XML eXtended Markup Language

    -
  • -
  • 1D One Dimensional

    -
  • -
  • 2D Two Dimensional

    -
  • -
  • 3D Three Dimensional

    -
  • -
-
- -6.3.<tab/>UML Notation -

The diagrams that appear in this standard are presented using the Unified Modeling Language (UML) static structure diagram. The UML notations used in this standard are described in the diagram below.

- -
Figure 1
-
-
- - -7.<tab/>Requirements Class: Core Concepts (normative core) - - -

Requirements class 1: Core Concepts

Identifier/req/core
Target typeDerived Models and Software Implementations
Conformance classConformance class A.1: /conf/core
- - -7.1.<tab/>Introduction -

The generic SWE Common data model defined by this standard aims at providing verbose information to robustly describe sensor related datasets. We define Sensor Data as data resulting from the observation of properties of virtual or real world objects (or features) by any type of Observation Procedure (See the Observation and Measurements specification OGC 07-022r1 for a more complete description of the observation model used in SWE).

- -

Sensor related datasets however are not limited to sensor observation values, but can also include auxiliary information such as status or ancillary data. In the following sections, we will use the term ‘property’ in a broader sense, which does not necessarily imply “property measured by a sensor”.

- -

A dataset is composed of Data Components whose values need to be put into context in order to be fully understood and interpreted, by either humans or machines. The SWE Common Data Model provides several pieces of information that are necessary to achieve this goal. More precisely, the SWE Common Data Model covers the following aspects of datasets description:

- -
  • Representation

    -
  • -
  • Nature of data and semantics (by using identifiers pointing to external semantics)

    -
  • -
  • Quality

    -
  • -
  • Structure

    -
  • -
  • Encoding

    -
  • -
- -

This requirement class constitutes the core of this standard. The standardization target types of this core are all models or software implementations seeking compliance with this standard.

- - - -

Requirement 1

Identifier/req/core/core-concepts-used
Statement

A derived model or software implementation shall correctly implement the concepts defined in the core of this standard.

-
- - -7.2.<tab/>Data Representation -

Data representation deals with how property values are represented and stored digitally. Each component (or field) in a dataset carries a value that represents the state of a property. This representation will vary depending on the nature of the method used to capture the data and/or the target usage. For instance, a fluid temperature can be represented as a decimal number expressed in degrees Celsius (i.e. 25.4 °C), or as a categorical value taken from a list of possible choices (such as “freezing, cold, normal, warm, hot”).

- -

The following types of representations have been identified: Boolean, Categorical, Continuous Numerical, Discrete Countable and Textual. The paragraphs below explain basic features of each of these representation types.

- - -7.2.1.<tab/>Boolean -

A Boolean representation of a property can take only two values that should be “true/false” or “yes/no”. In a sense, this type of representation is a particular case of the categorical representation with only two predefined options.

- -

Examples

- -

Motion detectors output can be represented by a boolean value -– TRUE if there is motion in the room, FALSE otherwise.

- -

On/Off status of a measurement system can be represented by a boolean value -– TRUE if the system in on, FALSE if the system is off.

-
- - - -

Requirement 2

Identifier/req/core/boolean-rep-valid
Statement

A boolean representation shall at least consist of a boolean value.

- -

The “Boolean” class described in Clause 8.2.4 is used to define a data component with a Boolean representation.

-
- - -7.2.2.<tab/>Categorical -

A categorical representation is a type of discrete representation of a property that only allows picking a value from a well defined list of possibilities (i.e. categories). This list is called a code space in this standard, following ISO 19103 terminology.

- -

The different possible values constituting a code space are usually listed explicitly in an out-of-band dictionary or ontology. This is necessary because each value should be defined formally and unambiguously, so that it can be interpreted correctly.

- -

Examples

- -

Biological or chemical species data is usually represented by a categorical data component that can leverage on existing controlled vocabulary.

- -

A camera mode can be represented by a categorical value: AUTO_FOCUS, MANUAL_FOCUS, etc…​

-
- - - -

Requirement 3

Identifier/req/core/categorical-rep-valid
Statement

A categorical representation shall at least consist of a category identifier and information describing the value space of this identifier.

- -

The “Category” class described in Clause 8.2.6 is used to define a data component with a categorical representation.

-
- - -7.2.3.<tab/>Numerical (continuous) -

Perhaps the most used representation of a property value, especially in the science and technical communities, is the numerical one, as the majority of properties measured by sensors can be represented by numbers.

- -

Numerical representation is often used for continuous values and, in this case, the representation consists of a decimal (often floating point) number associated to a scale or unit of measure. The unit specification is mandatory even for quantities such as ratios that have no physical unit (in this case a scale factor is provided such as 1, 1/100 for percents, 1/1000 for per thousands, etc.).

- -

Examples

- -

Temperature measurements can be represented by a number associated to a unit such as degrees Celsius or Fahrenheit: 23.51°C, 94°F

- -

A velocity vector is composed of several values (usually 2 or 3) associated to a unit of speed: [1.0 2.0 3.0] m/s.

-
- - - -

Requirement 4

Identifier/req/core/numerical-rep-valid
Statement

A continuous numerical representation shall at least consist of a decimal number and the scale (or unit) used to express this number.

- -

The “Quantity” class described in Clause 8.2.8 is used to define a data component with a decimal representation and a unit of measure.

-
- - -7.2.4.<tab/>Countable (discrete) -

Discrete countable properties are also of interest and are most accurately captured with a numerical integer representation. They do not require a unit since the unit is always the unit of count (i.e. the person if we are counting persons, the pixel if we are counting pixels, etc). Note that continuous properties can also be represented as integers with certain combinations of scale and precision. This case should not be confused with the countable properties described here.

- -

Examples

- -

Array indices and sizes are countable properties with no unit.

- -

There are numerous other countable properties such as number of persons, number of bytes, number of frames, etc. for which the unit is obvious from the definition of the property itself.

-
- -

A discrete countable representation should not be confused with a continuous numerical representation whose scale and precision allow encoding the property value as an integer.

- - - -

Requirement 5

Identifier/req/core/countable-rep-valid
Statement

A countable representation shall at least consist of an integer number.

- -

The “Count” class described in Clause 8.2.7 is used to define a data component with an integer representation and no unit of measure.

-
- - -7.2.5.<tab/>Textual -

A textual representation is useful for providing human readable data, expressed in natural language, as well as various alpha numeric tokens that cannot be assigned to well-defined categories.

- -

Examples

- -

Comments or notes written by humans (ex: data annotations, quality assessments).

- -

Machine generated messages for which there is no taxonomy (ex: automatic alert messages).

- -

Alphanumeric identifier schemes leading to a large number of possibilities that cannot be explicitly enumerated (ex: UUID, ISBN code, URN).

-
- - - -

Requirement 6

Identifier/req/core/textual-rep-valid
Statement

A textual representation shall at least consist of a character string.

- -

The “Text” class described in Clause 8.2.5 is used to define a data component with a textual representation.

-
- - -7.2.6.<tab/>Constraints -

Constraints can be added to some representation types to further restrict the set of possible values allowed for a given property:

- -
  • A boolean representation cannot be restricted further since it is already limited to only two possibilities.

    -
  • -
  • A numerical representation can be constrained by a list of allowed values and/or bounded or unbounded intervals. A decimal representation can also be constrained by the number of significant digits after the decimal point.

    -
  • -
  • A categorical representation can be constrained by a list of possible choices, which should be a subset of the list of possibilities defined by the code space.

    -
  • -
  • A textual representation can be constrained by a pattern expressed in a well known language such as regular expression syntax.

    -
  • -
- -

These constraints apply only to the value of the data component to which they are associated. They shall not be used to express constraints on other data components or on any other information than the value.

- -

Examples

- -

A decimal representation of an angular property such as latitude can be constrained to the [-90° 90°] interval.

- -

A temperature reading produced by a sensor can be constrained to the [-50°C +250°C] range.

-
-
-
- - -7.3.<tab/>Nature of Data -

We define “Nature of data” as the information needed to understand what property the value represents. It is thus connected to semantics and the semantic details are often provided by external sources such as dictionaries, taxonomies or ontologies. Note that it is independent of the type of representation used and it does not include information about how the data was actually measured or acquired. This lineage information should be described by other means as explained in Clause 7.4.3.

- - -7.3.1.<tab/>Human readable information -

The first means by which nature of data can be communicated is through human readable text. The data component’s description, which is present in all data types defined in this specification, can hold any length of text for this purpose. The data component’s label is used to carry short human readable information (i.e. a short name); this is useful to allow data consumers to quickly identify the represented property.

- -

It is not recommended to use the concepts of “description” and “label” in a way that they contain robust semantic information (i.e. that machines can rely upon). The content of such fields is intended to be interpretable solely by humans.

-
- - -7.3.2.<tab/>Robust semantics -

All SWE Common data types allow for associating each data component in a dataset with the definition of the Property that it represents.

- - - -

Requirement 7

Identifier/req/core/semantics-defined
Statement

All data values shall be associated with a clear definition of the property that the value represents.

- -

It is recommended that a model uses references to out-of-band dictionaries rather than inline information because semantics are supposed to be shared by multiple datasets. Using references also helps by providing a framework that is independent from the actual semantic technology used.

- -

The SWE Common UML models and XML schemas desribed in this standard can be used in combination with any semantic web technology. It is thus possible to connect a SWE dataset description to an existing taxonomy provided the external register exposes a unique identifier for each entry.

- -

These semantic references point to out-of-band semantic information that can be encoded in various languages, such as the Ontology Web Language (OWL) or GML dictionary.

- - - -

Requirement 8

Identifier/req/core/semantics-resolvable
Statement

If semantic information is provided by referencing out-of-band data, the locators or identifiers used to point to this information shall be resolvable by some well-defined method.

-
- - -7.3.3.<tab/>Time, space and projected quantities -

Temporal, spatial and other projected quantities need to be further defined by specifying the reference frame and axis with respect to which the quantity is expressed. In SWE Common, any simple component type can be associated to a particular axis of a given reference frame.

- -

Examples

- -

Satellite position data can be defined as a vector of 3 components, expressed in the J2000 ECI Cartesian frame, the 1st component being associated to the X axis, the 2nd to the Y axis and the 3rd to the Z axis.

- -

Angular velocity data from an Inertial Measurement Unit can be defined as a vector of 3 components, expressed in the plane reference frame (for instance ENU defined by local East, North, Up directions), the Euler components being mapped to X, Y, Z respectively.

- -

Relative time data can be given with respect to an arbitrary epoch itself positioned in a well defined reference frame such as TAI (from the French “Temps Atomique International” = International Atomic Time).

-
- - - -

Requirement 9

Identifier/req/core/temporal-frame-defined
Statement

A temporal quantity shall be expressed with respect to a well defined temporal reference frame and this frame shall be specified.

- - - -

Requirement 10

Identifier/req/core/spatial-frame-defined
Statement

A spatial quantity shall be expressed with respect to the axes of a well defined spatial reference frame and this frame shall be specified.

- -

The “Time” class described in Clause 8.2.9 is designed for carrying a temporal reference frame or a time of reference in the case of relative time data.

- -

The “Vector” class detailed in Clause 8.3.2 is a special type of record used to assign a reference frame to all its child-components.

- -

The “Matrix” class defined in Clause 8.5.2 allows the definition of higher order tensor quantities.

- -

This standard does not impose requirements on the type of reference frames that a standardization target shall support. Standards that are dependent on this specification can (and often should) however define a minimum set of reference frames that shall be supported by all implementations.

-
-
- - -7.4.<tab/>Data Quality -

Quality information can be essential to the data consumer and the SWE Common Data Model provides simple and flexible ways to associate qualitative information with each component of a dataset.

- - -7.4.1.<tab/>Simple quality information -

Simple quality information can be associated with any scalar data component, in the form of another scalar or range value. The quality information defined here applies solely to the value of the associated data component (i.e. the measurement value) and, depending on its data type, quality can be represented by a numerical, categorical or textual value, or by a range of values.

- -

This quality information can be static, i.e. constant over the whole dataset, or dynamic and provided with the data itself. In this case, the quality value is in fact carried by another component of the dataset (and described in SWE Common as such).

- -

The exact type of quality information provided should be specified via semantic tagging just like with any other property in SWE Common.

- -

Examples

- -

Examples of quality measures are “absolute accuracy”, “relative accuracy”, “absolute precision”, “tolerance”, and “confidence level”.

- -

Quality related comments can also describe operating conditions, such as “sensor contained blockage and was removed” or “engineer on site, values may be affected”. This information can inform the user of potential inaccuracy in the data across certain periods.

-
-
- - -7.4.2.<tab/>Nil Values -

The concept of NIL value is used to indicate that the actual value of a property cannot be given in the data stream, and that a special code (i.e. reserved value) is used instead. It is thus a kind of quality information. The reason for which the value is not included is essential for a good interpretation of the data, so each reserved value is associated to a well-defined reason. In that sense, a NIL value definition is essentially a mapping between a reserved value and a reason.

- -

Each component of a dataset can define one or several NIL values corresponding to one or more reasons.

- -

Example

- -

In low level satellite imagery with, for instance, 8-bits per channel, the imagery metadata often defines: -- A reserved value to indicate that a pixel value was “Below Detection Limit” usually set to ‘0’ -- A reserved value to indicate that a pixel value was “Above Detection Limit” usually set to ‘255’

-
- - - -

Requirement 11

Identifier/req/core/nil-reasons-defined
Statement

A model of a NIL value shall always include a mapping between the selected reserved value and a well-defined reason.

-
- - -7.4.3.<tab/>Full lineage and traceability -

Full lineage and traceability is not in the scope of this specification. It is fully addressed by the OGC® Sensor Model Language Standard, which allows robust definition of measurement chains, with detailed information about the processing that takes place at each stage of the chain. This means that complex lineage guarantying full traceability can be recorded in a SensorML process chain, separately from the data itself.

- -

Datasets can be associated to lineage information described using the Sensor Model Language by using a metadata wrapper such as the “Observation” object defined in the OGC® Observations and Measurements Standard (O&M). In this standard, the “procedure” property of the “Observation” class allows attaching detailed information about the measurement procedure, that is to say a description of how the data was obtained (i.e. lineage), to the data itself.

-
-
- - -7.5.<tab/>Data Structure -

Data structure defines how individual pieces of data are grouped, ordered, repeated and interleaved to form a complete data stream. The SWE Common models are based on data structures commonly accepted in computer science and formalized in ISO 11404. -Classical aggregate datatypes are defined below:

- -
  • Record: consists of a list of fields, each of them being keyed by a field identifier and defining its own type that can be any scalar or aggregate structure.

    -
  • -
  • Array: consists of many elements of the same type, usually indexed by an integer. The element type can be any data structure including scalars and aggregates. The array size constitutes the upper bound of the index.

    -
  • -
  • Choice: consists of a list of alternatives, each of them being keyed by a tag value and having its own type. Only values for one alternative at a time are actually present in the data stream described by such a structure.

    -
  • -
- - - -

Requirement 12

Identifier/req/core/aggregates-model-valid
Statement

Aggregate data structures shall be implemented in a way that is consistent with definitions of ISO 11404.

- -

This standard also defines the concept of “data component” as any part of the structure of a dataset, aggregate or not. It is thus the superset of all the aggregate structures described above and of all scalar elements implementing the representations described in Clause 7.2.

- -

Example

- -

A dataset representing a time series of observations acquired by a mobile sensor can be encoded with various methods depending on the requirements:

- -
  • XML encoding can be used when data needs to be easily styled to other markup formats (such as HTML) or when precise error localization (in the case of an error in the stream) is needed.

    -
  • -
  • ASCII encoding can be used to achieve a good compromise between readability and size efficiency.

    -
  • -
  • Binary encoding can be used (eventually with embedded compression) when pure performance (i.e. size but also reading and writing throughput) is the main concern.

    -
  • -
-
- -

A data component can be both a data descriptor and a data container:

- -
  • A data component used as a data descriptor defines the structure, representation, semantics, quality, and other metadata of a data set but does not include the actual data values.

    -
  • -
  • A data component used as a data container equally defines the dataset but also includes the actual property values.

    -
  • -
-
- - -7.6.<tab/>Data Encoding -

A key concept of the SWE Common Data Model is the ability to separate data values themselves from the description of the data structure, semantics and representation. This allows verbose metadata to be used in order to robustly define the content and meaning of a dataset while still being able to package the data values in very efficient manners.

- -

Data encoding methods define how the data is packed as blocks that can efficiently be transferred or stored using various protocols and formats. Different methods allow encoding the data as JSON, text (CSV like), binary and even compressed or encrypted formats in a way that is agnostic to a particular structure. This allows any of the encodings methods to be selected and used based on a particular requirement, such as performance, re-use of tools, alignment with existing standards and so on.

- - - -

Requirement 13

Identifier/req/core/encoding-method-valid
Statement

All encoding methods shall be applicable to any arbitrarily complex data structures as long as they are made of the data components described in Clause 7.5.

-
-
- - -8.<tab/>UML Conceptual Models (normative) -

This standard defines normative UML models with which derived encoding models as well as all future separate extensions should be compliant. The standardization target type for the UML requirements classes defined in this clause is thus a software implementation or an encoding model that directly implements the conceptual models defined in this standard.

- - -8.1.<tab/>Package Dependencies -

The following packages are defined by the SWE Common Data Model:

- -
-Figure 2 — Internal Package Dependencies -
- -

This standard also has dependencies on external packages defined by other standards, namely ISO 19103, ISO 19108 and ISO 19111, as show below:

- -
-Figure 3 — External Package Dependencies -
-
- - -8.2.<tab/>Requirements Class: Basic Types and Simple Components Packages - - -

Requirements class 2: Simple Components UML Package

Identifier/req/uml-simple-components
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.2: /conf/uml-simple-components
PrerequisiteRequirements class 1: /req/core
- -

Data components are the most essential part of the SWE Common Data Model. They are used to describe all types of data structures, whether they represent data stream contents, tasking messages, alert messages or process inputs/outputs.

- -

The “Simple Components” UML package contains classes modeling simple data components, that is to say scalar components and range components (i.e. value extents). These classes implement concepts defined in the core section of this standard, and are designed to collect information about nature, representation and quality of data. These include six scalar types – Boolean, Text, Category, Count, Quantity, and Time – as well as four range types – CategoryRange, CountRange, QuantityRange and TimeRange.

- -

The “Basic Types” UML package from which the “Simple Components” package is dependent is also included in this requirements class.

- -

As an overview, conceptual models of the six scalar component types are shown on the following UML class diagram:

- -
-Figure 4 — Scalar Data Components -
- -

Classes representing the four range data components are shown on the diagram below:

- -
-Figure 5 — Range Data Components -
- -

Details and requirements about each of these classes are given in the following sections.

- - - -

Requirement 14

Identifier/req/uml-simple-components/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Simple Components” and “Basic Types” UML packages.

- -

Several dependencies to ISO standards exist and are detailed below.

- -

Data types from several packages of the ISO 19103 standard are used directly which makes this requirement class dependent on it. These data types are “CharacterString”, “Boolean”, “Real”, “Integer”, “Date”, “Time”, “DateTime”, “ScopedName”, “UnitOfMeasure” and “UomTime”.

- - - -

Requirement 15

Identifier/req/uml-simple-components/iso19103-implemented
Statement

The encoding or software shall correctly implement all UML classes defined in ISO 19103 that are referenced directly or indirectly by this standard.

- -

The “TM_Position” data type from the “Temporal Reference System” package of the ISO 19108 standard is also used.

- - - -

Requirement 16

Identifier/req/uml-simple-components/iso19108-implemented
Statement

The encoding or software shall correctly implement all UML classes defined in ISO 19108 that are referenced directly or indirectly by this standard.

- -

The “SC_CRS” and “TM_Temporal_CRS” classifiers are referenced conceptually from ISO 19111 but their implementation is not required by this standard. Implementations are allowed to simply use a CRS identifier as a mean of recognizing predefined coordinate reference systems. The use of identifiers from the EPSG database is recommended in this case. However, when new CRS definitions need to be created (e.g. engineering CRS attached to sensors or platforms), the models defined in ISO 19111 shall be used.

- - -8.2.1.<tab/>Basic Data Types -

This requirement class also includes requirements for the “Basic Types” UML package. This package defines low level data types that are used as property types by classes defined in the other packages.

- -

Data types defined in this package relate to defining pairs of data types defined in ISO 19103 for use within classes describing value extents:

- -
-Figure 6 — Basic types for pairs of scalar types -
-
- - -8.2.2.<tab/>Attributes shared by all data components -

All SWE Common data component classes carry standard attributes inherited (transitively) from the “AbstractDataComponent” and “AbstractSWEValue” classes (The “AbstractSWEValue” class is actually defined in the “Basic Types” package but is shown here for clarity). The class hierarchy is shown on the following UML diagram:

- -
-Figure 7 — AbstractDataComponent Class -
- -

Extension Slot

- -

The “extension” attribute is used as a container for future extensions. It allows adding new extended properties to an existing class at the instance level.

- -

Name and Description

- -

The optional “name” and “description” attributes can be used to provide human readable information describing what property the component represents. The “name” is meant to hold a short descriptive name whereas “description” can carry any length of plain text. These two fields should not be used to specify robust semantic information (see Clause 7.3.2). Instead, the “definition” attribute described below should be used for that purpose.

- -

Identifier

- -

The optional “identifier” attribute allows assigning a unique identifier to the component, so that it can be referenced later on. It can be used, for example, when defining the unique identifier of a universal constant.

- -

Definition

- -

The “definition” attribute identifies the property (often an observed property in our context) that the data component represents by using a scoped name. It should map to a controlled term defined in an (web accessible) dictionary, registry or ontology. Such terms provide the formal textual definition agreed upon by one or more communities, eventually illustrated by pictures and diagrams as well as additional semantic information such as relationships to units and other concepts, ontological mappings, etc.

- -

Examples

- -

The definition may indicate that the value represents an atmospheric temperature using a URN such as “urn:ogc:def:property:OGC::SamplingTime” referencing the complete definition in a register.

- -

The definition may also be a URL linking to a concept defined in an ontology such as [http//www.opengis.net/def/OGC/0/SamplingTime]. -The label could be “Sampling Time”, which allows quick identification by human data consumers.

- -

The description could be “Time at which the observation was made as measured by the on-board clock” which adds contextual details.

-
- -

Flags

- -

The “optional” attribute is an optional flag indicating if the component value can be omitted in the data stream. It is only meaningful if the component is used as a schema descriptor (i.e. not for a component containing an inline value). It is ‘false’ by default.

- -

The “updatable” attribute is an optional flag indicating if the component value is fixed or can be updated. It is only applicable if the data component is used to define the input of a process (i.e. when used to define the input or parameter of a service, process or sensor, but not when used to define the content of a dataset).

- -

Examples

- -

The “updatable” flag can be used to identify what parameters of a system are changeable. The exact semantics depends on the context. For example:

- -
  • In SensorML process chains, the “updatable” flag is used to identify process parameters that can accept an incoming connection (and thus can get changed while the process is in execution).

    -
  • -
  • In a SensorML System it is used to indicate whether or not a system parameter is changeable, either by an operator (i.e. by turning a screw or inserting a jumper) or remotely by sending a command.

    -
  • -
  • In the Sensor Planning Service it is used to indicate if tasking parameters are changeable by the client (i.e. by using the Update operation) after a task has been submitted.

    -
  • -
-
-
- - -8.2.3.<tab/>Attributes shared by all simple data components -

As shown on Figures 4 and 5, classes modeling simple data components inherit attributes from the “AbstractSimpleComponent” class from which they are directly derived. This abstract class is shown again below:

- -
-Figure 8 — AbstractSimpleComponent Class -
- -

The definition attribute inherited from the “AbstractDataComponent” class is mandatory on this class and thus on all its descendants.

- - - -

Requirement 17

Identifier/req/uml-simple-components/definition-present
Statement

The “definition” attribute shall be specified by all instances of concrete classes derived from “AbstractSimpleComponent”.

- -

Reference Frames and Axes

- -

It provides two attributes allowing the association of a data component to a reference frame and an axis and thus implements core concepts introduced in Clause 7.3.3. These attributes are used for a component which value is the projection of a property along a temporal or spatial axis.

- -

The “referenceFrame” attribute identifies the reference frame (as defined by the “SC_CRS” object) relative to which the coordinate value is given. The “axisID” attribute takes a string that uniquely identifies one of the reference frame’s axes along which the coordinate value is given.

- - - -

Requirement 18

Identifier/req/uml-simple-components/axis-valid
Statement

The value of the “axisID” attribute shall correspond to the “axisAbbrev” attribute of one of the coordinate system axes listed in the specified reference frame definition.

- -

The union of these two attributes thus uniquely identifies one axis of one given reference frame along which the value of the component is expressed. Note that even though the ISO 19111 model assigns units to CRS axes in addition to a direction, only the direction is used in this standard and the unit is defined by the data component itself. This allows expressing other quantities than the one predefined along the CRS’s axes such as velocity, acceleration or rotation.

- -

A component representing a projected quantity can be defined in isolation or can be contained within a “Vector” or ”Matrix” aggregate when it contributes to the specification of a multi-dimensional quantity (see Clauses 8.3.2 and 8.5.2). In this last case the reference frame definition is usually inherited from the parent “Vector” or ”Matrix” instance and is thus omitted from the scalar component itself. However, the “axisID” attribute still needs to be specified on “Vector” components.

- - - -

Requirement 19

Identifier/req/uml-simple-components/axis-defined
Statement

The “axisID” attribute shall be specified by all instances of concrete classes derived from “AbstractSimpleComponent” and representing a property projected along a spatial axis.

- - - -

Requirement 20

Identifier/req/uml-simple-components/ref-frame-defined
Statement

The “referenceFrame” attribute shall be specified by all instances of concrete classes derived from “AbstractSimpleComponent” and representing a property projected along a spatial or temporal axis, except if it is inherited from a parent aggregate (Vector or Matrix).

- -

Quality

- -

The optional “quality” attribute is used to provide simple quality information as discussed in Clause 7.4.1. It is of type “Quality” which is a union of several classes as defined in Clause 8.2.15. Its multiplicity is more than one which means that several quality measures can be given on for a single data component.

- -

Example

- -

Both precision and accuracy of the value associated to a data component can be specified concurrently (see for a good explanation of the difference between the two).

-
- -

Nil Values

- -

The optional “nilValues” attribute is used to provide a list (i.e. one or more) of NIL values as defined in Clause 7.4.2. The model of the “NilValues” class is detailed in Clause 8.2.16.

- -

Concrete sub-classes of “AbstractSimpleComponent” can also define a “constraint” attribute that allows further restriction of the possible values allowed by the corresponding representation. This implements concepts defined in Clause 7.2.6. These constraints always apply to the value of the property as represented by the corresponding data component whether this value is given inline (data container case) or out-of-band (data descriptor case).

- -

Constraints

- - - -

Requirement 21

Identifier/req/uml-simple-components/value-constraint-valid
Statement

The property value (formally the representation of the property value) attached to an instance of a class derived from “AbstractSimpleComponent” shall satisfy the constraints specified by this instance.

- -

All concrete sub-classes of “AbstractSimpleComponent” also define a “value” attribute. This attribute is not defined in this abstract class because it has a different primitive type in each concrete data component class (See following clauses).

- - - -

Requirement 22

Identifier/req/uml-simple-components/value-attribute-present
Statement

All concrete classes derived from the “AbstractSimpleComponent” class (directly or indirectly) shall define an optional “value” attribute and use it as defined by this standard.

- -

The “value” attribute is always optional on any simple data component in order to allow for both data descriptor and data container cases:

- -
  • When the data component is used as a data container, this attribute always carries the value of the associated property (formally the representation of the estimated or asserted value of the property). Quality information, nil values definitions and constraints thus apply to the value taken by this attribute.

    -
  • -
  • When the data component is used as a data descriptor, its actual value is provided somewhere else, often encoded as part of a larger data block. In this case, quality information, nil values definitions and constraints apply to the out-of-band value and not to the “value” attribute. Instead, the “value” attribute can then be used to specify a default value.

    -
  • -
- -

Whether the data component is used as a descriptor or a container depends on the context and should be explicitly stated by any standard that makes use of the SWE Common Data Model.

- -

All UML classes in this package that derive from “AbstractSimpleComponent” define a “value” attribute with the adequate primitive type and whose meaning is the one explained above.

-
- - -8.2.4.<tab/>Boolean Class -

The “Boolean” class is used to specify a scalar data component with a Boolean representation as defined in Clause 7.2.1. It derives from “AbstractSimpleComponent” and is shown below:

- -
-Figure 9 — Boolean Class -
- -

The “value” attribute of this class is of the boolean primitive type.NOTE

The boolean primitive type is defined in ISO19103 and is not to be confused with the “Boolean” class defined in this standard. This clause is the only place in this standard where the ISO 19103 boolean data type is referenced. All other occurrences of the “Boolean” class in this standard refer to the class defined in this clause.

-

- - -
- - -8.2.5.<tab/>Text Class -

The “Text” class is used to specify a component with a textual representation as defined in Clause 7.2.5. It derives from “AbstractSimpleComponent” and is shown below:

- -
-Figure 10 — Text Class -
- -

Constraints

- -

The “constraint” attribute allows further restricting the range of possible values by using the “AllowedTokens” class defined in Clause 8.2.17. This class allows the definition of the constraint by either enumerating the allowed tokens and/or by specifying a pattern that the value must match.

- -

Value

- -

The “value” attribute (or the corresponding value in out-of-band data) is a string that must match the constraint.NOTE

The “Text” component can be used to wrap a string representing complex content such as an expression in a programming language, xml or html content. This practice should however be used only for systems that don’t require high level of interoperability since the client must know how to interpret the content. Also care must be taken to properly escape such content before it is inserted in an XML document or in a SWE Common data stream.

-

- - -
- - -8.2.6.<tab/>Category Class -

The “Category” class is used to specify a scalar data component with a categorical representation as defined in Clause 7.2.2. It derives from “AbstractSimpleComponent” and is shown below:

- -
-Figure 11 — Category Class -
- -

Code Space

- -

The “codeSpace” attribute is of type “Dictionary” and allows listing and defining the meaning of all possible values for this component. It is expected that instances of the “Dictionary” class will usually be referenced (rather than included inline) by implementations of this class since the code space definition is usually obtained from a controlled vocabulary maintained at a remote location. This type of implementation is the one chosen in the XML encodings defined by this standard.

- -

Constraints

- -

The “constraint” attribute allows further restricting the list of possible values by using the “AllowedTokens” class defined in Clause 8.2.17. This is usually done by specifying a limited list of possible values, which have to be extracted from the code space.

- - - -

Requirement 23

Identifier/req/uml-simple-components/category-constraint-valid
Statement

When an instance of the “Category” class specifies a code space, the list of allowed tokens provided by the “constraint” property of this instance shall be a subset of the values listed in this code space.

- -

It is also possible to use this class without a code space, even though it is not recommended as values allowed in the component would then not be formally defined. However, as the intent of this class is to always represent a value extracted from a set of possible options, a constraint shall be defined if no code space is specified.

- - - -

Requirement 24

Identifier/req/uml-simple-components/category-enum-defined
Statement

An instance of the “Category” class shall either specify a code space or an enumerated list of allowed tokens, or both.

- -

Value

- -

The “value” attribute (or the corresponding value in out-of-band data) is a string that must be one of the items of the code space and also match the constraint.

- - - -

Requirement 25

Identifier/req/uml-simple-components/category-value-valid
Statement

When an instance of the “Category” class specifies a code space, the value of the property represented by this instance shall be equal to one of the entries of the code space.

-
- - -8.2.7.<tab/>Count Class -

The “Count” class is used to specify a scalar data component with a discrete countable representation as defined in Clause 7.2.4. It derives from “AbstractSimpleComponent” and is shown below:

- -
-Figure 12 — Count Class -
- -

Constraints

- -

The “constraint” attribute can be used to restrict the range of possible values to a list of inclusive intervals and/or single values using the “AllowedValues” class defined in Clause 8.2.18. Numbers used to define these constraints should be integers and expressed in the same scale as the count value itself. The “significantFigures” constraint allowed by the “AllowedValues” class is not applicable to the “Count” class.

- -

Value

- -

The “value” attribute (or the corresponding value in out-of-band data) is an integer that must be within one of the constraint intervals or exactly one of the enumerated values.

-
- - -8.2.8.<tab/>Quantity Class -

The “Quantity” class is used to specify a component with a continuous numerical representation as defined in Clause 7.2.3. It derives from “AbstractSimpleComponent” and is shown below:

- -
-Figure 13 — Quantity Class -
- -

Unit of Measure (UoM)

- -

In addition to attributes inherited from the “AbstractSimpleComponent” class, this class provides a unit of measure declaration through the “uom” attribute. This unit is essential for the correct interpretation of data represented as decimal numbers and is thus mandatory. Quantities with no physical unit still have a scale (such as unity, percent, per thousands, etc.) that must be specified with this property.

- -

Constraints

- -

The “constraint” attribute is used to restrict the range of possible values to a list of inclusive intervals and/or single values using the “AllowedValues” class defined in Clause 8.2.18. Numbers used to define these constraints must be expressed in the same unit as the quantity value itself. Additionally, it is possible to constrain the number of significant digits that can be added after the decimal point.

- -

Value

- -

The “value” attribute (or the corresponding value in out-of-band data) is a real value that is within one of the constraint intervals or exactly one of the enumerated values, and most importantly is expressed in the unit specified.

-
- - -8.2.9.<tab/>Time Class -

The “Time” class is used to specify a component with a date-time representation and whose value is projected along the axis of a temporal reference frame. This class is also necessary to specify that a time value is expressed in a calendar system. This class derives from “AbstractSimpleComponent” and is shown below:

- -
-Figure 14 — Time Class -
- -

Time is treated as a special type of continuous numerical quantity that can be either expressed as a scalar number with a temporal unit or a calendar date with or without a time of day. Consequently, this class has all properties of the “Quantity” class, plus some others that are specific to the treatment of time.

- -

Reference Frame

- -

As time is always expressed relative to a particular reference frame, the “referenceFrame” attribute inherited from the parent class “AbstractSimpleComponent” shall always be set on instances on this class unless the default ‘UTC’ is meant.

- - - -

Requirement 26

Identifier/req/uml-simple-components/time-ref-frame-defined
Statement

The “referenceFrame” attribute inherited from “AbstractSimple Component” shall always be set on instance of the “Time” class unless the UTC temporal reference system is used.

- -

Note that specifying the frame of reference is required even when using ISO notation because there can be ambiguities between several universal time references such as UTC, TAI, GPS, UT1, etc… Differences between these different time reference systems are indeed in the order of a few seconds (and increasing), that is to say not negligible in various situations.

- -

Example

- -

J2000 is a well known epoch in astronomy and is equal to:

- -
  • January 1, 2000, 11:59:27.816 in the TAI time reference system

    -
  • -
  • January 1, 2000, 11:58:55.816 in the UTC time reference system

    -
  • -
  • January 1, 2000, 11:59:08.816 in the GPS time reference system

    -
  • -
- -

These offsets are not always constant and depend on the irregular insertion of leap seconds in UTC.

-
- -

The “axisID” attribute inherited from the parent class does not need to be set since a time reference system always has a single dimension. However it can be set to ‘T’ for consistency with spatial axes.

- -

Reference Time

- -

The “referenceTime” attribute is used to specify a different time origin than the one sometimes implied by the “referenceFrame”. This is used to express a time relative to an arbitrary epoch (i.e. different from the origin of a well known reference frame). The new time origin specified by “referenceTime” shall be expressed with respect to the reference frame specified and is of type “DateTime”. This forces the definition of this origin as a calendar date/time combination.

- - - -

Requirement 27

Identifier/req/uml-simple-components/time-ref-time-valid
Statement

The value of the “referenceTime” attribute shall be expressed with respect to the system of reference indicated by the “referenceFrame” attribute.

- -

Example

- -

This class can be used to define a value expressed as a UNIX time (i.e. number of seconds elapsed since January 1, 1970, 00:00:00 GMT) by:

- -
  • Specifying that the reference frame is the UTC reference system

    -
  • -
  • Setting the reference time to January 1, 1970, 00:00:00 GMT.

    -
  • -
  • Setting the unit of measure to seconds

    -
  • -
- -

See definitions of some commonly accepted time standards at or .

-
- -

Local Frame

- -

The optional “localFrame” attribute allows for the definition of a local temporal frame of reference through the value of the component (i.e. we are specifying a time origin), as opposed to the referenceFrame which specifies that the value of the component is in reference to this frame.

- - - -

Requirement 28

Identifier/req/uml-simple-components/time-local-frame-valid
Statement

The “localFrame” attribute of an instance of the “Time” class shall have a different value than the “referenceFrame” attribute.

- -

This feature allows chaining several relative time positions. This is similar to what is done with spatial position in a geopositioning algorithm (and which is also supported by this standard using the “Vector” class).

- -

Example 1

- -

In the case of a whiskbroom scanner instrument, the “sampling time” is often expressed relative to the “scan start time” which is itself given relative to the “mission start time”. It is important to properly identify the chain of time reference systems at play so that the adequate process can compute the absolute time of every measurement made (Note that it is often not practical to record the absolute time of each single measurement when high sampling rates are used).

- -

Example 2

- -

A model forecast may represent its result times relative to the “run time” of the model for efficient encoding. The values of the output will be in reference to this base epoch. In this example the “referenceFrame” attribute of the model time is set to UTC and the “localFrame” set as “ModelTime”. The model result would then define its “referenceFrame” as “ModelTime”, allowing the time values to be encoded relative to the specified time origin.

-
- -

Unit of Measure (UoM)

- -

The “uom” attribute is mandatory since time is a continuous property that shall always be expressed in a well defined scale. The only units allowed are obviously time units.

- -

Constraints

- -

Similarly to the “Quantity” class, the “constraint” attribute allows further restricting the range of possible time values by using the “AllowedTimes” class defined in Clause 8.2.19.

- -

Value

- -

The “value” attribute (or the corresponding value in out-of-band data) is of type “TimePosition” (see Clause 8.2.1) and must match the constraint.

-
- - -8.2.10.<tab/>Requirements applicable to all range classes -

This UML package defines four classes “CategoryRange”, “CountRange”, “QuantityRange” and “TimeRange” that are used for representing extents of property values. These classes have common requirements that are expressed in this clause.

- -

The “value” attribute of all these classes takes a pair of values (with a datatype corresponding to the representation) that represent the inclusive minimum and maximum bounds of the extent. These values must both satisfy the constraints specified by an instance of the class, and be expressed in the unit specified when applicable.

- - - -

Requirement 29

Identifier/req/uml-simple-components/range-value-valid
Statement

Both values specified in the “value” property of an instance of a class representing a property range (i.e. “CategoryRange”, “CountRange”, “QuantityRange” and “TimeRange”) shall satisfy the same requirements as the scalar value used in the corresponding scalar classes.

- -NOTE

These classes are intentionally not derived from their scalar counterparts because they are aggregates of two values and should be treated as such by implementations (especially by encoding methods defined in this standard).

-
-
- - -8.2.11.<tab/>CategoryRange Class -

The “CategoryRange” class is used to express a value extent using the categorical representation of a property. It defines the same attributes as the “Category” class and those should be used in the same way (see Clause 8.2.6):

- -
-Figure 15 — CategoryRange Class -
- - - -

Requirement 30

Identifier/req/uml-simple-components/category-range-valid
Statement

All requirements associated to the “Category” class defined in Clause 8.2.6 apply to the “CategoryRange” class.

- -

Code Space

- -

The “CategoryRange” class also requires that the underlying code space is well-ordered (i.e. the ordering of the different categories in the code space is clearly defined) so that the range is meaningful.

- - - -

Requirement 31

Identifier/req/uml-simple-components/category-range-codespace-order
Statement

The code space specified by the “codeSpace” attribute of an instance of the “CategoryRange” class shall define a well-ordered set of categories.

- -

Example

- -

A “CategoryRange” can be used to specify the approximate time of a geological event by using names of geological eons, eras or periods such as [Archean — Proterozoic] or [Jurassic — Cretaceous].

-
- -

Value

- -

The “value” attribute of the “CategoryRange” class takes a pair of tokens representing the inclusive minimum and maximum bounds of the extent.

-
- - -8.2.12.<tab/>CountRange Class -

The “CountRange” class is used to express a value extent using the discrete countable representation of a property. It defines the same attributes as the “Count” class and those should be used in the same way (see Clause 8.2.7):

- -
-Figure 16 — CountRange Class -
- -

Value

- -

The “value” attribute of the “CountRange” class takes a pair of integer numbers representing the inclusive minimum and maximum bounds of the extent.

-
- - -8.2.13.<tab/>QuantityRange Class -

The “QuantityRange” class is used to express a value extent using the discrete countable representation of a property. It defines the same attributes as the “Quantity” class and those should be used in the same way (see Clause 8.2.8):

- -
-Figure 17 — QuantityRange Class -
- -

Value

- -

The “value” attribute of the “QuantityRange” class takes a pair of real numbers representing the inclusive minimum and maximum bounds of the extent.

-
- - -8.2.14.<tab/>TimeRange Class -

The “TimeRange” class is used to express a value extent of a time property. It defines the same attributes as the “Time” class and those should be used in the same way (see Clause 8.2.9):

- -
-Figure 18 — TimeRange Class -
- - - -

Requirement 32

Identifier/req/uml-simple-components/time-range-valid
Statement

All requirements associated to the “Time” class defined in Clause 8.2.9 apply to the “TimeRange” class.

- -

The “value” attribute of the “TimeRange” class takes a pair of values of type “TimePosition” representing the inclusive minimum and maximum bounds of the extent.

-
- - -8.2.15.<tab/>Quality Union -

The “Quality” class is a union allowing the use of different representations of quality.

- -

Quality can be indeed be specified as a decimal value, an interval, a categorical value or a textual statement. In our model, quality objects are in fact data components used in a recursive way, as shown on the following diagram:

- -
-Figure 19 — Quality Union -
- -

These different representations of quality are useful to cover most use cases where simple quality information is provided with the data.

- -

Examples

- -

“Quantity” is used to specify quality as a decimal number such as accuracy, variance and mean, or probability.

- -

“QuantityRange” is used to specify a bounded interval of variation such as a bi-directional tolerance.

- -

“Category” is used for a quality statement based on a well defined taxonomy such as certification levels.

- -

“Text” is used to include a textual quality statement such as a comment written by a field operator.

-
- -

The “definition” attribute of the chosen quality component helps to further define the type of quality information given just like any other data component, and the “uom” should be specified in the case of a decimal quality value or interval.NOTE

Reusing data components to specify quality also allows the inclusion of quality values in the data stream itself. This is useful if the quality is varying and re-estimated for each measurement. This is for example the case in a GPS receiver where both horizontal and vertical errors are given along with the geographic position. See the XML implementation clause for more information on this use case.

-

- - -
- - -8.2.16.<tab/>NilValues Class -

The “NilValues” class is used by all classes deriving from “AbstractSimpleComponent”. It allows the specification of one or more reserved values that may be included in a data stream when the normal measurement value is not available (see Clause 7.4.2). The UML model of this class is given below:

- -
-Figure 20 — NilValues Class -
- -

An instance of the “NilValues” class is composed of one to many “NilValue” objects, each of which specifies a mapping between a reserved value and a reason.

- -

The mandatory “reason” attribute indicates the reason why a measurement value is not available. It is a resolvable reference to a controlled term that provides the formal textual definition of this reason (usually agreed upon by one or more communities).

- - - -

Requirement 33

Identifier/req/uml-simple-components/nil-reason-resolvable
Statement

The “reason” attribute of an instance of the “NilValue” class shall map to the complete human readable definition of the reason associated with the NIL value.

- -

The mandatory “value” attribute specifies the data value that would be found in the stream to indicate that a measurement value is missing for the corresponding reason. The range of values allowed here is the range of values allowed by the datatype of the parent data component.

- - - -

Requirement 34

Identifier/req/uml-simple-components/nil-value-type-coherent
Statement

The value used in the “value” property of an instance of the “NilValue” class shall be compatible with the datatype of the parent data component object.

- -

This means that when specifying NIL values for a “Quantity” component, only real values are allowed (in most implementations, this includes NaN, -INF and INF) and for a “Count” component only integer values are allowed.

- -

Consequently, it is also impossible to specify NIL values for a “Boolean” data component since it allows only two possible values. In this case a “Category” component should be used.

- -

There are no restrictions on the choice of NIL values for “Category” and “Text” components since their datatype is String.

-
- - -8.2.17.<tab/>AllowedTokens Class -

The “AllowedTokens” class is used to express constraints on the value of a data component represented by a “Text” or a “Category” class. The UML class is shown below:

- -
-Figure 21 — AllowedTokens Class -
- -

This class allows defining the constraint either by enumerating a list of allowed values by using one or more “value” attributes and/or by specifying a pattern that the value must match. The value must then either be one of the enumerated tokens or match the pattern.

-
- - -8.2.18.<tab/>AllowedValues Class -

The “AllowedValues” class is used to express constraints on the value of a data component represented by a “Count” or a “Quantity” class. The UML class is shown below:

- -
-Figure 22 — AllowedValues Class -
- -

This class allows constraints to be defined either by enumerating a list of allowed values and/or a list of inclusive intervals. To be valid, the value must either be one of the enumerated values or included in one of the intervals. The numbers used in the “value” and “interval” properties shall be expressed in the same unit as the parent data component.

- - - -

Requirement 35

Identifier/req/uml-simple-components/allowed-values-unit-coherent
Statement

The scale of the numbers used in the “enumeration” and “interval” properties of an instance of the “AllowedValues” class shall be expressed in the same scale as the value(s) that the constraint applies to.

- -

If the parent data component instance is used to define a projected quantity (i.e. when the “axisID” is set), then the constraints given by this class are expressed along the same spatial reference frame axis.

- -

The number of significant digits can also be specified with the “significantFigures” property though it is only applicable when used with a decimal representation (i.e. within the “Quantity” class). This limits the total number of digits that can be included in the number represented whether a scientific notation is used or not.

- -

Examples

- -

All non-zero digits are considered significant. 123.45 has five significant figures: 1, 2, 3, 4 and 5.

- -

Zeros between two non-zero digits are significant. 101.12 has five significant figures: 1, 0, 1, 1 and 2.

- -

Leading zeros are not significant. 0.00052 has two significant figures: 5 and 2 and is equivalent to 5.2×10-4 and would be valid even if the number of significant figures is restricted to 2.

- -

Trailing zeros are significant. 12.2300 has six significant figures: 1, 2, 2, 3, 0 and 0 and would thus be invalid if the number of significant figures is restricted to 4.

-
- -NOTE

The number of significant figures and/or an interval constraint (i.e. min/max values) can help a software implementation choosing the best data type to use (i.e. ‘float’ or ‘double’, ‘short’, ‘int’ or ‘long’) to store values associated to a given data component.

-
-
- - -8.2.19.<tab/>AllowedTimes Class -

The “AllowedTimes” class is used to express constraints on the value of a data component represented by a “Time” class. The UML class is shown below:

- -
-Figure 23 — AllowedTimes Class -
- -

This class is almost identical to the “AllowedValues” class and in fact all properties are used in the same way. The only difference with this class is that the “value” and “interval” properties allow the use of time data types as defined in Clause 8.2.1.

- -

The constraints given by this class are expressed along the same time reference frame axis as the value attached to the parent data component.

-
- - -8.2.20.<tab/>Unions of simple component classes -

Several useful groups of classes are also defined in this package. These unions can be used as attribute types and they are shown on the following diagram:

- -
-Figure 24 — Simple Component Unions -
- -

The “AnyScalar” union groups all classes representing scalar components, numerical or not. The “AnyNumerical” union includes all classes corresponding to numerical scalar representations. The “AnyRange” union regroups all range components.

-
-
- - -8.3.<tab/>Requirements Class: Record Components Package - - -

Requirements class 3: Record Components UML Package

Identifier/req/uml-record-components
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.3: /conf/uml-record-components
PrerequisiteRequirements class 2: /req/uml-simple-components
- -

As detailed in the following clauses, this package defines classes modeling record style component types that can be nested to build complex structures from the simple component types introduced in Clause 8.2.

- -

The classes defined in this package are “DataRecord” and “Vector” (other aggregates are defined in the “Choice Components” and “Block Components” packages defined in Clauses 8.4 and 8.5 respectively). The UML model is exposed below:

- -
-Figure 25 — Record Data Components -
- - - -

Requirement 36

Identifier/req/uml-record-components/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Record Components” UML package.

- -

As with simple component types, all data aggregates inherit attributes from the “AbstractDataComponent” class. In this case, however, these attributes provide information about the group as a whole rather than its individual components.

- -

Examples

- -

A particular “DataRecord” might represent a standard collection of error codes coming from a GPS device.

- -

A particular “Vector” might represent the linear or angular velocity vector of an aircraft.

- -

In these two cases, the “definition” attribute should reference a semantic description in a registry, so that the data consumer knows what kind of data the aggregate represents. This semantic description can then be interpreted appropriately by consuming clients: for example to automatically decide how to style the data in visualization software.

-
- - -8.3.1.<tab/>DataRecord Class -

The “DataRecord” class is modeled on the definition of ‘Record’ from ISO 11404. In this definition, a record is a composite data type composed of one to many fields, each of which having its own name and type definition. Thus it defines some logical collection of components of any type that are grouped for a given purpose.

- -

As shown on the following figure, the “DataRecord” class in SWE Common is based on a full composite design pattern, such that each one of its “field” can be of a different type, including simple component types as well as any aggregate component type.

- -
-Figure 26 — DataRecord Class -
- -

The “DataRecord” class derives from the “AbstractDataComponent” class, which is necessary to enable the full composite pattern in which a “DataRecord” can be used to group scalar components, but also other records, arrays and choices recursively.

- -

Fields

- -

Each “field” attribute can take an instance of any concrete sub-class of “AbstractDataComponent”, which is the superset of all data component types defined in this standard. The name of each field must be unique within a given “DataRecord” instance so that it can be used as a key to uniquely identify and/or index each one of the record components.

- - - -

Requirement 37

Identifier/req/uml-record-components/record-field-name-unique
Statement

Each “field” attribute in a given instance of the “DataRecord” class shall be identified by a name that is unique to this instance.

- -

Example

- -

A “DataRecord” can group related values such as “temperature”, “pressure” and “wind speed” into a structure called “weather measurements”. This feature is often used to organize the data and present it in a clear way to the user.

- -

Similarly a “DataRecord” can be used to group values of several spectral bands in multi-spectral sensor data. However, using a “DataArray” may be easier to describe hyper spectral datasets with several hundreds of bands.

-
- -NOTE

The slightly different definition of record found in ISO 19103 provides for its schema to be specified in an associated “RecordType”. When used as a descriptor, the “DataRecord” implements the ISO 19103 “RecordType”. When used as a data container, it is self-describing: the descriptive information is then interleaved with the record values.

-
-
- - -8.3.2.<tab/>Vector Class -

The “Vector” class is used to express multi-dimensional quantities with respect to a well defined referenced frame (usually a spatial or spatio-temporal reference frame). This is done by projecting the quantity on one or several axes that define the reference frame and assigning a value to each of the axis projections.

- -

The “Vector” class is a special case of a record that takes a collection of coordinates that are restricted to a numerical representation. Coordinates of a “Vector” can thus only be of type “Quantity”, “Count” or “Time”. Its UML diagram is shown below:

- -
-Figure 27 — Vector Class -
- -

Coordinates

- -

Just like record fields, vector coordinates must have a unique name:

- - - -

Requirement 38

Identifier/req/uml-record-components/vector-coord-name-unique
Statement

Each “coordinate” attribute in a given instance of the “Vector” class shall be identified by a name that is unique to this instance.

- -

Reference Frame

- -

This class contains a mandatory “referenceFrame” attribute that identifies the frame of reference with respect to which the vector quantity is expressed. The coordinates of the vector correspond to values projected on the axes of this frame.

- -

The “referenceFrame” attribute is inherited by all components of the “Vector”, so that it shall not be redefined for each coordinate. However the “axisID” attribute shall be specified for each coordinate, in order to unambiguously indicate what axis of the reference frame it corresponds to.

- - - -

Requirement 39

Identifier/req/uml-record-components/vector-component-no-ref-frame
Statement

The “referenceFrame” attribute shall be ommited from all data components used to define coordinates of a “Vector” instance.

- - - -

Requirement 40

Identifier/req/uml-record-components/vector-component-axis-defined
Statement

The “axisID” attribute shall be specified on all data components used as children of a “Vector” instance.

- -

Local Frame

- -

The optional “localFrame” attribute allows identifying the frame of interest, that is to say the frame we are positioning with the coordinate values associated to this component (by opposition to the “referenceFrame” that specifies the frame with respect to which the values of the coordinates are expressed).

- - - -

Requirement 41

Identifier/req/uml-record-components/vector-local-frame-valid
Statement

The “localFrame” attribute of an instance of the “Vector” class shall have a different value than the “referenceFrame” attribute.

- -

Correctly identifying the local and reference frame is an important feature that allows chaining several relative positions, something that is essential to correctly compute accurate position of sensor data (especially remote sensing data).

- -

Example 1

- -

A position vector (or location vector) is used to locate the origin of a frame of interest (the local frame) relative to the origin of a frame of reference (the reference frame) through a linear translation. It is composed of three coordinates of type “Quantity”, each with a definition indicating that the coordinate represents a length expressed in the desired unit. The definition of the “Vector” itself should also indicate that it is a “location vector”.

- -
- -

Example 2

- -

An orientation vector is used to indicate the rotation of the axes of a frame of interest (the local frame) relative to a frame of reference (the reference frame). It is composed of three coordinates of type “Quantity” with a definition indicating an angular property. The “Vector” definition should indicate the type of orientation vector such as “Euler Angles” or “Quaternion”. Depending on the exact definition, the order in which the coordinates are listed in the vector may matter.

-
- -NOTE

“Vector” aggregates are most commonly used to describe position, orientation, velocity, and acceleration within temporal and spatial domains, but can also be used to express relationships between any two coordinate frames.

-
-
-
- - -8.4.<tab/>Requirements Class: Choice Components Package - - -

Requirements class 4: Choice Components UML Package

Identifier/req/uml-choice-components
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.4: /conf/uml-choice-components
PrerequisiteRequirements class 2: /req/uml-simple-components
- -

As detailed in the following clauses, this package defines a class modeling a disjoint union component type. This aggregate type can be nested with other aggregate components to build complex structures.

- - - -

Requirement 42

Identifier/req/uml-choice-components/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Choice Components” UML package.

- - -8.4.1.<tab/>DataChoice Class -

The “DataChoice” class (also called Disjoint Union) is modeled on the definition of ‘Choice’ from ISO 11404. It is a composite component that allows for a choice of child components. By opposition to records that carry all their fields simultaneously, only one item at a time can be present in the data when wrapped in a “DataChoice”. The following diagram shows the “DataChoice” class as implemented in the SWE Common Data Model:

- -
-Figure 28 — DataChoice Class -
- -

This class implements a full composite pattern, so that each “item” can be any data component, including simple and aggregate types.

- -

The “choiceValue” attribute is used to represent the token value that would be present in the data stream and that indicates the actual choice selection before the corresponding data can be given (i.e. knowing what choice item was selected ahead of time is necessary for proper decoding of encoded data streams).

- -

Items

- -

Each “item” attribute can take an instance of any concrete sub-class of “AbstractDataComponent”, which is the superset of all data component types defined in this standard. The name of each item shall be unique within a given “DataChoice” instance so that it can be used as a key to uniquely identify and/or index each one of the choice components.

- - - -

Requirement 43

Identifier/req/uml-choice-components/choice-item-name-unique
Statement

Each “item” attribute in a given instance of the “DataChoice” class shall be identified by a name that is unique to this instance.

- -

The “DataChoice” component is used to describe a data structure (or a part of the structure) that can alternatively contain different types of objects. It can also be used to define the input of a service or process that allows a choice of structures as its input.

- -

Examples

- -

NMEA 0183 compatible devices can output several types of sentences in the same data stream. Some sentences include GPS location, while some others contain heading or status data. This can be described by a “DataChoice” which items represent all the possible types of sentences output by the device.

- -

A Sensor Planning Service (SPS) can define a choice in the tasking messages that the service can accept, thus leaving more possibilities to the users.

-
-
-
- - -8.5.<tab/>Requirements Class: Block Components Package - - -

Requirements class 5: Block Components UML Package

Identifier/req/uml-block-components
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.5: /conf/uml-block-components
PrerequisitesRequirements class 2: /req/uml-simple-components
Requirements class 7: /req/uml-simple-encodings
- -

This package defines additional aggregate components for describing arrays of values that are designed to be encoded as efficient data blocks. These additional aggregate components are purposely defined in a separate requirement class because they require a more advanced implementation for handling data values as encoded blocks.

- -

The UML models for these additional aggregate components are shown below:

- -
-Figure 29 — Array Components -
- - - -

Requirement 44

Identifier/req/uml-block-components/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Block Components” UML package.

- -

The principle of these two classes is that the number and type of elements contained in the array is defined once, while the actual array values are listed separately without being redefined with each value. In order to achieve this, all array values are encoded as a single data block in the “values” attribute. Consequently, these classes are restricted to cases where all elements are homogeneous and thus can be described only once even though the array data may in fact contain many of them.

- -

This package also defines the “DataStream” class that is similar in principle to the “DataArray” class but cannot be nested within other aggregate data components. It is a top level class that encapsulates the description of a full data stream.

- - -8.5.1.<tab/>DataArray Class -

The “DataArray” class is modeled on the corresponding definition of ISO 11404. This definition states that an array is a collection of elements of the same type (as opposed to a record where each field can have a different type), with a defined size. This class is shown on the following UML diagram:

- -
-Figure 30 — DataArray Class -
- -

This class implements a full composite pattern, so that the “elementType” can be any data component, including simple and aggregate types. It can be used to group identical scalar components as well as records, choices and arrays in a recursive manner.

- -

Element Count

- -

The “elementCount” attribute is used to indicate the size of the array, that is to say the number of elements of the given type in the array. Note that each element is not necessarily scalar but can be a record, another array, etc.

- -

Element Type

- -

The content of the “elementType” attribute defines the exact structure of each element in the array. The data component used and all of its children shall not include any inline values, as these will be block encoded in the “values” attribute of the parent “DataArray”.

- - - -

Requirement 45

Identifier/req/uml-block-components/array-component-no-value
Statement

Data components that are children of an instance of a block component shall be used solely as data descriptors. Their values shall be block encoded in the “values” attribute of the block component rather than included inline.

- -

However, the “DataArray” class itself, like any other data component can be used either as a data descriptor or as a data container. To use it as a data descriptor the “encoding” and “values” attributes are not set. To use it as a data container, these attributes are both set as described below.

- -

Encoding and Values

- -

The “encoding” and “values” fields are there to provide array data as an efficient block which can be encoded in several ways. The different encoding methods are described in Clauses 8.7 and 8.8. The “encoding” field shall have a value if the “values” field is present, and the data shall be encoded using the specified encoding.

- - - -

Requirement 46

Identifier/req/uml-block-components/array-values-properly-encoded
Statement

Whenever an instance of a block component contains values, an encoding method shall be specified by the “encoding” property and array values shall be encoded as specified by this method.

- -

The choice of simple encodings (defined in the “Simple Encodings” package) allows encoding data as text using a delimiter separated values (DSV, a variant of CSV) format or as XML tagged values. The “Advanced Encodings” package defines binary encodings that can be used to efficiently package large datasets.

- -

Nested Components

- -

By combining instances of “DataArray”, “DataRecord” and scalar components, one can obtain the complex data structures that are necessary to fully describe any kind of sensor data. In particular, the possibility of nesting a “DataRecord” or “Vector” inside a “DataArray” allows defining structures such as trajectories, profiles, multi-band images, etc.

- -

Example 1

- -

The “DataArray” class can be used to describe a simple 1D array of measurements such as radiance values obtained using a 12000 cells (1 row) CCD strip for instance. This can be done by using the “Quantity” class as the element type. In such a case, describing the dataset as a “DataRecord” would be a very repetitive task given the number of elements (12000 in this case!).

- -
- -

Example 2

- -

The “DataArray” class can be used as a descriptor for a trajectory dataset by using a vector of [latitude, longitude] coordinates as its element type. Note that this can also be considered as a 1D coverage in a 2D CRS.

- -
-
- -

Multi-dimensional Arrays

- -

Since the “DataArray” class alone can only represent 1-dimensional arrays, the construction of multi-dimensional arrays is done by nesting “DataArray” objects inside each other.

- -

Example

- -

The structure of panchromatic imagery data can be described with two nested arrays, which sizes indicate the two dimensions of the image. A “Quantity” is used as the element type of the nested array in order to indicate that the repeated element of the 2D array is of type infrared radiance with a given unit.

- -
- -

In this example, the image is described as an array of rows, each row being an array of samples. It is also possible to describe an image as an array of columns by reversing the two dimensions. Note that this would change the order in which the data values would appear in a stream (by rows vs. by columns).

-
- -

Array Size

- -

One powerful feature of the “DataArray” model is that it allows for the element count to be either fixed or variable, thus allowing the description of data streams with variable number of repetitive elements as is often the case with many kinds of sensor.

- -

In a fixed size array, the number of elements can be provided in the descriptor as an instance of the “Count” class with an inline value. This value is only present in the data description and not in the encoded block of array values. The definition of the “Count” instance is not required.

- -

In a variable size array, the “elementCount” attribute either contains an instance of the “Count” class with no value or references an instance of a “Count” class in a parent or sibling data component. The value giving the actual array size is then included in the stream, before the array values themselves, so that the block can be properly decoded. One obvious implementation constraint is that the value representing the array size must be received before the array values. This is detailed further in the XML implementation section.

- -

Examples

- -

Argo profiling floats can measure ocean salinity and temperature profiles of variable lengths by diving at different depths and depending on the conditions. A variable size “DataArray” could be used to describe their output data as well as a dataset aggregating data from several Argo floats.

- -

Variable size arrays can often be used to avoid unnecessary padding of fixed size array data. However for efficiency reasons (usually to enable fast random access w/o preliminary indexation), padding can also be specified in SWE Common when using the binary encoding.

-
- -

Array Semantics

- -

As with any other data component, the “name” and “description” can be used to better describe the array and more importantly the “definition” attribute can be used to formally indicate the semantics behind the array.

- -

Example

- -

When a “DataArray” is used to package data relative to the spectral response of a sensor, the array “definition” attribute can be used to point to the formal out-of-band definition of the “spectral response” concept.

- -

Similarly a “DataArray” used to describe the output data of an Argo float would have its “definition” attribute reference the formal definition of a “profile”.

-
- -

The value of the “definition” attribute of the “Count” instance used as the “elementCount” is also especially important, since it is used to define the meaning of the array dimension. Thanks to this, it is possible to tag the dimension of an array as spatial, temporal, spectral, or any other kind. However it is not mandatory as it is on other simple components.

- -

Examples

- -

In the CCD strip example described as a 1D array, the array index is the cell number in the strip.

- -

In the 2D image example, the outer array index is the row number, while the inner array index is the column (or sample) number.

- -

In a 1D array representing a time series, the array index is along the temporal dimension.

- -

In a 2D array representing a spatial coverage, the two array indices are along spatial dimensions.

- -

In a 3D array representing hyper-spectral imagery, the two first arrays have indices along spatial dimension while the most inner array is indexed along the spectral dimension.

-
- -

This extra information can be used by software to make decisions (or at least ask the user by providing him this information) about how to represent or even interpolate the data.

-
- - -8.5.2.<tab/>Matrix Class -

The “Matrix” extends the “DataArray” class by providing a reference frame within which the matrix elements are expressed and a local frame of interest. The UML diagram of this class is shown below:

- -
-Figure 31 — Matrix Class -
- -

The “Matrix” class is usually used to represent a position matrix or a tensor quantity of second or higher order. Each matrix element is expressed along the axis of a well defined reference frame.

- -

Element Type

- -

The “elementType” attribute inherited from the “DataArray” class can only take a nested “Matrix” instance or a scalar numerical component. Nested matrix objects allow the full description of N-dimensional matrices.

- - - -

Requirement 47

Identifier/req/uml-block-components/matrix-element-type-valid
Statement

The “elementType” attribute of an instance of the “Matrix” class can only be an instance of “Matrix” or of the classes listed in the “AnyNumerical” union.

- -

Reference Frame

- -

The “referenceFrame” attribute is used in the same way as with the “Vector” class to specify the frame of reference with respect to which the matrix element values are expressed. It is inherited by all child components.

- -

Local Frame

- -

The “localFrame” attribute is used to identify the frame of interest, that is to say the frame whose orientation or position is given with the matrix in the case where it is a position matrix. If the matrix does not specify position, “localFrame” should not be used. Whether an instance of the “Matrix” class represents a position matrix or not should be disambiguated by setting the value of its “definition” attribute.

- -

Examples

- -

The “Matrix” class can be used to represent for instance: -- A 3D 3×3 stress tensor -- A 4D 4×4 homogeneous affine transformation matrix

- -

In particular it is often used to specify the orientation of an object relative to another one, like for instance the attitude of a plane relative to the earth.

-
-
- - -8.5.3.<tab/>DataStream Class -

The “DataStream” class has a structure similar than the “DataArray” class but is not a data component (i.e. it does not derive from “AbstractDataComponent”) and thus cannot be used as a child of other aggregate components. Below is its UML diagram:

- -
-Figure 32 — DataStream Class -
- -

This class should be used as the wrapper object to define a complete data stream. It defines a data stream as containing a list of elements with an arbitrary complex structure. An important feature is that the data stream can be open ended (i.e. the number of elements is not known in advance) and is thus designed to support real time streaming of data.

- -

Element Count

- -

The “elementCount” attribute is optional and can be used to indicate the number of elements in the stream if it is known. This is done by instantiating an instance of the “Count” class whose “value” attribute would be set to the number of elements.

- -

Element Type

- -

The “elementType” attribute is used to define the structure of each element in the stream. The data component used as the element type and all of its children shall be used solely as data descriptors, meaning that they shall not include any inline values. These values will instead be block encoded in the “values” attribute of the parent “DataStream”.

- -

Encoding and Values

- -

The “encoding” and “values” fields are there to provide the stream values as an efficient block which can be encoded in several ways. The same encoding methods as for the “DataArray” class are available and are described in Clauses 8.7 and 8.8. The “values” attribute is optional as the DataStream class can be used as a simple descriptor.

- - - -

Requirement 48

Identifier/req/uml-block-components/datastream-array-valid
Statement

Data components that are children of an instance of the ”DataStream” class shall be used solely used as data descriptors. Their values shall never be included inline since they will be block encoded in the stream described by the ”DataStream”.

-
-
- - -8.6.<tab/>Requirements Class: Geometry Components Package - - -

Requirements class 6: Geometry Components UML Package

Identifier/req/uml-geom-components
Target typeSoftware Implementation or Encoding of the Conceptual Models
PrerequisiteRequirements class 2: /req/uml-simple-components
- -

This package defines an additional component for representing simple feature geometries, as defined by OGC 06-103r4, within an encoded SWE Common data block or stream.

- - - -

Requirement 49

Identifier/req/uml-geom-components/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Geometry Components” UML package.

- - -8.6.1.<tab/>Geometry Class -

The “Geometry” class extends the “AbstractDataComponent” class with a value of type geometry and a constraint that can be used to limit the types of allowed geometries. This class is shown on the following UML diagram:

- -
-Figure 33 — Geometry Class -
- -

Coordinate Reference System

- -

The “crs” attribute provides the URI of the coordinate reference system w.r.t which the geometry coordinates are expressed. The unit of the coordinates is also provided by the coordinate reference system.

- - - -

Requirement 50

Identifier/req/uml-geom-components/srs-valid
Statement

The “srs” attribute shall reference the definition of a valid 2D or 3D spatial reference system.

- -

Constraints

- -

The “constraint” attribute is used to restrict the possible geometries that can be provided using this component when it is used as a descriptor. The constraint is provided using the “AllowedGeometries” class that includes a list of allowed geometry types.

- -

Value

- -

The value of this component must be a geometry instance, whether it’s provided inline using the “value” attribute, or as part of a datastream.

- - - -

Requirement 51

Identifier/req/uml-geom-components/geom-value-valid
Statement

The “value” attribute shall be one of the concrete geometry value classes defined in OGC 06-103r4: “Point”, “MultiPoint”, “LineString”, “MultiLineString”, “Polygon”, or “MultiPolygon”.

- -NOTE

Encoding sections in this standard define how the geometry value is encoded:

- -
  • GML in the XML implementation and XML encoding rules

    -
  • -
  • GeoJSON in the JSON implementation and JSON encoding rules

    -
  • -
  • WKT in the Text encoding rules

    -
  • -
  • WKB in the Binary encoding rules

    -
  • -
-
-
-
- - -8.7.<tab/>Requirements Class: Simple Encodings Package - - -

Requirements class 7: Simple Encodings UML Package

Identifier/req/uml-simple-encodings
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.6: /conf/uml-simple-encodings
PrerequisiteRequirements class 1: /req/core
- -

Encoding methods describe how structured array and stream data is encoded into a low level byte stream (see related concepts in Clause 7.6). Once encoded as a sequence of bytes, the data can then be transmitted using various digital means such as files on a disk or network connections.

- -

This package includes two classes that provide definitions of simple encoding methods. They are used as descriptors of the method used to encode data component values wrapped by aggregate classes defined in the “Block Components” package. There model is shown on the diagram below:

- -
-Figure 34 — Simple Encodings -
- - - -

Requirement 52

Identifier/req/uml-simple-encodings/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Simple Encodings” UML package.

- -

All classes defining encoding methods derive from a common abstract class called “AbstractEncoding”. Extensions to this standard that define new encoding methods shall derive encoding classes from this abstract class.

- -

The intent of this standard is to provide a set of core encodings covering most common needs. Each encoding has specific benefits that match the needs of different applications. Sometimes several encodings of the same dataset can be offered in order to satisfy several types of consumers and/or use cases.

- -

In the model provided in this standard, the encoding specification is provided separately from the data component tree describing the dataset structure, thus enabling several encodings to be applied to the same data structure without changing it.

- - -8.7.1.<tab/>TextEncoding Class -

The “TextEncoding” class defines a method allowing encoding arbitrarily complex data using a text based delimiter separated values (DSV) format. The class used to specify this encoding method is shown below:

- -
-Figure 35 — TextEncoding Class -
- -

The “tokenSeparator” attribute specifies the characters to use for separating each scalar value from one another. Scalar values appear sequentially in the stream alternatively with the token separator characters, in an order unambiguously defined by the data component structure. The detailed rules are given in the implementation Clause 10.3.

- -

The “blockSeparator” attribute specifies characters used to mark the end of a “block”, corresponding to the complete structure defined by the data component tree (in a “DataArray”, “Matrix” or “DataStream” one block corresponds to one element, that is to say the structure defined by the “elementType” property). Stream or array data can then be composed of several blocks of the same type separated by block separator characters.

- -

The “decimalSeparator” attribute specifies the character used as the decimal point in decimal number. This attribute is optional and the default is a period (‘.’).

- -

Example

- -

In the case of a “DataStream” with an element type that is a “DataRecord” containing three fields – one of type “Category” and two of type “Quantity” — a data stream encoded using the Text method would look like the following:

- -

STATUS_OK,24.5,1022.5¶
-STATUS_OK,24.5,1022.5¶
-STATUS_OK,24.5,1022.5¶

- -

Where , (comma) is the token separator and (carriage return) is the block separator (i.e. this is the CSV format). -Note that there could be many more values in a single block if the data set has a large number of fields, or if it contains an array of values.

-
- -

The “collapseWhiteSpaces” attribute is a boolean flag used to specify if extra white spaces (including line feeds, tabs, spaces and carriage returns) surrounding the token and block separators should be ignored (skipped) when processing the stream. This is useful for encoded blocks of data that are embedded in an XML document, since formatting (indenting with spaces or tabs especially) is often done in XML content.

- -

This type of encoding is used when compactness is important but balanced by a desire of human readability. This type of encoding is easily readable (for debugging or manual usage) as well as easily imported in various spreadsheet, charting or scientific software.

- -

The main drawback of such an encoding is the impossibility of locating an error in the stream with certitude. Secondly, if only one expected value is missing, the whole block is usually lost since the parser cannot resynchronize correctly before the next block separator. This last issue can however be solved by transmitting this type of encoded stream using error resilient protocols when needed.

-
-
- - -8.8.<tab/>Requirements Class: Advanced Encodings Package - - -

Requirements class 8: Advanced Encodings UML Package

Identifier/req/uml-advanced-encodings
Target typeSoftware Implementation or Encoding of the Conceptual Models
Conformance classConformance class A.7: /conf/uml-advanced-encodings
PrerequisiteRequirements class 7: /req/uml-simple-encodings
- -

This package defines an additional encoding method for packaging sensor data as raw or base 64 binary blocks. When this package is implemented, the binary encoding method is usable, as any other encoding method, within the “DataArray” and “DataStream” classes.

- - - -

Requirement 53

Identifier/req/uml-advanced-encodings/package-fully-implemented
Statement

The encoding or software shall correctly implement all classes defined in the “Advanced Encodings” UML package.

- - -8.8.1.<tab/>BinaryEncoding Class -

The “BinaryEncoding” class defines a method that allows encoding complex structured data using primitive data types encoded directly at the byte level, in the same way that they are usually represented in memory.

- -

The binary encoding method can lead to very compact streams that can be optimized for efficient parsing and fast random access. However this comes with the lack of human readability of the data and sometimes lack of compatibility with other software (i.e. software that is not SWE Common enabled).

- -

More information is needed to fully define a binary encoding, so the model is more complex than the other encodings. It is shown below:

- -
-Figure 36 — BinaryEncoding Class -
- -

The main class “BinaryEncoding” specifies overall characteristics of the encoded byte stream such as the byte order (big endian or little endian) and the byte encoding (raw or base64). The two corresponding attributes, respectively “byteOrder” and “byteEncoding” are mandatory. Base64 encoding is usually chosen to insert binary content within an XML document.

- -

The “byteLength” attribute is optional and can be used to specify the overall length of the encoded data as a total number of bytes. This should be indicated whenever possible if the data size is known in advance as it can be useful for efficient memory allocation.

- -

The “BinaryEncoding” class also has several “member” attributes that contain detailed information about parts of the data stream. This attribute can take a choice of instance of two classes: “Component” or “Block”.

- -

The “Component” class is used to specify binary encoding details of a given scalar component in the stream. The following information can be provided for each scalar field:

- -
  • The “ref” attribute allows identifying the data component in the dataset structure for which we’re specifying the encoding parameters. Soft-typed property names are used to uniquely identify a given component in the tree.

    -
  • -
  • The “dataType” attribute allows selecting a data type among commonly accepted ones such as ‘byte’, ‘short’, ‘int’, ‘long’, ‘double’, ‘float’, ‘string’, etc…

    -
  • -
  • The “byteLength” or “bitLength” attributes are mutually exclusive and used to further specify the length of the data type in the case where it is not a standard length (i.e. to encode integer numbers on more than 8 bytes or less than 8 bits for instance).

    -
  • -
  • The “significantBits” can be used to signal that only some of the bits of the data type are actually used to carry the value (i.e. a value may be encoded as a byte but only use 4 bits to encode a value between 0 and 15). This is mostly informational.

    -
  • -
  • The “encryption” attribute can be used to select the method with which the value is encrypted before being written to the stream.

    -
  • -
- -

The “Block” class is used to specify binary encoding details of a given aggregate component representing a block of values in the data stream. This is used either to specify padding before and/or after a block of data or to enable compression or encryption of all or part of a dataset.

- -
  • The “ref” attribute allows identifying the data component in the dataset structure for which we’re specifying the encoding parameters. Soft-typed property names are used to uniquely identify a given component in the tree.

    -
  • -
  • The optional “byteLength” attribute allows indicating the overall length of the encoded block to facilitate memory allocation.

    -
  • -
  • The “paddingBytes-before” and “paddingBytes-after” are used to specify the number of empty bytes (i.e. usually 0 bytes) that are inserted in the stream respectively before and after data for the referenced component. This is sometimes used to align data on N-bytes block for faster access.

    -
  • -
  • The “encryption” attribute identifies the encryption method that is used to encrypt the block of data before it is inserted in the stream.

    -
  • -
  • The “compression” attribute identifies the compression method that is used to compress the block of data before it is inserted in the stream.

    -
  • -
- -

This standard does not define any concrete encryption and compression methods, so that software implementations of this requirement class are not required to support any value in the “encryption” and “compression” attributes of the “Component” and “Block” classes. Extensions of this standard that define binary encryption and compression methods shall describe how the encrypted or compressed data is inserted in the SWE Common data stream.

-
-
-
- - -9.<tab/>JSON Implementation (normative) -

This standard defines a normative JSON implementation of the conceptual models presented in Clause 8. The standardization target type for all requirements classes in this clause is a JSON instance document that seeks compliance with this JSON encoding model.

- -

JSON schemas defined in this section are a direct implementation of the UML conceptual models described in Clause 8. They have been generated from these models by strictly following well-defined encoding rules. All attributes and composition/aggregation associations contained in the UML models are encoded as JSON object members.

- -

All JSON examples given in this section are informative and are used solely for illustrating features of the normative model. Many of these examples reference semantic information by using URLs that resolve to the following online ontologies:

- -
  • The OGC online registry at .

    -
  • -
  • The QUDT quantity kinds ontology at .

    -
  • -
  • The SWEET ontology maintained by ESIP at .

    -
  • -
  • The MMI ontology registry and repository at .

    -
  • -
- -

Some of the JSON examples contain inline values while others don’t. This is meant to illustrate that the component objects defined by the JSON implementation can be used as value objects for properties of larger metadata objects (e.g. SensorML system descriptions), but can also be used as descriptors to describe, for instance, the content of a datastream or the rangeset of a coverage.

- - -9.1.<tab/>Requirements Class: Basic Types and Simple Components JSON Schemas - - -

Requirements class 9: Basic Types and Simple Components JSON Schemas

Identifier/req/json-simple-components
Target typeJSON Document
PrerequisiteRequirements class 2: /req/uml-simple-components
- -

Validation patterns that implement all classes defined respectively in the “Basic Types” and “Simple Components” UML packages are provided as JSON schema files at .

- -

The entry point schema used for validation is “sweCommon.json”.

- - - -

Requirement 54

Identifier/req/json-simple-components/schema-valid
Statement

The JSON document instance shall be valid with respect to the JSON schema “sweCommon.json”.

- - -9.1.1.<tab/>General JSON Principles -

The following rules were used when generating the JSON schemas:

- -
  • Classes are implemented as JSON Objects;

    -
  • -
  • Any property with a multiplicty greater than one is implemented as a JSON Array and its name is converted to plural form;

    -
  • -
  • Textual fields are implemented as a JSON String;

    -
  • -
  • Decimal fields are implemented as a union of JSON Number and JSON String value types (the string value allowing for special values, see Clause 9.1.2);

    -
  • -
  • ISO8601 date/time fields are implemented as a JSON String with a union of date/time formats.

    -
  • -
-
- - -9.1.2.<tab/>Special Numerical Values -

JSON does not define special decimal values for ‘Not a Number’, positive infinity and negative infinity. It is thus necessary to encode them as strings.

- - - -

Requirement 55

Identifier/req/json-simple-components/special-numerical-values
Statement

The special JSON Strings NaN, -Infinity and +Infinity shall be allowed as the inline or out-of-band value for Quantity and Time (and Count?) components (except when the Time component uses the ISO 8601 format).

- -NOTE

These special value strings have been chosen because they are supported natively by Javascript/ECMA Script implementations. The + unary operator can be used to transparently parse one of these strings to a Number type (see ).

- -

These values also correspond to infinities and NaN values defined in IEEE 754-2008.

-
-
- - -9.1.3.<tab/>Abstract Base Classes -

The three abstract base classes defined in the UML models are implemented by the following JSON schemas:

- -
  • AbstractSweIdentifiable.json

    -
  • -
  • AbstractDataComponent.json

    -
  • -
  • AbstractSimpleComponent.json

    -
  • -
- - - -

Requirement 56

Identifier/req/json-simple-components/definition-resolvable
Statement

The “definition” object member defined in the “AbstractDataComponent.json” schema shall contain a URI that can be resolved to the complete human readable definition of the property that is represented by the data component.

- - - -

Requirement 57

Identifier/req/json-simple-components/inline-value-constraint-valid
Statement

The inline value included in a JSON instance validating against the “AbstractSimpleComponent.json” schema shall satisfy the constraints specified by this instance.

-
- - -9.1.4.<tab/>Boolean Object -

The “Boolean” object is the JSON schema implementation of the “Boolean” UML class defined in Clause 8.2.4. The schema for this class is provided in Boolean.json.

- -

The following snippet shows an example boolean component with an inline value:

- -{ - "type": "Boolean", - "definition": "http://sweet.jpl.nasa.gov/2.0/physDynamics.owl#Motion", - "label": "Motion Detected", - "description": "True when motion was detected in the room", - "value": true -} - - -

The next snippet is an example of boolean component used as data descriptor, hence with no value:

- -{ - "type": "Boolean", - "definition": "http://mmisw.org/ont/q2o/test/timeContinuityTest", - "label": "Time Continuity Test", - "description": "Set to true to enable time continuity test" -} - -
- - -9.1.5.<tab/>Text Object -

The “Text” object is the JSON schema implementation of the “Text” UML class defined in Clause 8.2.5. The schema for this class is provided in Text.json.

- -

Constraints on a “Text” representation are expressed using the AllowedTokens Object.

- -

The following snippets show how the “Text” component can be used to define human readable text fields, as well as any other alpha-numerical properties:

- -{ - "type": "Text", - "definition": "http://sensorml.com/ont/swe/property/Manufacturer", - "label": "Manufacturer", - "value": "Ocean Devices, Inc." -} - - -{ - "type": "Text", - "definition": "http://sensorml.com/ont/x-swe/property/VehicleRegistrationNumber", - "label": "License Plate", - "value": "45ER-EJK-235" -} - - -

Constraints can also be used — typically when the component is used as a descriptor — to limit the possible text values, either by enumeration or a regular expression pattern:

- -{ - "type": "Text", - "definition": "http://sensorml.com/ont/x-swe/property/VehicleRegistrationNumber", - "label": "License Plate", - "constraint": { - "pattern": "^[0-9][A-Z]{4}-[A-Z]{3}-[0-9]{3}$" - } -} - - -NOTE

This standard does not define any limit on the size of the text data than can be included as the value of a “Text” component, either inline or as part of a datastream. Implementations are responsible for documenting this upper limit.

-
-
- - -9.1.6.<tab/>Category Object -

The “Category” object is the JSON schema implementation of the “Category” UML class defined in Clause 8.2.6. The schema for this class is provided in Category.json.

- -

Constraints on a “Category” representation are expressed using the AllowedTokens Object.

- -

The following examples illustrate how the “Category” component is used to define various fields with categorical representations. The categorical scale is defined either via a code space, an enumeration constraint, or both (in which case the enumeration constraint defines a subset of possible values from a code space):

- -{ - "type": "Category", - "definition": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#GeologicTime", - "label": "Geological Period", - "description": "Name of the geological period according to the nomenclature of the International Commission on Stratigraphy", - "codeSpace": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#Period", - "value": "Jurassic" -} - - -{ - "type": "Category", - "definition": "http://sweet.jpl.nasa.gov/2.0/biol.owl#Species", - "label": "Bird Species", - "description": "Bird species according to the classification of the World Bird Database", - "codeSpace": "http://www.birdlife.org/datazone/species/index.html" -} - -
- - -9.1.7.<tab/>Count Object -

The “Count” object is the JSON schema implementation of the “Count” UML class defined in Clause 8.2.7. The schema for this class is provided in Count.json.

- -

Constraints on a “Count” representation are expressed using the AllowedValues Object.

- -

The following snippet shows a “Count” component used to define the size of a row in a raster dataset:

- -{ - "type": "Count", - "definition": "http://www.opengis.net/def/property/OGC/0/NumberOfPixels", - "label": "Row Size", - "description": "Number of pixels in each row of the image", - "value": 1024 -} - -
- - -9.1.8.<tab/>Quantity Object -

The “Quantity” object is the JSON schema implementation of the “Quantity” UML class defined in Clause 8.2.8. The schema for this class is provided in Quantity.json.

- -

Constraints on a “Quantity” representation are expressed using the AllowedValues Object.

- -

The unit of measure is defined using either a URI or a code expressed using the Unified Code for Units of Measure (UCUM) standard.

- - - -

Requirement 58

Identifier/req/json-simple-components/ucum-code-used
Statement

Whenever it can be constructed using the UCUM specification, the unit of measure shall be specified using a UCUM code as the value of the “uom/code” property. Otherwise the “uom/href” property shall be used to reference an external unit definition.

- -

The following snippets show how “Quantity” components are used to define various (observable or controllable) properties with continuous decimal representations:

- -{ - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Temperature", - "label": "Outside Temperature", - "description": "Outside temperature taken at the top of the antenna", - "uom": { "code": "Cel" }, - "value": 21.5 -} - - -{ - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/SpectralRadiance", - "label": "Radiance", - "description": "Radiance measured on band1", - "uom": { "code": "W.m-2.Sr-1.um-1" }, - "value": 2.83e-2 -} - - -{ - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/HeightAboveMSL", - "referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/5714", - "axisID": "H", - "label": "MSL Height", - "description": "Height above mean sea level", - "uom": { "code": "m" } -} - -
- - -9.1.9.<tab/>Time Object -

The “Time” object is the JSON schema implementation of the “Time” UML class defined in Clause 8.2.9. The schema for this class is provided in Time.json.

- -

Constraints on a “Time” representation are expressed using the AllowedTimes Object.

- -

The unit of measure is defined using either a URI or a code expressed using the Unified Code for Units of Measure (UCUM) standard. When the temporal property is provided in the ISO 8601:2019 format, this is indicated by using a specific URI.

- - - -

Requirement 59

Identifier/req/json-simple-components/iso8601-uom-used
Statement

When ISO 8601 notation is used to express the value associated to a “Time” element, the URI “http://www.opengis.net/def/uom/ISO-8601/0/Gregorian” shall be used as the value of the “uom/href” property.

- -

The following snippets show how “Time” components are used to define various temporal properties, with different time scales:

- -

ISO8601 formatted time stamp based on the UTC time standard:

- -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC-EO/0/MissionStartTime", - "referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC", - "localFrame": "urn:org:systems:001#MISSION-START-TIME", - "label": "Flight Time", - "description": "Time at take-off in UTC", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - }, - "value": "2009-01-26T10:21:45+01:00" -} - - -

ISO8601 formatted time stamp based on the GPS time standard:

- -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/USNO/0/GPS", - "label": "Sampling Time", - "description": "Time at which the measurement was made", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - }, - "value": "2009-11-05T16:29:26Z" -} - - -

Time stamp in seconds past the Unix epoch:

- -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/RunTime", - "referenceTime": "1970-01-01T00:00:00Z", - "label": "Model Run Time", - "description": "Run time of the model expressed as a Unix time", - "uom": {"code": "s" }, - "value": 1257415633 -} - - -

Time stamp in seconds past a custom time reference called MISSION_START_TIME:

- -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC-EO/0/ScanStartTime", - "referenceFrame": "urn:org:systems:001#MISSION-START-TIME", - "localFrame": "urn:org:systems:001#SCAN-START-TIME", - "label": "Scanline Time", - "description": "Acquisition time of the scan line", - "uom": { "code": "s" } -} - -
- - -9.1.10.<tab/>CategoryRange Object -

The “CategoryRange” object is the JSON schema implementation of the “CategoryRange” UML class defined in Clause 8.2.11. The schema for this class is provided in CategoryRange.json.

- -

“CategoryRange” objects share most properties with “Category” object, as shown on the following snippet:

- -{ - "type": "CategoryRange", - "definition": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#GeologicTime", - "label": "Approximate Dating", - "description": "Approximate geological dating expressed as a range of geological eras", - "codeSpace": "http://sweet.jpl.nasa.gov/2.0/timeGeologic.owl#Era", - "value": ["Paleozoic", "Mesozoic"] -} - -
- - -9.1.11.<tab/>CountRange Object -

The “CountRange” object is the JSON schema implementation of the “CountRange” UML class defined in Clause 8.2.12. The schema for this class is provided in CountRange.json.

- -

“CountRange” objects share most properties with “Count” object, as shown on the following snippet:

- -{ - "type": "CountRange", - "definition": "http://www.opengis.net/def/property/OGC/0/ArrayIndex", - "label": "Index Range", - "value": [0, 3000] -} - -
- - -9.1.12.<tab/>QuantityRange Object -

The “QuantityRange” object is the JSON schema implementation of the “QuantityRange” UML class defined in Clause 8.2.13. The schema for this class is provided in QuantityRange.json.

- -

“QuantityRange” objects share most properties with the “Quantity” object, as shown on the following snippet:

- -{ - "type": "QuantityRange", - "definition": "http://mmisw.org/ont/mmi/device/OperationalRange", - "label": "Operational Range", - "description": "Operational temperature range of the cryogenic thermometer", - "uom": { "code": "K" }, - "value": [10, 300] -} - -
- - -9.1.13.<tab/>TimeRange Object -

The “TimeRange” object is the JSON schema implementation of the “TimeRange” UML class defined in Clause 8.2.14. The schema for this class is provided in TimeRange.json.

- -

“TimeRange” objects share most properties with the “Time” object, as shown on the following snippet:

- -{ - "type": "TimeRange", - "definition": "http://www.opengis.net/def/property/EO/0/SurveyPeriod", - "referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC", - "label": "Survey Period", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - }, - "value": ["2008-01-05T11:02:54Z", "2009-11-05T16:29:26Z"] -} - -
- - -9.1.14.<tab/>NilValues Object -

The “NilValues” object is the JSON schema implementation of the “NilValues” UML class defined in Clause 8.2.16. Schema patterns for this class are provided in basicTypes.json. Several sub-patterns are defined for the decimal, integer and text cases.

- -

Examples of NIL values definitions are provided below, in the case of numerical, countable and textual representations:

- -{ - "type": "Quantity", - "definition": "http://sweet.jpl.nasa.gov/2.0/physRadiation.owl#IonizingRadiation", - "label": "Radiation Dose", - "description": "Radiation dose measured by Gamma detector", - "uom": { "code": "uR" }, - "nilValues": [ - { "reason": "http://www.opengis.net/def/nil/OGC/0/BelowDetectionRange", "value": "-Infinity" }, - { "reason": "http://www.opengis.net/def/nil/OGC/0/AboveDetectionRange", "value": "Infinity" } - ] -} - - -{ - "type": "Count", - "definition": "http://sweet.jpl.nasa.gov/2.0/physRadiation.owl#Radiance", - "label": "Band 1", - "nilValues": [ - { "reason": "http://www.opengis.net/def/nil/OGC/0/BelowDetectionRange", "value": 0 }, - { "reason": "http://www.opengis.net/def/nil/OGC/0/AboveDetectionRange", "value": 255 } - ] -} - - -{ - "type": "Text", - "definition": "http://sensorml.com/ont/x-swe/property/VehicleRegistrationNumber", - "label": "License Plate", - "nilValues": [ - { "reason": "http://www.opengis.net/def/nil/OGC/0/Missing", "value": "Missing" }, - { "reason": "http://www.opengis.net/def/nil/OGC/0/Unknown", "value": "Unknown" } - ] -} - -
- - -9.1.15.<tab/>AllowedTokens Object -

The “AllowedTokens” object is the JSON schema implementation of the “AllowedTokens” UML class defined in Clause 8.2.17. The schema for this class is provided in basicTypes.json (see #definitions/AllowedTokens).

- -

Examples of constraints for textual or categorical properties are provided below:

- -{ - "type": "Text", - "definition": "http://sensorml.com/ont/swe/property/ModelNumber", - "label": "Model Number", - "constraint": { - "pattern": "^[0-9][A-Z]{3}[0-9]{2}S1$" - } -} - - -{ - "type": "Category", - "definition": "http://www.opengis.net/def/property/OGC/0/SensorStatus", - "label": "Sensor Status", - "description": "Current connection status of the sensor", - "constraint": { - "values": [ "Off", "Stand-by", "Ready", "Busy" ] - } -} - -
- - -9.1.16.<tab/>AllowedValues Object -

The “AllowedValues” object is the JSON schema implementation of the “AllowedValues” UML class defined in Clause 8.2.18. The schema for this class is provided in basicTypes.json (see #definitions/AllowedValues).

- -

Examples of constraints for various numerical properties are provided below:

- -{ - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Angle", - "label": "Planar Angle", - "uom": { "code": "deg" }, - "constraint": { - "intervals": [[-180, 180]] - } -} - - -{ - "type": "Count", - "definition": "http://www.opengis.net/def/property/OGC/0/NumberOfPixels", - "label": "Image Width", - "constraint": { - "values": [256, 512, 1024] - } -} - - -{ - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude", - "label": "Latitude", - "uom": { "code": "deg" }, - "constraint": { - "intervals": [[-90, 90]], - "significantFigures": 6 - } -} - - -

Numerical constraints can also be unbounded:

- -{ - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/RadialDistance", - "label": "Radial Distance", - "description": "Radial distance is always positive", - "uom": { "code": "m" }, - "constraint": { - "intervals": [[0, "+Infinity"]] - } -} - -
- - -9.1.17.<tab/>AllowedTimes Object -

The “AllowedTimes” object is the JSON schema implementation of the “AllowedTimes” UML class defined in Clause 8.2.19. The schema for this class is provided in basicTypes.json (see #definitions/AllowedTimes).

- -

Examples of constraints for various temporal properties, expressed as ISO-8601 or decimal values, are provided below:

- -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/USNO/0/GPS", - "label": "Acquisition Time", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - }, - "constraint": { - "intervals": [["2009-01-01T00:00:00Z", "+Infinity"]] - } -} - - -{ - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "urn:org:systems:001#SCAN-START-TIME", - "label": "Lidar Pulse Time", - "description": "Time stamp of LiDAR pulse relative to start of scan", - "uom": { "code": "ms" }, - "constraint": { - "intervals": [[0, 1e6]] - } -} - -
-
- - -9.2.<tab/>Requirements Class: Record Components JSON Schema - - -

Requirements class 10: Record Components JSON Schema

Identifier/req/json-record-components
Target typeJSON Document
PrerequisitesRequirements class 3: /req/uml-record-components
Requirements class 9: /req/json-simple-components
- - -9.2.1.<tab/>DataRecord Object -

The “DataRecord” object is the JSON schema implementation of the “DataRecord” UML class defined in Clause 8.3.1. The schema for this class is provided in DataRecord.json.

- -

The example below describes a record composed of weather data fields. In this case the “DataRecord” element is used as a descriptor for records of data that are provided as part of a datastream:

- -{ - "type": "DataRecord", - "label": "Weather Data Record", - "fields": [ - { - "name": "time", - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC", - "label": "Sampling Time", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - } - }, - { - "name": "temperature", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/air_temperature", - "label": "Air Temperature", - "uom": { "code": "Cel" } - }, - { - "name": "pressure", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/air_pressure_at_mean_sea_level", - "label": "Air Pressure", - "uom": { "code": "mbar" } - }, - { - "name": "windSpeed", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/wind_speed", - "label": "Wind Speed", - "uom": { "code": "km/h" } - }, - { - "name": "windDirection", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/wind_to_direction", - "label": "Wind Direction", - "uom": { "code": "deg" } - } - ] -} - - -{ - "type": "DataRecord", - "definition": "urn:x-ogc:def:property:CSM::RadialDistortionCoefficients", - "label": "Radial Distortion Coefficients", - "fields": [ - { - "name": "k1", - "type": "Quantity", - "definition": "urn:x-ogc:def:property:CSM::DISTOR_RAD1", - "label": "Coef k1", - "uom": { "code": "mm-2" }, - "value": 1.92709e-5 - }, - { - "name": "k2", - "type": "Quantity", - "definition": "urn:x-ogc:def:property:CSM::DISTOR_RAD2", - "label": "Coef k2", - "uom": { "code": "mm-2" }, - "value": -5.14206e-10 - }, - { - "name": "k3", - "type": "Quantity", - "definition": "urn:x-ogc:def:property:CSM::DISTOR_RAD3", - "label": "Coef k3", - "uom": { "code": "mm-2" }, - "value": -3.33356e-12 - } - ] -} - -
- - -9.2.2.<tab/>Vector Object -

The “Vector” object is the JSON schema implementation of the “Vector” UML class defined in Clause 8.3.2. The schema for this class is provided in Vector.json.

- -{ - "type": "Vector", - "definition": "http://www.opengis.net/def/property/OGC/0/PlatformLocation", - "referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/4326", - "label": "Platform Location", - "coordinates": [ - { - "name": "lat", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude", - "label": "Latitude", - "axisID": "Lat", - "uom": { "code": "deg" }, - "value": 45.36 - }, - { - "name": "lon", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Longitude", - "label": "Longitude", - "axisID": "Lon", - "uom": { "code": "deg" }, - "value": 5.2 - } - ] -} - - -{ - "type": "Vector", - "definition": "http://qudt.org/vocab/quantitykind/LinearVelocity", - "referenceFrame": "http://www.opengis.net/def/crs/OGC/0/ECI_J2000", - "label": "Platform Velocity", - "coordinates": [ - { - "name": "vx", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Speed", - "label": "Velocity X", - "uom": { "code": "m/s" } - }, - { - "name": "vy", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Speed", - "label": "Velocity Y", - "uom": { "code": "m/s" } - }, - { - "name": "vz", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Speed", - "label": "Velocity Z", - "uom": { "code": "m/s" } - } - ] -} - - -{ - "type": "Vector", - "definition": "http://sensorml.com/ont/swe/property/RotationQuaternion", - "referenceFrame": "http://www.opengis.net/def/crs/OGC/0/ECI_J2000", - "localFrame": "urn:org:systems:001#PLATFORM_FRAME", - "label": "Platform Orientation", - "coordinates": [ - { - "name": "qx", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Coordinate", - "label": "QX", - "uom": { "code": "1" } - }, - { - "name": "qy", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Coordinate", - "label": "QY", - "uom": { "code": "1" } - }, - { - "name": "qz", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Coordinate", - "label": "QZ", - "uom": { "code": "1" } - }, - { - "name": "qw", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Coordinate", - "label": "QW", - "uom": { "code": "1" } - } - ] -} - -
-
- - -9.3.<tab/>Requirements Class: Choice Components JSON Schema - - -

Requirements class 11: Choice Components JSON Schema

Identifier/req/json-choice-components
Target typeJSON Document
PrerequisitesRequirements class 4: /req/uml-choice-components
Requirements class 9: /req/json-simple-components
- - -9.3.1.<tab/>DataChoice Object -

The “DataChoice” object is the JSON schema implementation of the “DataChoice” UML class defined in Clause 8.4.1. The schema for this class is provided in DataChoice.json.

- -{ - "type": "DataChoice", - "label": "Weather Data Message", - "items": [ - { - "name": "TEMP", - "type": "DataRecord", - "label": "Temperature Measurement", - "fields": [ - { - "name": "time", - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC", - "label": "Sampling Time", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - } - }, - { - "name": "temp", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/air_temperature", - "label": "Air Temperature", - "uom": { "code": "Cel" } - } - ] - }, - { - "name": "PRESS", - "type": "DataRecord", - "label": "Pressure Measurement", - "fields": [ - { - "name": "time", - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/BIPM/0/UTC", - "label": "Sampling Time", - "uom": { - "href": "http://www.opengis.net/def/uom/ISO-8601/0/Gregorian" - } - }, - { - "name": "press", - "type": "Quantity", - "definition": "http://mmisw.org/ont/cf/parameter/air_pressure_at_mean_sea_level", - "label": "Air Pressure", - "uom": { "code": "HPa" } - } - ] - } - ] -} - -
-
- - -9.4.<tab/>Requirements Class: Block Components JSON Schema - - -

Requirements class 12: Block Components JSON Schema

Identifier/req/json-block-components
Target typeJSON Document
PrerequisitesRequirements class 5: /req/uml-block-components
Requirements class 9: /req/json-simple-components
- - -9.4.1.<tab/>DataArray Object -

The “DataArray” element is the JSON schema implementation of the “DataArray” UML class defined in Clause 8.5.1. The schema for this class is provided in DataArray.json.

- -{ - "type": "DataArray", - "label": "Calibration Table", - "elementType": { - "name": "point", - "type": "DataRecord", - "label": "Data Point", - "fields": [ - { - "name": "t", - "type": "Quantity", - "definition": "https://qudt.org/vocab/quantitykind/Temperature", - "label": "Temperature", - "uom": { "code": "Cel" } - }, - { - "name": "r", - "type": "Quantity", - "definition": "https://qudt.org/vocab/quantitykind/Resistance", - "label": "Resistance", - "uom": { "code": "KOhm" } - } - ] - }, - "values": [ - {"t": 12, "r": 3.03}, - {"t": 30.1, "r": 1.68}, - {"t": 40.0, "r": 1.16}, - {"t": 50.1, "r": 0.85}, - {"t": 59.8, "r": 0.62} - ] -} - - -

When provided inline, “DataArray” values are encoded using the method defined in Clause 9.4.4.

- -

The following example shows how to define a 1D variable size array whose data is provided separately.

- -{ - "type": "DataArray", - "definition": "http://sensorml.com/ont/swe/property/Trajectory", - "label": "Mobile Trajectory", - "elementCount": { - "definition": "http://www.opengis.net/def/property/OGC/0/NumberOfPoints", - "label": "Implicit Size" - }, - "elementType": { - "name": "point", - "type": "Vector", - "definition": "http://www.opengis.net/def/property/OGC/0/PlatformLocation", - "referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/4326", - "label": "Location Point", - "coordinates": [ - { - "name": "lat", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude", - "label": "Latitude", - "axisID": "Lat", - "uom": { "code": "deg" } - }, - { - "name": "lon", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Longitude", - "label": "Longitude", - "axisID": "Lon", - "uom": { "code": "deg" } - } - ] - } -} - - -

“DataArray” components can also be nested to form multi-dimensional arrays, as shown in the following example of a 2D array:

- -{ - "type": "DataArray", - "definition": "http://sensorml.com/ont/swe/property/RasterImage", - "label": "Satellite Image", - "elementCount": { - "definition": "http://www.opengis.net/def/property/OGC/0/NumberOfRows", - "value": 3000 - }, - "elementType": { - "name": "row", - "type": "DataArray", - "definition": "http://sensorml.com/ont/swe/property/RasterImage", - "elementCount": { - "definition": "http://www.opengis.net/def/property/OGC/0/NumberOfSamples", - "value": 3000 - }, - "elementType": { - "name": "pixel", - "type": "DataRecord", - "definition": "http://sensorml.com/ont/swe/property/GridCell", - "fields": [ - { - "name": "band1", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Radiance", - "label": "Radiance", - "description": "Radiance measured on band1", - "uom": { "code": "W.m-2.Sr-1" } - }, - { - "name": "band2", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Radiance", - "label": "Radiance", - "description": "Radiance measured on band2", - "uom": { "code": "W.m-2.Sr-1" } - }, - { - "name": "band3", - "type": "Quantity", - "definition": "http://qudt.org/vocab/quantitykind/Radiance", - "label": "Radiance", - "description": "Radiance measured on band3", - "uom": { "code": "W.m-2.Sr-1" } - } - ] - } - } -} - -
- - -9.4.2.<tab/>Matrix Object -

The “Matrix” object is the JSON schema implementation of the “Matrix” UML class defined in Clause 8.5.2. The schema for this class is provided in Matrix.json.

- -{ - "type": "Matrix", - "definition": "http://sensorml.com/ont/swe/property/RotationMatrix", - "referenceFrame": "http://www.opengis.net/def/crs/OGC/0/ECI_J2000", - "label": "3D Orientation Matrix", - "elementType": { - "name": "row", - "type": "Matrix", - "elementType": { - "name": "coef", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Coordinate", - "label": "Matrix Coef", - "uom": { "code": "1" } - } - }, - "values": [ - [0.36,0.48,-0.8], - [-0.8,0.6,0], - [0.48,0.64,0.6] - ] -} - - -

When provided inline, “Matrix” values are encoded using the method defined in Clause 9.4.4.

-
- - -9.4.3.<tab/>DataStream Object -

The “DataStream” object is the JSON schema implementation of the “DataStream” UML class defined in Clause 8.5.3. The schema for this class is provided in DataStream.json.

- -{ - "type": "DataStream", - "label": "Aircraft Navigation", - "elementType": { - "name": "navData", - "type": "DataRecord", - "fields": [ - { - "type": "Time", - "definition": "http://www.opengis.net/def/property/OGC/0/SamplingTime", - "referenceFrame": "http://www.opengis.net/def/trs/USNO/0/GPS", - "referenceTime": "1970-01-01T00:00:00Z", - "label": "Sampling Time", - "uom": { "code": "s" } - }, - { - "name": "location", - "type": "Vector", - "definition": "http://www.opengis.net/def/property/OGC/0/PlatformLocation", - "referenceFrame": "http://www.opengis.net/def/crs/EPSG/0/4979", - "label": "Platform Location", - "coordinates": [ - { - "name": "lat", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/GeodeticLatitude", - "label": "Latitude", - "axisID": "Lat", - "uom": { "code": "deg" } - }, - { - "name": "lon", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/Longitude", - "label": "Longitude", - "axisID": "Lon", - "uom": { "code": "deg" } - }, - { - "name": "alt", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/HeightAboveEllipsoid", - "label": "Altitude", - "axisID": "h", - "uom": { "code": "m" } - } - ] - }, - { - "name": "attitude", - "type": "Vector", - "definition": "http://www.opengis.net/def/property/OGC/0/PlatformOrientation", - "referenceFrame": "http://www.opengis.net/def/cs/OGC/0/ENU", - "label": "Platform Attitude", - "coordinates": [ - { - "name": "heading", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/TrueHeading", - "label": "Heading", - "axisID": "Z", - "uom": { "code": "deg" } - }, - { - "name": "pitch", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/PitchAngle", - "label": "Pitch", - "axisID": "X", - "uom": { "code": "deg" } - }, - { - "name": "roll", - "type": "Quantity", - "definition": "http://sensorml.com/ont/swe/property/RollAngle", - "label": "Roll", - "axisID": "Y", - "uom": { "code": "deg" } - } - ] - } - ] - }, - "encoding": { - "type": "TextEncoding", - "tokenSeparator": ",", - "blockSeparator": "\n", - "decimalSeparator": "." - } -} - - -

When provided inline, “DataStream” values are encoded using the method defined in Clause 9.4.4.

-
- - -9.4.4.<tab/>Inline Value Blocks -

This clause specifies how inline vaues for “DataArray”, “Matrix” and “DataStream” components shall be encoded when provided within a JSON document. No other method is allowed within a JSON document compliant with this standard.

- -

However, when values are provided separately from the component description (e.g. when datastream values are provided separately), any encoding methods defined in Clause 10 can be used.

- -

Inline block component values shall always be wrapped using JSON Arrays.

-
-
- - -9.5.<tab/>Requirements Class: Geometry Components JSON Schema - - -

Requirements class 13: Geometry Components JSON Schema

Identifier/req/json-geom-components
Target typeJSON Document
PrerequisitesRequirements class 6: /req/uml-geom-components
Requirements class 9: /req/json-simple-components
- - -9.5.1.<tab/>Geometry Object -

The “Geometry” object is the XML schema implementation of the “Geometry” UML class defined in Clause 8.6.1. The schema for this class is provided in Geometry.json.

- -{ - "type": "Geometry", - "definition": "http://sensorml.com/ont/swe/property/TargetLocation", - "srs": "http://www.opengis.net/def/crs/EPSG/0/4326", - "label": "Target Location", - "description": "A point geometry", - "value": { - "type": "Point", - "coordinates": [12.34, 56.36] - } -} - -{ - "type": "Geometry", - "definition": "http://sensorml.com/ont/swe/property/Trajectory", - "srs": "http://www.opengis.net/def/crs/EPSG/0/4326", - "label": "Desired Trajectory", - "description": "Desired UxS trajectory defined as a line string", - "value": { - "type": "LineString", - "coordinates": [[12.34, 56.36], [12.45, 56.37], [12.45, 56.39], [12.34, 56.36]] - } -} - -{ - "type": "Geometry", - "definition": "http://sensorml.com/ont/x-swe/property/SurveillanceArea", - "srs": "http://www.opengis.net/def/crs/EPSG/0/4326", - "label": "Surveillance Area", - "description": "Desired UxS surveillance area defined as a polygon", - "value": { - "type": "Polygon", - "coordinates": [ - [[12.34, 56.36], [12.45, 56.37], [12.45, 56.39], [12.34, 56.36]] - ] - } -} - -
-
- - -9.6.<tab/>Requirements Class: Simple Encodings JSON Schema - - -

Requirements class 14: Simple Encodings JSON Schema

Identifier/req/json-simple-encodings
Target typeJSON Document
PrerequisitesRequirements class 14: /req/json-simple-encodings
Requirements class 18: /req/text-encoding-rules
Requirements class 17: /req/json-encoding-rules
- -

Validation patterns that implement classes defined respectively in the “Simple Encodings” UML packages are provided in the JSON schema encodings.json.

- -

When datastream or data array values are provided out-of-band (i.e. not inline in the “DataArray”, “Matrix” or “DataStream” description), a different encoding than JSON can be selected. This is specified by using one of the following classes.

- - -9.6.1.<tab/>TextEncoding Object -

The “TextEncoding” object is the JSON schema implementation of the “TextEncoding” UML class defined in Clause 8.7.1. The schema for this class is provided in encodings.json#/definitions/TextEncoding.

- -{ - "type": "TextEncoding", - "tokenSeparator": ",", - "blockSeparator": "\n", - "decimalSeparator": "." -} - -
-
- - -9.7.<tab/>Requirements Class: Advanced Encodings JSON Schema - - -

Requirements class 15: Advanced Encodings JSON Schema

Identifier/req/json-advanced-encodings
Target typeJSON Document
PrerequisitesRequirements class 8: /req/uml-advanced-encodings
Requirements class 14: /req/json-simple-encodings
Requirements class 19: /req/binary-encoding-rules
- -

This requirement class defines an additional encoding method that can be used to encode data values as raw or base64 binary blocks.

- - -9.7.1.<tab/>BinaryEncoding Object -

The “BinaryEncoding” object is the JSON schema implementation of the “BinaryEncoding” UML class defined in Clause 8.8.1. The schema for this class is provided in encondings.json#/definitions/BinaryEncoding.

- - - -

These elements allow for the detailed specification of the encoding parameters associated to components of the data description tree as discussed in Clause 8.8.1. The “ref” attribute takes a value of a particular syntax that allows pointing to any data component. The syntax is a ‘/’ separated list of component names, starting with the name of the root component and listed hierarchically. Each of these component names shall match the value of the “name” attribute defined in the data definition tree.

- - - -

Requirement 60

Identifier/req/xsd-advanced-encodings/ref-syntax-valid
Statement

The “ref” attribute of the “Component” and “Block” elements shall contain a hierarchical ‘/’ separated list of data component names.

- -

The “ref” attribute used on the “Component” element shall point exclusively to a scalar component.

- - - -

Requirement 61

Identifier/req/xsd-advanced-encodings/scalar-ref-component-valid
Statement

The “ref” attribute of a “Component” element shall reference a scalar or range component.

- -

This standard defines the list of data types that are allowed for scalar values when encoded with the binary encoding method. The corresponding URIs listed below shall be used as the value of the datatype attribute of an instance of the “Component” element.

- - - -

Requirement 62

Identifier/req/xsd-advanced-encodings/datatype-valid
Statement

The value of the “dataType” XML attribute of the “Component” element shall be one of the URIs listed in Table 1.

- -

These data types are specified in the normative table below:

- - -Table 1 — Allowed Binary Data Types - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Common NameURI to use in “dataType” attributeDescription
Signed Byte8-bits signed binary integer.
- Range: −128 to +127
Unsigned Byte8-bits unsigned binary integer.
- Range: 0 to +255
Signed Short16-bits signed binary integer.
- Range: −32,768 to +32,767
Unsigned Short16-bits unsigned binary integer.
- Range: 0 to +65,535
Signed Int32-bits signed binary integer.
- Range: −2,147,483,648 to +2,147,483,647
Unsigned Int32-bits unsigned binary integer.
- Range: 0 to +4,294,967,295
Signed Long64-bits signed binary integer.
- Range: −263 to +263 — 1
Unsigned Long64-bits unsigned binary integer.
- Range: 0 to +264 — 1
Half Precision - Float16-bits single precision floating point number as defined in IEEE 754.
Float32-bits single precision floating point number as defined in IEEE 754.
Double or
-
64-bits double precision floating point number as defined in IEEE 754.
Long Double128-bits quadruple precision floating point number as defined in IEEE 754.
UTF-8 String
- (Variable Length)

- “byteLength” attribute is not set.
Variable length string composed of a 2-bytes unsigned short value indicating its length followed by a sequence of UTF-8 encoded characters as specified by the Unicode Standard (2.5).
UTF-8 String*
- (Fixed Length)

- “byteLength” attribute is set.
Fixed length string composed of a sequence of UTF-8 encoded characters as specified by the Unicode Standard (2.5), and padded with 0 characters.
- -

The data type should be chosen so that its range allows the encoding of all possible values for a field (i.e. compatible with the field representation and constraints) including NIL values. This means that certain combinations of data type and components are not allowed. If a scalar component does not specify any constraint, any data type compatible with its representation can be used and it is the responsibility of the implementation to insure that all future values for the component will “fit” in the data type.

- - - -

Requirement 63

Identifier/req/xsd-advanced-encodings/datatype-compatible
Statement

The chosen data type shall be compatible with the scalar component representation, constraints and NIL values.

- -

Only data types marked with an asterisk allow the usage of the “byteLength” or “bitLength” attribute to customize their size. Usage of these attributes is forbidden on all other data types since their size is fixed and already specified in this standard (in the case of a variable length string, the size is included in the stream). This is enforced by a Schematron pattern.

- - - -

Requirement 64

Identifier/req/xsd-advanced-encodings/no-datatype-length
Statement

The “bitLength” and “byteLength” XML attributes shall not be set when a fixed size data type is used.

- -

The value of the “byteEncoding” XML attribute allows the selection of either the ‘raw’ or ‘base64’ encoding methods. When ‘base64’ is selected each byte is converted to its base 64 representation before it is included in encoded block, making it possible to include the values directly inline in the XML instance.

- -

The following binary encoded image data illustrates how the BinaryEncoding element is used to specify encoding options to each scalar value in the dataset:

-
-
-
- - -10.<tab/>Data Blocks and Streams Encoding Rules (normative) - -10.1.<tab/>Requirements Class: General Encoding Rules - - -

Requirements class 16: General Encoding Rules

Identifier/req/general-encoding-rules
Target typeEncoded Values Instance
Conformance classConformance class A.8: /conf/general-encoding-rules
Indirect prerequisiteRequirements class 7: /req/uml-simple-encodings
- -

All encodings defined in this standard follow general principles so that it is possible to implement them in a similar way.

- -

The way values are encoded is linked to the data structure specified using a hierarchy of data components. The values are included sequentially in the data stream by recursively processing all data components composing the dataset definition tree.

- - -10.1.1.<tab/>Rules for Scalar Components -

The value of each scalar component is encoded as a single scalar value. The actual binary representation of this scalar value depends on the encoding method. For example, in “TextEncoding”, a numerical value is represented by its string representation that usually span several bytes (e.g. ‘1.2345’ spans 6 bytes), why with the “BinaryEncoding” encode a similar value would likely be encoded as an IEEE 754 single precision floating-point format.

- -

The value of a “Time” component is encoded either as a decimal value or as a string in the case where a calendar representation or indeterminate value is used.

- -

When the value of a scalar component is NIL, the appropriate nil value is used in the stream and replaces the actual measurement value. This is always possible because nil values are required to be expressed with a data type that is compatible with the representation of the corresponding field.

-
- - -10.1.2.<tab/>Rules for Range Components -

The values of range components are encoded as a sequence of two successive values, first the lower bound of the range, then the upper bound. Each of these values is encoded exactly like the values of scalar components.

-
- - -10.1.3.<tab/>Rules for DataRecord and Vector -

Both “DataRecord” and “Vector” components are aggregates consisting of an ordered sequence of child components. The values contained in these aggregates are encoded by successively encoding each child component in the order in which they are listed in the XML description and including the resulting values sequentially in the stream.

- -

The definition of a “DataRecord” (or “Vector”) structure composed of N fields (or coordinates for vectors) can be represented in the following way:

- -
- -

The data block corresponding to such a structure would sequentially include all values for field 1, then all values for field 2, etc. until the last field is reached. Each field may consist of a single value if it is a scalar but may also consist of multiple values if it is itself an aggregate or a range component.

- - - -

Requirement 65

Identifier/req/general-encoding-rules/record-encoding-rule
Statement

“DataRecord” fields or “Vector” coordinates shall be encoded sequentially in a data block in the order in which these fields or coordinates are listed in the data descriptor.

-
- - -10.1.4.<tab/>Rules for DataChoice -

The “DataChoice” is an aggregate consisting of a choice of several child components called items. When values of a data choice are encoded, the resulting data block consists of two things: A token identifying the selecting item and the item values themselves. Only values of a single item can be encoded in each instance of a choice.

- -
- -

The data block corresponding to such a structure would then sequentially include the item identifier (i.e. the choice value) and then the value(s) for the selected item. The item may consist of a single value if it is a scalar or multiple values if it is itself an aggregate or a range component.

- - - -

Requirement 66

Identifier/req/general-encoding-rules/choice-encoding-rule
Statement

Encoded values for the selected item of a “DataChoice” shall be provided along with information that unambiguously identifies the selected item.

-
- - -10.1.5.<tab/>Rules for DataArray and Matrix -

The “DataArray” is an aggregate consisting of a number of repeated elements, all of the same type as defined by the element type. Values contained by a “DataArray” are encoded by sequentially including the values of each element.

- -

The definition of a “DataArray” (“Matrix”) structure composed of the array dimension and size and the element type definition. This can be represented in the following way:

- -
- -

The data block corresponding to such a structure would sequentially include the number representing the array size (only if it is variable) followed by one or more values corresponding to each array element. The number of values encoded for each element depends only on the array element definition, and the total number of values also depends on the array size.

- - - -

Requirement 67

Identifier/req/general-encoding-rules/array-encoding-rule
Statement

“DataArray” elements shall be encoded sequentially in a data block in the order of their index in the array (i.e. from low to high index).

- - - -

Requirement 68

Identifier/req/general-encoding-rules/array-size-encoding-rule
Statement

Encoded data for a variable size “DataArray” shall include a number specifying the array size whatever the encoding method used.

-
-
- - -10.2.<tab/>Requirements Class: JSON Encoding Rules - - -

Requirements class 17: JSON Encoding Rules

Identifier/req/json-encoding-rules
Target typeEncoded Values Instance
PrerequisiteRequirements class 16: /req/general-encoding-rules
Indirect prerequisiteRequirements class 7: /req/uml-simple-encodings
- -

The “JSON Encoding” method encodes field values by their JSON representation.

- - - -

Requirement 69

Identifier/req/json-encodings-rules/json-valid
Statement

Data blocks and datastreams encoded using the JSON Encoding rules shall be valid JSON documents as defined by IETF RFC 8259.

- -

The encoding rules defined in this document refer to JSON data types defined by IETF RFC 8259. Their definitions are recalled below:

- -

JSON Object: An object structure is represented as a pair of curly brackets surrounding zero or more name/value pairs (or members). Members are separated by commas. Each member must have a distinct name.

- -

JSON Array: An array structure is represented as square brackets surrounding zero or more values (or elements). Elements are separated by commas.

- -

JSON Number: A decimal or integer number represented in base 10, with a sign and optional exponent.

- -

JSON String: A string of Unicode characters that begins and ends with quotation marks.

- - -10.2.1.<tab/>Rules for Scalar Components -

Scalar components are encoded as specified in Table 2. Special numerical values allowed for “Quantity” and “Time” components are defined in Clause 9.1.2.

- - - -

Requirement 70

Identifier/req/json-encoding-rules/scalar-value-valid
Statement

The value of a scalar component shall be represented using a JSON Number, a JSON String, or a boolean literal value, as defined in Table 2.

- - -Table 2 — Simple Component to JSON Value Types Mapping - - - - - - - - - - - - - - - - - - - - - - - -
Component TypeJSON Value TypeExamples
BooleanBoolean literaltrue
- false
TextJSON String"word"
- "a full sentence"
- "BYC-589-AA"
CategoryJSON String"ON"
- "Paleozoic"
- "diesel"
CountJSON Number12
- 0
QuantityJSON Number, or
- JSON String with special numerical value.
12
- 23.1
- "NaN"
- "-Infinity"
- "+Infinity"
TimeJSON String with a ISO8601 date/time string, or - JSON Number, or
- JSON String with special numerical value.
"2023-03-15T12:45:56Z"
- -23.1
- 12
- "NaN"
- "-Infinity"
- "+Infinity"
-
- - -10.2.2.<tab/>Rules for Range Components -

A range component is encoded using a JSON array of two values.

- - - -

Requirement 71

Identifier/req/json-encoding-rules/range-value-valid
A

Values of range components shall be wrapped in a JSON Array with exactly 2 scalar values.

-
B

Each value is encoded in the same manner as the corresponding scalar component as defined in Table 2.

-
- - -Table 3 — Range Component to JSON Mapping - - - - - - - - - - - - -
Component TypeExamples
CategoryRange["Cenozoic", "Paleozoic"]
CountRange[0, 12]
QuantityRange[-12, 35]
- [-180.0, 180.0]
- ["-Infinity", 0.0]
- [10.0, "+Infinity"]
- ["NaN", "NaN"]
TimeRange["2023-01-01T00:00:00Z", "2023-03-15T12:45:56Z"]
- ["2023-01-01T00:00:00Z", "+Infinity"]
- ["-Infinity", "2023-01-01T00:00:00Z"]
- ["2023-01-01T00:00:00Z", "+Infinity"]
- ["NaN", "NaN"]
-
- - -10.2.3.<tab/>Rules for DataRecord and Vector -

“DataRecord” components are encoded using a JSON Object whose members are named like the record fields.

- - - -

Requirement 72

Identifier/req/json-encoding-rules/record-object-valid
A

“DataRecord” values shall be wrapped in a JSON Object.

-
B

The name of the JSON object members shall be the same as the “DataRecord” field names.

-
C

The value of each JSON Object member shall be chosen by following the encoding rules of the data component used as the record field with the same name.

-
D

If a record field is marked as ‘optional’, the corresponding JSON object member can be omitted or its JSON value can be set to null.

-
- - - -

Requirement 73

Identifier/req/json-encoding-rules/vector-object-valid
A

“Vector” values shall be wrapped in a JSON Object.

-
B

The name of the JSON object members shall be the same as the “Vector” coordinate names.

-
C

The value of each JSON Object member shall be chosen by following the encoding rules of the data component used as the vector coordinate field with the same name.

-
- -

When a field has its ‘optional’ flag set to true, its value can be either omitted or set to the literal value null.

- -

See the following examples:

- -
  • DataArray with inline values (curve)

    -
  • -
  • Datastream with records (weather data)

    -
  • -
  • Datastream with records and optional fields (navigation data)

    -
  • -
-
- - -10.2.4.<tab/>Rules for DataChoice -

Values of “DataChoice” components are encoded using a JSON Object with a single member whose name is the name of the selected choice item.

- - - -

Requirement 74

Identifier/req/json-encoding-rules/choice-object-valid
A

“DataChoice” values shall be encapsulated in a JSON Object.

-
B

The JSON object shall contain a single member whose name is the same as the selected choice item.

-
C

The JSON value of this unique member shall be chosen according to the encoding rules of the data component corresponding to the selected item.

-
- -

See example: Datastream with choice (navigation data)

-
- - -10.2.5.<tab/>Rules for DataArray and Matrix -

Values of “DataArray” and “Matrix” components are encoded using a JSON Array, containing as many elements as there are elements in the Array component.

- - - -

Requirement 75

Identifier/req/json-encoding-rules/array-values-valid
A

“DataArray” and “Matrix” values shall be encapsulated in a JSON Array.

-
B

Each array element shall be encoded using the rules corresponding to the data component used as the array element type.

-
- -

See the following examples:

- -
  • Fixed size 2D array (stress matrix)

    -
  • -
  • Datastream of variable size 1D arrays (profile series)

    -
  • -
-
- - -10.2.6.<tab/>Rules for Geometry -

The value of a “Geometry” component is encoded using a GeoJSON Geometry object.

- - - -

Requirement 76

Identifier/req/json-encodings-rules/geometry-valid
A

The value of a “Geometry” component shall be encoded as a GeoJSON Geometry Object, following rules defined by IETF RFC 7946.

-
B

The allowed GeoJSON geometry types shall be restricted to: Point, LineString, Polygon, MultiPoint, MultiLineString, and MultiPolygon

-
C

The number of dimensions of the GeoJSON geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component.

-
- -

See example: Datastream with geometry (feature detection)

-
- - -10.2.7.<tab/>JSON Schema -

In order to maximize compatibility with existing tools, A JSON Schema can be easily auto-generated from the Datastream description.

-
- - -10.2.8.<tab/>Media Types -

When array or datastream values are encoded with the JSON encoding method and provided standalone (i.e. outside of any wrapper format), one of the following media type identifiers shall be used:

- -
  1. One of application/json or application/swe+json shall be used as the content-type for files and HTTP reponses.

    -
  2. -
  3. application/swe+json shall be used for format negotiation between server and client (e.g. when the format is advertised by an API or web service). In particular, this media type shall be used in HTTP Accept and Link headers and in any server response used to advertise support or link to a resource encoded with this format.

    -
  4. -
- -

alternative would be application/vnd.ogc.swe+json

-
-
- - -10.3.<tab/>Requirements Class: Text Encoding Rules - - -

Requirements class 18: Text Encoding Rules

Identifier/req/text-encoding-rules
Target typeEncoded Values Instance
Conformance classConformance class A.9: /conf/text-encoding-rules
PrerequisiteRequirements class 16: /req/general-encoding-rules
Indirect prerequisiteRequirements class 7: /req/uml-simple-encodings
- -

The “TextEncoding” method encodes field values (especially numbers) by their text representation. Special characters provide a way to separate successive values and successive blocks. The ABNF syntax defined in IETF RFC 5234 is used to formalize the encoding rules, and thus all ABNF snippets provided in this section are normative.

- - - -

Requirement 77

Identifier/req/text-encodings-rules/abnf-syntax-valid
Statement

The encoded values block shall be formatted as defined by the ABNF grammar defined in this clause.

- - -10.3.1.<tab/>Separators -

Token separators are used between single values and the block separator is used at the end of each block. The block corresponds to one element of the “DataArray” or “DataStream” carrying the “values” element in which the values are encoded. There are no special separators to delimitate nested records, arrays and choices.

- -

Separators shall be chosen so that nothing in the dataset contains the exact same character sequence as the one chosen for token or block separator.

- - - -

Requirement 78

Identifier/req/text-encodings-rules/separators-valid
Statement

Block and token separators used in the “TextEncoding” method shall be chosen as a sequence of characters that never occur in the data values themselves.

- -

When the attribute “collapseWhiteSpaces” is set to true (its default value), all white space characters surrounding the token and block separators shall be ignored. The BNF grammar for separators is given below:

- -white-space = %d9 / %d10 / %d13 / %d32 ; TAB, LF, CR or SPACE - -token-separator-chars = < Value of the tokenSeparator attribute > - -block-separator-chars = < Value of the blockSeparator attribute > - -token-separator = [white-space] token-separator-chars [white-space] - -block-separator = [white-space] block-separator-chars [white-space] - - -

White spaces around separators are in fact only allowed when the “collapseWhiteSpaces” attribute is set to ‘true’ (which is the default).

-
- - -10.3.2.<tab/>Rules for Scalar Components -

The value for a scalar component is encoded as its text representation, following XML schema datatypes conventions.

- -scalar-value = xs:bool / xs:string / xs:double / xs:int / xs:date / xs:dateTime - - -

Nil values are included in the stream just like normal scalar values. Since their data type has to match the field data type, there is no special treatment necessary for a decoder or encoder. It is the responsibility of the application to match the data value against the list of registered nil values for a given field in order to detect if it is associated to a nil reason or if it is an actual measurement value.

-
- - -10.3.3.<tab/>Rules for Range Components -

Range components are encoded as a sequence of two tokens (each one representing a scalar value) separated by a token separator:

- -min-value = scalar-value - -max-value = scalar-value - -range-values = min-value token-separator max-value - -
- - -10.3.4.<tab/>Rules for DataRecord and Vector -

Values of fields of a “DataRecord” are recursively encoded following rules associated to the type of component used for the field’s description (i.e. scalar, record, array, etc.) and separated by token separators as expressed by the following grammar:

- -field-count = < Number of fields in the record minus one. Greater or equal to 0 > - -any-field-value = scalar-value / range-values / record-values / choice-values / array-values - -mandatory-field-value = any-field-value - -optional-field-value = (“Y” token-separator any-field-value) / “N” - -field-value = mandatory-field-value / optional-field-value - -record-values = field-value <field-count>*(token-separator field-value) - - -

When a field is marked as optional in the definition, the token ‘Y’ or ‘N’ shall be inserted in the data block. When the field value is omitted, the token ‘N’ is inserted alone. When it is included, the token ‘Y’ is inserted followed by the actual field value.

- - - -

Requirement 79

Identifier/req/text-encodings-rules/optional-field-marker-present
Statement

The ‘Y’ or ‘N’ token shall be inserted in a text encoded data block for all fields that have the “optional” attribute set to ‘true’.

- -

Coordinate values of “Vector” components are encoded with a similar syntax, but a coordinate value can only be scalar and cannot be omitted:

- -coord-count = < Number of coordinates in the vector minus one. Greater or equal to 0 > - -vector-values = scalar-value <coord-count>*(token-separator scalar-value) - - -

See the following examples:

- -
  • DataArray with inline values (curve)

    -
  • -
  • Datastream with records (weather data)

    -
  • -
  • Datastream with records and optional fields (navigation data)

    -
  • -
-
- - -10.3.5.<tab/>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.

- -selected-item-name = < Value of the “name” attribute of the item selected > -selected-item-values = scalar-value / range-values / record-values / choice-values / array-values -choice-values = selected-item-name token-separator selected-item-values - - - - -

Requirement 80

Identifier/req/text-encodings-rules/choice-selection-marker-valid
Statement

The selected-item-name token shall correspond to the value of the “name” attribute of the “item” property element that represents the selected item.

- -

See example: Datastream with choice (navigation data).

-
- - -10.3.6.<tab/>Rules for DataArray and Matrix -

Values of each “DataArray” or “Matrix” element are recursively encoded following rules associated to the type of component used for the element type (i.e. scalar, record, array, etc.). Groups of values (or single value in the case of a scalar element type) corresponding to each element are sequentially appended to the data block and separated by token or block separators, depending on the context: When the “DataArray” is the root of the component tree that is being encoded, its elements are separated by block separators, otherwise its elements are separated by token separators.

- -

A “DataArray” or “Matrix” can have a fixed or variable size, which leads to two slightly different syntaxes for encoding values: -array-separator = token-separator / block-separator ; block-separator is only used when the array is the root of the component tree whose values are being encoded.

- -array-values = fixed-size-array-values / variable-size-array-values - - -

Fixed size arrays have a size of at least one, and are encoded as defined below:

- -fixed-element-count = < Number of elements in a fixed size array minus one. Greater or equal to 0 since fixed size is always at least one > - -element-values = scalar-value / range-values / record-values / choice-values / array-values - -fixed-size-array-values = element-values <fixed-element-count>*(array-separator element-values) - - -

When a “DataArray” (“Matrix”) is defined as variable size, its size can be 0 and the array size is included as a token in the data block, before the actual array elements values are listed:

- -variable-element-count = < Number of elements in a variable size array. Greater or equal to 0 since variable size can be 0 for an empty array > - -variable-size-array-values = variable-element-count <variable-element-count>*(array-separator element-values) - - -

See the following examples:

- -
  • DataArray with inline values (curve)

    -
  • -
  • Fixed size 2D array (stress matrix)

    -
  • -
  • Datastream of variable size 1D arrays (profile series)

    -
  • -
-
- - -10.3.7.<tab/>Rules for DataStream -

Values of “DataStream” elements are encoded as a sequence of tokens in a way similar to how “DataArray” values are encoded. Groups of encoded values corresponding to one element of a “DataStream” are always separated by block separators, while all values within these groups are separated by token separators:

- -stream-element-count = < Number of elements in a data stream minus one. Greater or equal to 0 since the number of elements in a data stream is always at least one > - -stream-values = element-values <stream-element-count>*(block-separator element-values); - - -

Examples of “DataStream” with “TextEncoding” have already been given in previous sections.

-
- - -10.3.8.<tab/>Rules for Geometry -

The value of a “Geometry” component is encoded using the WKT format defined in the Simple Feature Access Standard (OGC 06-103r4).

- - - -

Requirement 81

Identifier/req/text-encodings-rules/geometry-valid
A

The value of a “Geometry” component shall be encoded using the WKT format defined in OGC 06-103r4, clause 7.

-
B

The WKT representation shall be either a “Two-Dimension Geometry WKT” (clause 7.2.2 of OGC 06-103r4) or a “Three-Dimension Geometry WKT” (clause 7.2.3 of OGC 06-103r4). The ‘M’ coordinate shall not be used.

-
C

The number of dimensions of the WKT geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component.

-
D

When a geometry value is included in a text-encoded datastream, the token separator shall not be the comma character (ASCII code 44) to avoid conflicting with commas used inside the WKT representation.

-
- -

See example: Datastream with geometry (feature detection)

-
- - -10.3.9.<tab/>Media Types -

When array or datastream values are encoded with the Text encoding method and provided standalone (i.e. outside of any wrapper format such as an XML document), one of the following media type identifiers shall be used:

- -
  1. One of text/plain, text/csv, or application/swe+text shall be used as the content-type for files and HTTP reponses.

    -
    • text/csv can be used only when the token separator is set to a single comma ‘,’ and the block separator is set to ‘CRLF’.

      -
    • -
    • text/plain and application/swe+text can be used for any combination of separators.

      -
    • -
    -
  2. -
  3. application/swe+text shall be used for format negotiation between server and client (e.g. when the format is advertised by an API or web service). In particular, this media type shall be used in HTTP Accept and Link headers and in any server response used to advertise support or link to a resource encoded with this format.

    -
  4. -NOTE

    It is recommended that the character set code be correctly appended to these media types if it differs from US-ASCII or UTF-8.

    -
- - - -

alternative would be application/vnd.ogc.swe+text

-
-
- - -10.4.<tab/>Requirements Class: Binary Encoding Rules - - -

Requirements class 19: Binary Encoding Rules

Identifier/req/binary-encoding-rules
Target typeEncoded Values Instance
Conformance classConformance class A.10: /conf/binary-encoding-rules
PrerequisiteRequirements class 16: /req/general-encoding-rules
Indirect prerequisiteRequirements class 8: /req/uml-advanced-encodings
- -

The “BinaryEncoding” method encodes field values by their binary representation. The ABNF syntax defined in IETF RFC 5234 is used to formalize the encoding rules, and thus all ABNF snippets provided in this section are normative.

- - - -

Requirement 82

Identifier/req/binary-encoding-rules/abnf-syntax-valid
Statement

The encoded values block shall be formatted as defined by the ABNF grammar defined in this clause.

- -

The encoding rules are similar to those of the “TextEncoding” method except that numerical values are encoded directly as their binary representation and that no separators are used. Separators are not needed because data types have either a fixed size or contain length information (See String encoding).

- - -10.4.1.<tab/>Rules for Scalar Components -

The value for a scalar component is encoded as its binary representation. This especially applies to numerical values that are encoded directly in binary form in accordance to the selected data type and the value of the “byteOrder” attribute.

- -scalar-value = < binary value encoded according to data type, byte encoding and byte order specifications > - - -

The last column of Table 1 in [xsd_binarycomponent_elt] indicates how each data type shall be binary encoded into a low level byte sequence. The actual order of bytes composing a multi-bytes data type depends on the value of the “byteOrder” attribute. The ‘bigEndian’ option indicates that muti-bytes data types are encoded with the most significant byte (MSB) first, while selecting ‘littleEndian’ signifies that encoding is done with the less significant byte (LSB) first. A UTF-8 string is not considered as a multi-byte data type and is always encoded in the same order, as specified by the Unicode Standard.

- - - -

Requirement 83

Identifier/req/binary-encoding-rules/type-encoding-valid
Statement

Binary data types in Table 1 shall be encoded according to their definition in the description column and the value of the “byteOrder” attribute.

- -

Nil values are included in the stream just like normal scalar values. Since their data type has to match the field data type, there is no special treatment necessary for a decoder or encoder. It is the responsibility of the application to match the data value against the list of registered nil values for a given field in order to detect if it is associated to a nil reason or if it is an actual measurement value.

- -

When the ‘raw’ byte encoding option is selected, bytes resulting from the data type encoding process defined above are inserted in the binary stream directly. This is refered to as ‘raw binary’ encoding. When the ‘base64’ option is selected, each byte resulting from the binary encoding process is also encoded in Base64 before being included in the stream. Scalar values can be Base 64 encoded one by one or by blocks as long as the resulting stream is compatible with requirements of IETF RFC 2045.

- - - -

Requirement 84

Identifier/req/binary-encoding-rules/base64-translation-applied
Statement

When the ‘base64’ encoding option is selected, binary data shall be encoded with the Base64 technique defined in IETF RFC 2045 Section 6.8: Base64 Content-Transfer-Encoding.

-
- - -10.4.2.<tab/>Rules for Range Components -

Range components are encoded as a sequence of two binary values (each one representing a scalar value):

- -min-value = scalar-value - -max-value = scalar-value - -range-values = min-value max-value - - -

Values are always included in the same order: The lower bound of the range first, followed by the upper bound.

-
- - -10.4.3.<tab/>Rules for DataRecord and Vector -

Values of fields of a “DataRecord” are recursively encoded following rules associated to the type of component used as the field’s description (i.e. scalar, record, array, etc.) and appended to the binary block:

- -field-count = < Number of fields in the record. Greater or equal to 1 > - -any-field-value = scalar-value / range-values / record-values / choice-values / array-values / block_values - -mandatory-field-value = any-field-value - -optional-field-value = (“Y” any-field-value) / “N” - -field-value = mandatory-field-value / optional-field-value - -record-values = <field-count>*field-values - - -

When a field is marked as optional in the definition, the 1-byte value ‘Y’ (ASCII code 89) or ‘N’ (ASCII code 78) shall be inserted in the data block. When the field value is omitted, the token ‘N’ is inserted alone. When it is included, the token ‘Y’ is inserted followed by the actual field value.

- - - -

Requirement 85

Identifier/req/binary-encoding-rules/optional-field-marker-present
Statement

The one byte ASCII character ‘Y’ or ‘N’ shall be inserted in a binary encoded data block for all “DataRecord” fields that have the “optional” attribute set to ‘true’.

- -

Coordinate values of “Vector” components are encoded with a similar syntax, but a coordinate value can only be scalar and cannot be omitted:

- -coord-count = < Number of coordinates in the vector. Greater or equal to 1 > - -vector-values = <coord-count>*scalar-value - - -

Vector coordinates cannot be optional.

-
- - -10.4.4.<tab/>Rules for DataChoice -

A “DataChoice” is encoded with the binary method by providing the zero-based index of the selected item before the item values themselves. The index value ranges from 0 for the first choice item to (number_of_items - 1) for the last item.

- -selected-item-idx = < Index of the item selected > - -selected-item-value = scalar-value / range-values / record-values / choice-values / array-values - -choice-values = selected-item-idx selected-item-value - - - - -

Requirement 86

Identifier/req/binary-encoding-rules/choice-selection-marker-valid
Statement

The value of the selected-item-idx flag shall be the zero-based index of the selected item (within the ordered list of items provided by the choice descriptor) and be encoded on a single unsigned byte.

-
- - -10.4.5.<tab/>Rules for DataArray and Matrix -

Values of each “DataArray” or “Matrix” element are recursively encoded following rules associated to the type of component used for the element type (i.e. scalar, record, array, etc.). Groups of values (or single value in the case of a scalar element type) corresponding to each element are sequentially appended to the data block. Since a “DataArray” or “Matrix” can have a fixed or variable size, two slightly different syntaxes for encoding values are possible:

- -array-values = fixed-size-array-values / variable-size-array-values - -element-value = scalar-value / range-values / record-values / choice-values / array-values / block_values - - -

Fixed size arrays have a size of at least one, and are encoded as defined below:

- -fixed-element-count = < Number of elements in a fixed size array > - -fixed-size-array-values = <fixed-element-count>*element-value - - -

When a “DataArray” (“Matrix”) is defined as variable size, its size can be 0 and the array size is included as a token in the data block, before the actual array elements values are listed:

- -variable-element-count = < Number of elements in a variable size array > - -variable-size-array-values = variable-element-count <variable-element-count>*element-value - - -

When the array size is 0, only this number is encoded and no element values are included in the data block.

-
- - -10.4.6.<tab/>Rules for DataStream -

Values of “DataStream” elements are encoded exactly as elements of an array:

- -stream-element-count = < Number of elements in a data stream > - -stream-values = <stream-element-count>*element-value - - -

A data stream usually contains at least one value but could be empty.

-
- - -10.4.7.<tab/>Rules for Geometry -

The value of “Geometry” is encoded using the WKB format defined in the Simple Feature Access Standard (OGC 06-103r4).

- - - -

Requirement 87

Identifier/req/binary-encodings-rules/geometry-valid
A

The value of a “Geometry” component shall be encoded using the WKB format defined in OGC 06-103r4, clause 8.

-
B

The WKB geometry type shall be one of the following types listed in OGC 06-103r4, clause 8.2.3, table 7: Point, LineString, Polygon, MultiPoint, MultiLineString, MultiPolygon, Point Z, LineString Z, Polygon Z, MultiPoint Z, MultiLineString Z, MultiPolygon Z. Other geometry type codes shall not be used.

-
C

The number of dimensions of the WKB geometry shall match the number of dimensions of the coordinate reference system identified by the “srs” attribute of the component.

-
- -

No specific marker or length information needs to be pre-pended to the binary representation since the WKB format is self descriptive and parsable without knowing the total length ahead of time.

-
- - -10.4.8.<tab/>Block encoded components -

When block encoding characteristics are also specified in the encoding description, the encryption and/or compression algorithm shall be applied after the binary encoding process described above is completed for the block. Extensions of this standard can define compression and encryption methods that fit the needs of particular communities.

- -

In order to maximize compatibility with existing software, when compressing a binary encoded data stream results in a well known binary format, the corresponding mime type can be used instead of application/octet-stream. For instance video/h264 can be used when the entirety of the dataset (presumably a video stream) is compressed using the H264 video codec.

-
- - -10.4.9.<tab/>Media Types -

When array or stream values are encoded with the Binary encoding method and provided standalone (i.e. outside of any wrapper format), one of the following media type identifiers shall be used:

- -
  1. One of application/octet-stream or application/swe-binary shall be used as the content-type for files and HTTP responses.

    -
  2. -
  3. application/swe+binary shall be used for format negotiation between server and client (e.g. when the format is advertised by an API or web service). In particular, this media type shall be used in HTTP Accept and Link headers and in any server response used to advertise support or link to a resource encoded with this format.

    -
  4. -
- -

alternative would be application/vnd.ogc.swe-binary

-
-
-
- - - - - - - - - - - -3.<tab/>Normative references

The following documents are referred to in the text in such a way that some or all of their content constitutes requirements of this document. For dated references, only the edition cited applies. For undated references, the latest edition of the referenced document (including any amendments) applies.

- - - - -Policy SWG: OGC 08-131r3, The Specification Model — Standard for Modular specifications. Open Geospatial Consortium (2009).https://portal.ogc.org/files/?artifact_id=34762&version=2OGC 08-131r3 -John Herring: OGC 06-103r4, OpenGIS Implementation Specification for Geographic information — Simple feature access — Part 1: Common architecture. Open Geospatial Consortium (2011). http://www.opengis.net/doc/is/sfa/1.2.1.http://www.opengis.net/doc/is/sfa/1.2.1https://portal.ogc.org/files/?artifact_id=25355OGC 06-103r4 -Linda van den Brink, Clemens Portele, Panagiotis (Peter) A. Vretanos: OGC 10-100r3, Geography Markup Language (GML) simple features profile (with Corrigendum). Open Geospatial Consortium (2011).https://portal.ogc.org/files/?artifact_id=42729OGC 10-100r3 -ISO: ISO 8601:2019, Date and time — Representations for information interchange — Part 1: Basic rules. International Organization for Standardization, Geneva (2019). .. ISO (2019).ISO 8601:2019 -ISO: ISO 8601:2019, Date and time — Representations for information interchange — Part 2: Extensions. International Organization for Standardization, Geneva (2019). .. ISO (2019).ISO 8601:2019 -ISO/IEC: ISO/IEC 11404:2007, Information technology. International Organization for Standardization, International Electrotechnical Commission, Geneva (2007). https://www.iso.org/standard/39479.html.https://www.iso.org/standard/39479.htmlhttps://www.iso.org/contents/data/standard/03/94/39479.detail.rsshttps://standards.iso.org/ittf/PubliclyAvailableStandards/index.htmlISO/IEC 11404:2007iso-reference ISO/IEC 11404:2007(E)URN urn:iso:std:iso-iec:11404:stage-90.92:ed-2 90 92 -ISO: ISO 19101-1:2014, Geographic information. International Organization for Standardization, Geneva (2014). https://www.iso.org/standard/59164.html.https://www.iso.org/standard/59164.htmlhttps://www.iso.org/contents/data/standard/05/91/59164.detail.rssISO 19101-1:2014iso-reference ISO 19101-1:2014(E)URN urn:iso:std:iso:19101:-1:stage-90.93:ed-1 90 93 -ISO: ISO 19103:2005, Conceptual Schema Language. ISO (2005).ISO 19103:2005 -ISO: ISO 19107:2003, Spatial Schema. ISO (2003).ISO 19107:2003 -ISO: ISO 19108:2002, Geographic information. International Organization for Standardization, Geneva (2002). https://www.iso.org/standard/26013.html.https://www.iso.org/standard/26013.htmlhttps://www.iso.org/contents/data/standard/02/60/26013.detail.rssISO 19108:2002iso-reference ISO 19108:2002(E)URN urn:iso:std:iso:19108:stage-90.93:ed-1 90 93 -ISO: ISO 19111:2007, Spatial Referencing by Coordinates. ISO (2007).ISO 19111:2007 -Unified Code for Units of Measure (UCUM), Version 2.1, November 2017, UCUM -Unicode Technical Std #18, Unicode Regular Expressions, Version 13, Aug. 2009Unicode -The Unicode Standard, Version 5.2, October 2009Unicode - -T. Bray (ed.): IETF RFC 8259, The JavaScript Object Notation (JSON) Data Interchange Format. RFC Publisher (2017). https://www.rfc-editor.org/info/rfc8259.https://www.rfc-editor.org/info/rfc8259IETF RFC 8259DOI 10.17487/RFC8259 -H. Butler, M. Daly, A. Doyle, S. Gillies, S. Hagen, T. Schaub: IETF RFC 7946, The GeoJSON Format. RFC Publisher (2016). https://www.rfc-editor.org/info/rfc7946.https://www.rfc-editor.org/info/rfc7946IETF RFC 7946DOI 10.17487/RFC7946 -M. Nottingham: IETF RFC 8288, Web Linking. RFC Publisher (2017). https://www.rfc-editor.org/info/rfc8288.https://www.rfc-editor.org/info/rfc8288IETF RFC 8288DOI 10.17487/RFC8288 -JSON Schema Validation: A Vocabulary for Structural Validation of JSON, Version 2020-12, IETF JSON Schema -N. Freed, N. Borenstein: IETF RFC 2045, Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies. RFC Publisher (1996). https://www.rfc-editor.org/info/rfc2045.https://www.rfc-editor.org/info/rfc2045IETF RFC 2045DOI 10.17487/RFC2045 -P. Overell: IETF RFC 5234, Augmented BNF for Syntax Specifications: ABNF. RFC Publisher (2008). https://www.rfc-editor.org/info/rfc5234.https://www.rfc-editor.org/info/rfc5234IETF RFC 5234DOI 10.17487/RFC5234 -IEEE: IEEE 754-2008, IEEE Standard for Floating-Point Arithmetic. Institute of Electrical and Electronics Engineers (2013). https://ieeexplore.ieee.org/document/4610935.https://ieeexplore.ieee.org/document/4610935IEEE 754-2008IEEE 754™-2008ISBN 978-0-7381-5752-8DOI 10.1109/IEEESTD.2008.4610935 -
-<strong>Annex A</strong><br/>(normative)<br/><strong>Conformance Class Abstract Test Suite</strong> - -A.1.<tab/>Core Conformance Classes - -A.1.1.<tab/>Conformance Class: Core Concepts - - -

Conformance class A.1

Identifier/conf/core
Requirements classRequirements class 1: /req/core
Target TypeDerived Models and Software Implementations
- - - -

Abstract test A.1: Core concepts are the base of all derived models

Identifier/conf/core/core-concepts-used
RequirementRequirement 1: /req/core/core-concepts-used
Test purpose

Verify that the target implementation correctly implements the core concepts.

-
DescriptionExample 1

Inspect the target implementation.

-
- - - -

Abstract test A.2: A boolean representation consists of a boolean value

Identifier/conf/core/boolean-rep-valid
RequirementRequirement 2: /req/core/boolean-rep-valid
Test purpose

Verify that the target implementation correctly implements the Boolean representation.

-
DescriptionExample 2

Inspect the target implementation.

-
- - - -

Abstract test A.3: A categorical representation consists of a token with a code space

Identifier/conf/core/categorical-rep-valid
RequirementRequirement 3: /req/core/categorical-rep-valid
Test purpose

Verify that the target implementation correctly implements the Categorical representation.

-
DescriptionExample 3

Inspect the target implementation.

-
- - - -

Abstract test A.4: A continuous numerical representation consists of a number with a scale

Identifier/conf/core/numerical-rep-valid
RequirementRequirement 4: /req/core/numerical-rep-valid
Test purpose

Verify that the target implementation correctly implements the Numerical representation.

-
DescriptionExample 4

Inspect the target implementation.

-
- - - -

Abstract test A.5: A countable representation consists of an integer number

Identifier/conf/core/countable-rep-valid
RequirementRequirement 5: /req/core/countable-rep-valid
Test purpose

Verify that the target implementation correctly implements the Countable representation.

-
DescriptionExample 5

Inspect the target implementation.

-
- - - -

Abstract test A.6: A textual representation is implemented as a character string

Identifier/conf/core/textual-rep-valid
RequirementRequirement 6: /req/core/textual-rep-valid
Test purpose

Verify that the target implementation correctly implements the Textual representation.

-
DescriptionExample 6

Inspect the target implementation.

-
- - - -

Abstract test A.7: A semantic definition of each property shall be provided

Identifier/conf/core/semantics-defined
RequirementRequirement 7: /req/core/semantics-defined
Test purpose

Verify that the target implementation allows attaching a semantic definition to all property representations.

-
DescriptionExample 7

Inspect the target implementation.

-
- - - -

Abstract test A.8: References to semantical information shall be resolvable

Identifier/conf/core/semantics-resolvable
RequirementRequirement 8: /req/core/semantics-resolvable
Test purpose

Verify that the target implementation encodes the semantic links in a way that they can be resolved to an actual concept definition.

-
DescriptionExample 8

Inspect the target implementation.

-
- - - -

Abstract test A.9: A temporal quantity is associated to a temporal reference frame

Identifier/conf/core/temporal-frame-defined
RequirementRequirement 9: /req/core/temporal-frame-defined
Test purpose

Verify that the target implementation allows providing a temporal reference frame along with any date/time quantity.

-
DescriptionExample 9

Inspect the target implementation.

-
- - - -

Abstract test A.10: A spatial quantity is associated to an axis of a spatial reference frame

Identifier/conf/core/spatial-frame-defined
RequirementRequirement 10: /req/core/spatial-frame-defined
Test purpose

Verify that the target implementation allows providing a spatial reference frame and axis along with any quantity that is projected along a spatial dimension.

-
DescriptionExample 10

Inspect the target implementation.

-
- - - -

Abstract test A.11: A NIL value maps a reserved value to a reason

Identifier/conf/core/nil-reasons-defined
RequirementRequirement 11: /req/core/nil-reasons-defined
Test purpose

Verify that the target implementation allows providing a reason along with each NIL (reserved) value.

-
DescriptionExample 11

Inspect the target implementation.

-
- - - -

Abstract test A.12: Aggregate data types are modeled according to ISO 11404

Identifier/conf/core/aggregates-model-valid
RequirementRequirement 12: /req/core/aggregates-model-valid
Test purpose

Verify that the target implementation models aggregate data types according to ISO 11404 definitions.

-
DescriptionExample 12

Inspect the target implementation.

-
- - - -

Abstract test A.13: Encoding methods shall be defined for all possible data structures

Identifier/conf/core/encoding-method-valid
RequirementRequirement 13: /req/core/encoding-method-valid
Test purpose

Verify that the target implementation provides encoding methods for all representations and all implemented data structures.

-
DescriptionExample 13

Inspect the target implementation.

-
-
-
- - -A.2.<tab/>UML Conformance Classes - -A.2.1.<tab/>Conformance Class: Basic Types and Simple Components UML Packages - - -

Conformance class A.2: Basic Types and Simple Components UML Packages

Identifier/conf/uml-simple-components
Requirements classRequirements class 2: /req/uml-simple-components
PrerequisiteConformance class A.1: /conf/core
Target TypeDerived Models and Software Implementations
- - - -

Abstract test A.14: Compliance with UML models defined in this package

Identifier/conf/uml-simple-components/package-fully-implemented
RequirementRequirement 14: /req/uml-simple-components/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
DescriptionExample 1

Inspect the model or software implementation.

-
- - - -

Abstract test A.15: Compliance with UML models defined in ISO 19103

Identifier/conf/uml-simple-components/iso19103-implemented
RequirementRequirement 15: /req/uml-simple-components/iso19103-implemented
Test purpose

Verify that the target implements all classes imported from ISO 19103 UML packages.

-
DescriptionExample 2

Inspect the model or software implementation.

-
- - - -

Abstract test A.16: Compliance with UML models defined in ISO 19108

Identifier/conf/uml-simple-components/iso19108-implemented
RequirementRequirement 16: /req/uml-simple-components/iso19108-implemented
Test purpose

Verify that the target implements all classes imported from ISO 19108 UML packages.

-
DescriptionExample 3

Inspect the model or software implementation.

-
- - - -

Abstract test A.17: A definition URI is mandatory on all simple components

Identifier/conf/uml-simple-components/definition-present
RequirementRequirement 17: /req/uml-simple-components/definition-present
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 4

Inspect the model or software implementation.

-
- - - -

Abstract test A.18: The value of the axisID and axisAbbrev attributes match

Identifier/conf/uml-simple-components/axis-valid
RequirementRequirement 18: /req/uml-simple-components/axis-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 5

Inspect the model or software implementation.

-
- - - -

Abstract test A.19: The axis ID is always specified on scalar spatial properties

Identifier/conf/uml-simple-components/axis-defined
RequirementRequirement 19: /req/uml-simple-components/axis-defined
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 6

Inspect the model or software implementation.

-
- - - -

Abstract test A.20: The reference frame is specified on scalar spatial properties not part of a vector

Identifier/conf/uml-simple-components/ref-frame-defined
RequirementRequirement 20: /req/uml-simple-components/ref-frame-defined
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 7

Inspect the model or software implementation.

-
- - - -

Abstract test A.21: The value of a component satisfies the constraints

Identifier/conf/uml-simple-components/value-constraint-valid
RequirementRequirement 21: /req/uml-simple-components/value-constraint-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 8

Inspect the model or software implementation.

-
- - - -

Abstract test A.22: All derived simple components have an optional value attribute

Identifier/conf/uml-simple-components/value-attribute-present
RequirementRequirement 22: /req/uml-simple-components/value-attribute-present
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 9

Inspect the model or software implementation.

-
- - - -

Abstract test A.23: The list of values allowed in a Category component is a subset of the code space

Identifier/conf/uml-simple-components/category-constraint-valid
RequirementRequirement 23: /req/uml-simple-components/category-constraint-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 10

Inspect the model or software implementation.

-
- - - -

Abstract test A.24: A Category component always specifies a list of possible values

Identifier/conf/uml-simple-components/category-enum-defined
RequirementRequirement 24: /req/uml-simple-components/category-enum-defined
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 11

Inspect the model or software implementation.

-
- - - -

Abstract test A.25: The value of a Category component is one defined in the code space

Identifier/conf/uml-simple-components/category-value-valid
RequirementRequirement 25: /req/uml-simple-components/category-value-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 12

Inspect the model or software implementation.

-
- - - -

Abstract test A.26: The temporal reference frame is defined

Identifier/conf/uml-simple-components/time-ref-frame-defined
RequirementRequirement 26: /req/uml-simple-components/time-ref-frame-defined
Test purpose

Verify that the implementation correctly assumes the default value when the attribute is not set.

-
DescriptionExample 13

Inspect the model or software implementation.

-
- - - -

Abstract test A.27: The time of reference is expressed relative to the origin of the reference frame

Identifier/conf/uml-simple-components/time-ref-time-valid
RequirementRequirement 27: /req/uml-simple-components/time-ref-time-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 14

Inspect the model or software implementation.

-
- - - -

Abstract test A.28: The local and reference frames of a Time component are different

Identifier/conf/uml-simple-components/time-local-frame-valid
RequirementRequirement 28: /req/uml-simple-components/time-local-frame-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 15

Inspect the model or software implementation.

-
- - - -

Abstract test A.29: Values of range components satisfy the same requirements as scalar values

Identifier/conf/uml-simple-components/range-value-valid
RequirementRequirement 29: /req/uml-simple-components/range-value-valid
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 16

Inspect the model or software implementation.

-
- - - -

Abstract test A.30: CategoryRange components satisfy all requirements of a Category component

Identifier/conf/uml-simple-components/category-range-valid
RequirementRequirement 30: /req/uml-simple-components/category-range-valid
Test purpose

Verify that the target implementation has constraints that enforce the requirement.

-
DescriptionExample 17

Inspect the model or software implementation. -Apply the following conformance tests to the “CategoryRange” class:

- -
  • Abstract test A.23: /conf/uml-simple-components/category-constraint-valid

    -
  • -
  • Abstract test A.24: /conf/uml-simple-components/category-enum-defined

    -
  • -
  • Abstract test A.25: /conf/uml-simple-components/category-value-valid

    -
  • -
-
- - - -

Abstract test A.31: The code space of a CategoryRange component is well-ordered

Identifier/conf/uml-simple-components/category-range-codespace-order
RequirementRequirement 31: /req/uml-simple-components/category-range-codespace-order
Test purpose

Verify that the code space contains elements that have a specific order (either implied or defined).

-
DescriptionExample 18

Inspect instances generated by the implementation of the “CategoryRange” class, including a codepace, to verify the requirement.

-
- - - -

Abstract test A.32: TimeRange components satisfy all requirements of the Time class

Identifier/conf/uml-simple-components/time-range-valid
RequirementRequirement 32: /req/uml-simple-components/time-range-valid
Test purpose

Verify that the target implementation has constraints that enforce the requirement.

-
DescriptionExample 19

Inspect the model or software implementation. -Apply the following conformance tests to the “TimeRange” class:

- -
  • Abstract test A.26: /conf/uml-simple-components/time-ref-frame-defined

    -
  • -
  • Abstract test A.27: /conf/uml-simple-components/time-ref-time-valid

    -
  • -
  • Abstract test A.28: /conf/uml-simple-components/time-local-frame-valid

    -
  • -
-
- - - -

Abstract test A.33: The reason attribute is a URI that is resolvable to a definition

Identifier/conf/uml-simple-components/nil-reason-resolvable
RequirementRequirement 33: /req/uml-simple-components/nil-reason-resolvable
Test purpose

Verify that the target implementation allows the value of a NIL reason identifier to be either:

-
  • a well known reason code defined by OGC

    -
  • -
  • a URI that can be resolved to the textual description of a custom reason.

    -
  • -
-
DescriptionExample 20

Inspect the model or software implementation.

-
- - - -

Abstract test A.34: Values reserved for NIL reasons are compatible with the component data type

Identifier/conf/uml-simple-components/nil-value-type-coherent
RequirementRequirement 34: /req/uml-simple-components/nil-value-type-coherent
Test purpose

Verify that the target implementation has a constraint that enforces the requirement.

-
DescriptionExample 21

Inspect the model or software implementation.

-
- - - -

Abstract test A.35: The scale of constraints is the same as the scale of the component value

Identifier/conf/uml-simple-components/allowed-values-unit-coherent
RequirementRequirement 35: /req/uml-simple-components/allowed-values-unit-coherent
Test purpose

Verify that numerical constraints are expressed with the correct scale.

-
DescriptionExample 22

Inspect instances generated by the implementation of the “Quantity”, “Count” and “Time” classes, including an “AllowedValues” constraint, to verify the requirement.

-
-
- - -A.2.2.<tab/>Conformance Class: Record Components UML Package - - -

Conformance class A.3: Record Components UML Package

Identifier/conf/uml-record-components
Requirements classRequirements class 3: /req/uml-record-components
PrerequisiteConformance class A.2: /conf/uml-simple-components
Target TypeDerived Models and Software Implementations
- - - -

Abstract test A.36: Compliance with UML models defined in this package

Identifier/conf/uml-record-components/package-fully-implemented
RequirementRequirement 36: /req/uml-record-components/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
DescriptionExample 1

Inspect the model or software implementation.

-
- - - -

Abstract test A.37: Each DataRecord field has a unique name

Identifier/conf/uml-record-components/record-field-name-unique
RequirementRequirement 37: /req/uml-record-components/record-field-name-unique
Test purpose

Verify that the implementation of the “DataRecord” class has a constraint that enforces the requirement.

-
DescriptionExample 2

Inspect the model or software implementation.

-
- - - -

Abstract test A.38: Each Vector coordinate has a unique name

Identifier/conf/uml-record-components/vector-coord-name-unique
RequirementRequirement 38: /req/uml-record-components/vector-coord-name-unique
Test purpose

Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.

-
DescriptionExample 3

Inspect the model or software implementation.

-
- - - -

Abstract test A.39: The reference frame is not specified on individual coordinates of a Vector

Identifier/conf/uml-record-components/vector-component-no-ref-frame
RequirementRequirement 39: /req/uml-record-components/vector-component-no-ref-frame
Test purpose

Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.

-
DescriptionExample 4

Inspect the model or software implementation. -The “referenceFrame” attribute shall be ommited from all data components used to define coordinates of a “Vector” instance.

-
- - - -

Abstract test A.40: The axis ID is specified on all coordinates of a Vector

Identifier/conf/uml-record-components/vector-component-axis-defined
RequirementRequirement 40: /req/uml-record-components/vector-component-axis-defined
Test purpose

Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.

-
DescriptionExample 5

Inspect the model or software implementation. -The “axisID” attribute shall be present on all data components used to define coordinates of a “Vector” instance.

-
- - - -

Abstract test A.41: The local and reference frames of a Vector component are different

Identifier/conf/uml-record-components/vector-local-frame-valid
RequirementRequirement 41: /req/uml-record-components/vector-local-frame-valid
Test purpose

Verify that the implementation of the “Vector” class has a constraint that enforces the requirement.

-
DescriptionExample 6

Inspect the model or software implementation.

-
-
- - -A.2.3.<tab/>Conformance Class: Choice Components UML Package - - -

Conformance class A.4: Choice Components UML Package

Identifier/conf/uml-choice-components
Requirements classRequirements class 4: /req/uml-choice-components
PrerequisiteConformance class A.2: /conf/uml-simple-components
Target TypeDerived Models and Software Implementations
- - - -

Abstract test A.42: Compliance with UML models defined in this package

Identifier/conf/uml-choice-components/package-fully-implemented
RequirementRequirement 42: /req/uml-choice-components/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
DescriptionExample 1

Inspect the model or software implementation.

-
- - - -

Abstract test A.43: Each DataChoice item has a unique name

Identifier/conf/uml-choice-components/choice-item-name-unique
RequirementRequirement 43: /req/uml-choice-components/choice-item-name-unique
Test purpose

Verify that the implementation of the “DataChoice” class has a constraint that enforces the requirement.

-
DescriptionExample 2

Inspect the model or software implementation.

-
-
- - -A.2.4.<tab/>Conformance Class: Block Components UML Package - - -

Conformance class A.5: Block Components UML Package

Identifier/conf/uml-block-components
Requirements classRequirements class 5: /req/uml-block-components
PrerequisiteConformance class A.2: /conf/uml-simple-components
Target TypeDerived Models and Software Implementations
- - - -

Abstract test A.44: Compliance with UML models defined in this package

Identifier/conf/uml-block-components/package-fully-implemented
RequirementRequirement 44: /req/uml-block-components/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
DescriptionExample 1

Inspect the model or software implementation.

-
- - - -

Abstract test A.45: Components nested in a block component are data descriptors

Identifier/conf/uml-block-components/array-component-no-value
RequirementRequirement 45: /req/uml-block-components/array-component-no-value
Test purpose

Verify that implementations of the block component classes have a constraint that enforces the requirement.

-
DescriptionExample 2

Inspect the model or software implementation. -Check that the “DataArray”, “Matrix” and “DataStream” classes have the constraint.

-
- - - -

Abstract test A.46: An encoding method is specified whenever an encoded data block is included

Identifier/conf/uml-block-components/array-values-properly-encoded
RequirementsRequirement 46: /req/uml-block-components/array-values-properly-encoded
Requirement 48: /req/uml-block-components/datastream-array-valid
Test purpose

Verify that the implementation of block component classes have a constraint that enforces the requirement.

-
DescriptionExample 3

Inspect the model or software implementation. -Check that the “DataArray”, “Matrix” and “DataStream” classes have the constraint. -Inspect instances of these classes generated by the implementation to verify that an encoding method is specified whenever there are encoded values present.

-
- - - -

Abstract test A.47: Elements of a matrix are of scalar types or nested matrices

Identifier/conf/uml-block-components/matrix-element-type-valid
RequirementRequirement 47: /req/uml-block-components/matrix-element-type-valid
Test purpose

Verify that the implementation of the “Matrix” class has a constraint that enforces the requirement.

-
DescriptionExample 4

Inspect the model or software implementation.

-
-
- - -A.2.5.<tab/>Conformance Class: Simple Encodings UML Package - - -

Conformance class A.6: Simple Encodings UML Package

Identifier/conf/uml-simple-encodings
Requirements classRequirements class 7: /req/uml-simple-encodings
PrerequisiteConformance class A.1: /conf/core
Target TypeDerived Models and Software Implementations
- - - -

Abstract test A.48: Compliance with UML models defined in this package

Identifier/conf/uml-simple-encodings/package-fully-implemented
RequirementRequirement 52: /req/uml-simple-encodings/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
DescriptionExample

Inspect the model or software implementation.

-
-
- - -A.2.6.<tab/>Conformance Class: Advanced Encodings UML Package - - -

Conformance class A.7: Advanced Encodings UML Package

Identifier/conf/uml-advanced-encodings
Requirements classRequirements class 8: /req/uml-advanced-encodings
PrerequisiteConformance class A.6: /conf/uml-simple-encodings
Target TypeDerived Models and Software Implementations
- - - -

Abstract test A.49: Compliance with UML models defined in this package

Identifier/conf/uml-advanced-encodings/package-fully-implemented
RequirementRequirement 53: /req/uml-advanced-encodings/package-fully-implemented
Test purpose

Verify that the target implements all classes in the UML package.

-
DescriptionExample

Inspect the model or software implementation.

-
-
-
- - -A.3.<tab/>Datastream Encoding Conformance Classes - -A.3.1.<tab/>Conformance Class: General Encoding Rules - - -

Conformance class A.8: General Encoding Rules

Identifier/conf/general-encoding-rules
Requirements classRequirements class 16: /req/general-encoding-rules
Target TypeEncoded Values Instance
- - - -

Abstract test A.50: DataRecord fields and Vector coordinates are encoded recursively

Identifier/conf/general-encoding-rules/record-encoding-rule
RequirementRequirement 65: /req/general-encoding-rules/record-encoding-rule
DescriptionExample 1

Verify that the sequence of scalar values (obtained after decoding the section of the encoded data block corresponding to the “DataRecord” or “Vector”) includes values for the successive fields/coordinates in the right order.

-
- - - -

Abstract test A.51: DataChoice selected item is properly encoded

Identifier/conf/general-encoding-rules/choice-encoding-rule
RequirementRequirement 66: /req/general-encoding-rules/choice-encoding-rule
DescriptionExample 2

Verify that the sequence of scalar values (obtained after decoding the section of the encoded data block corresponding to the “DataChoice”) includes a value identifying the selected item as well as values for the item itself.

-
- - - -

Abstract test A.52: DataArray elements are encoded recursively

Identifier/conf/general-encoding-rules/array-encoding-rule
RequirementRequirement 67: /req/general-encoding-rules/array-encoding-rule
DescriptionExample 3

Verify that the sequence of scalar values obtained after decoding the section of the encoded data block corresponding to the “DataArray” includes values for the successive elements of the array.

-
- - - -

Abstract test A.53: The length of variable size arrays is encoded in the data block

Identifier/conf/general-encoding-rules/array-size-encoding-rule
RequirementRequirement 68: /req/general-encoding-rules/array-size-encoding-rule
DescriptionExample 4

Verify that the sequence of values obtained after decoding the section of the encoded data block corresponding to a variable size “DataArray” includes a value specifying the size of the array.

-
-
- - -A.3.2.<tab/>Conformance Class: Text Encoding Rules - - -

Conformance class A.9: Text Encoding Rules

Identifier/conf/text-encoding-rules
Requirements classRequirements class 18: /req/text-encoding-rules
PrerequisiteConformance class A.8: /conf/general-encoding-rules
Target TypeEncoded Values Instance
- - - -

Abstract test A.54: Compliance with ABNF grammar

Identifier/conf/text-encoding-rules/abnf-syntax-valid
Requirement/req/text-encoding-rules/abnf-syntax-valid
DescriptionExample 1

Verify that the text encoded data block is correct with respect to the ABNF grammar corresponding to the particular dataset (The complete ABNF grammar of the dataset should be dynamically constructed from the ABNF snippets provided in the specification).

-
- - - -

Abstract test A.55: Separator characters are well chosen

Identifier/conf/text-encoding-rules/separators-valid
Requirement/req/text-encoding-rules/separators-valid
DescriptionExample 2

Verify that the values encoded in the data block never include the reserved separator characters. This can be detected by looking for invalid or superfluous values.

-
- - - -

Abstract test A.56: Special flags are inserted before optional component values

Identifier/conf/text-encoding-rules/optional-field-marker-present
Requirement/req/text-encoding-rules/optional-field-marker-present
DescriptionExample 3

Verify that the sequence of values corresponding to the optional field starts with the ‘Y’ or ‘N’ flag.

-
- - - -

Abstract test A.57: The name of a selected choice item is inserted in the stream

Identifier/conf/text-encoding-rules/choice-selection-marker-valid
Requirement/req/text-encoding-rules/choice-selection-marker-valid
DescriptionExample 4

Verify that the sequence of values corresponding to the “DataChoice” starts with a character string matching the name of one item of the choice descriptor.

-
-
- - -A.3.3.<tab/>Conformance Class: Binary Encoding Rules - - -

Conformance class A.10: Binary Encoding Rules

Identifier/conf/binary-encoding-rules
Requirements classRequirements class 19: /req/binary-encoding-rules
PrerequisiteConformance class A.8: /conf/general-encoding-rules
Target TypeEncoded Values Instance
- - - -

Abstract test A.58: Compliance with ABNF grammar

Identifier/conf/binary-encoding-rules/abnf-syntax-valid
RequirementRequirement 82: /req/binary-encoding-rules/abnf-syntax-valid
DescriptionExample 1

Verify that the binary encoded data block is correct with respect to the ABNF grammar of the particular dataset (The complete ABNF grammar of the dataset should be dynamically constructed from the ABNF snippets provided in the specification).

-
- - - -

Abstract test A.59: Data types are encoded as specified in this standard

Identifier/conf/binary-encoding-rules/type-encoding-valid
RequirementRequirement 83: /req/binary-encoding-rules/type-encoding-valid
DescriptionExample 2

Verify that valid and realistic scalar values are obtained when the binary data block is parsed by extracting the number of bits specified in the table and decoding the resulting bytes in the order specified by the “byteOrder” attribute. When the encoded data and the encoding parameters are not consistent, abberant values (such as -65502 for a temperature field, etc…) are usually obtained, which can be easily detected.

-
- - - -

Abstract test A.60: Base64 encoding is implemented as defined by IETF

Identifier/conf/binary-encoding-rules/base64-translation-applied
RequirementRequirement 84: /req/binary-encoding-rules/base64-translation-applied
DescriptionExample 3
  • Verify that only characters allowed by base64 encoding are used in the encoded data content.

    -
  • -
  • Verify that the data block can be properly parsed after the base64 data is decoded into a raw binary data stream.

    -
  • -
-
- - - -

Abstract test A.61: Special flags are inserted before optional component values

Identifier/conf/binary-encoding-rules/optional-field-marker-present
RequirementRequirement 85: /req/binary-encoding-rules/optional-field-marker-present
DescriptionExample 4
  • Verify that any optional field is preceded by the a 1-byte ASCII character with value ‘Y’ or ‘N’.

    -
  • -
  • Verify that the actual field value is only present if the flag has the ‘Y’ value.

    -
  • -
-
- - - -

Abstract test A.62: The name of a selected choice item is inserted in the stream

Identifier/conf/binary-encoding-rules/choice-selection-marker-valid
RequirementRequirement 86: /req/binary-encoding-rules/choice-selection-marker-valid
DescriptionExample 5
  • Verify that the sequence of bytes corresponding to the “DataChoice” starts with a byte value that is greater or equal to 0 and less than the total number of items defined in the choice descriptor.

    -
  • -
  • Verify that the parsed index value corresponds to the proper item in the choice descriptor.

    -
  • -
-
-
-
-
-<strong>Annex B</strong><br/>(informative)<br/><strong>Examples</strong> - -B.1.<tab/>Text Encoding Rules Examples - -B.1.1.<tab/>DataArray with inline values (curve) -

The following example shows how elements of an array defined as a “DataRecord” can be encoded inline with the text method:

- -<swe:DataArray definition="http://sweet.jpl.nasa.gov/2.0/mathFunction.owl#Function"> - <swe:description>Measurement error vs. temperature</swe:description> - <swe:elementCount> - <swe:Count> - <swe:value>5</swe:value> - </swe:Count> - </swe:elementCount> - <swe:elementType name="point"> - <swe:DataRecord> - <swe:label>Error vs. Temperature</swe:label> - <swe:field name="temp"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/physThermo.owl#Temperature"> - <swe:label>Temperature</swe:label> - <swe:uom code="Cel"/> - </swe:Quantity> - </swe:field> - <swe:field name="error"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/sciUncertainty.owl#Error"> - <swe:label>Relative Error</swe:label> - <swe:uom code="%"/> - </swe:Quantity> - </swe:field> - </swe:DataRecord> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator=" " tokenSeparator=","/> - </swe:encoding> - <swe:values>0,5 10,2 50,2 80,5 100,15</swe:values> -</swe:DataArray> - - -

In this example, each element consists of a record of two values. The array element structure also corresponds to one block so that tuples are separated by block separators (here the ‘,’ character). Since the array is of size 5, there are 5 tuples listed sequentially in the data block, each one composed of the two values of the data record separated by the token separator. The pattern is “temp,error temp,error …” since values have to be listed in the same order as the fields.

-
- - -B.1.2.<tab/>Datastream with records (weather data) -

The following snippet defines a datastream with an element of type record:

- -<swe:DataStream> - <swe:label>Weather Data</swe:label> - <swe:elementType name="weatherData"> - <swe:DataRecord> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime" - referenceFrame="http://www.opengis.net/def/trs/BIPM/0/UTC"> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="temp"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> - <swe:label>Air Temperature</swe:label> - <swe:uom code="Cel"/> - </swe:Quantity > - </swe:field> - <swe:field name="press"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_pressure_at_mean_sea_level"> - <swe:label>Atmospheric Pressure</swe:label> - <swe:uom code="HPa"/> - </swe:Quantity > - </swe:field> - <swe:field name="windSpeed"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_speed"> - <swe:label>Wind Speed</swe:label> - <swe:uom code="km/h"/> - </swe:Quantity> - </swe:field> - <swe:field name="windDir"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_to_direction"> - <swe:label>Wind Direction</swe:label> - <swe:uom code="deg"/> - </swe:Quantity> - </swe:field> - </swe:DataRecord> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=","/> - </swe:encoding> -</swe:DataStream> - - -

The datastream records are encoded using the Text encoding method as shown below:

- -2023-03-20T15:40:00Z,15.3,1014,3.5,56.0 -2023-03-20T15:45:00Z,15.4,1015,5.6,123.0 -2023-03-20T15:50:00Z,15.8,1014,13.2,34.0 -... - -
- - -B.1.3.<tab/>Datastream with records and optional fields (navigation data) -

The following snippet defines a datastream with an element of type record that contains optional fields:

- -<swe:DataStream> - <swe:label>Aircraft Navigation</swe:label> - <swe:elementType name="navData"> - <swe:DataRecord> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime" - referenceFrame="http://www.opengis.net/def/trs/OGC/0/GPS"> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="speed"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/humanTransportAir.owl#GroundSpeed"> - <swe:uom code="m/s"/> - </swe:Quantity > - </swe:field> - <swe:field name="location"> - <swe:Vector optional="true" referenceFrame="http://www.opengis.net/def/crs/EPSG/0/4979"> - <swe:coordinate name="lat"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/spaceCoordinates.owl#Latitude" axisID="Lat"> - <swe:uom code="deg"/> - </swe:Quantity> - </swe:coordinate> - <swe:coordinate name="lon"> - <swe:Quantity definition=" http://sweet.jpl.nasa.gov/2.0/spaceCoordinates.owl#Longitude" axisID="Long"> - <swe:uom code="deg"/> - </swe:Quantity> - </swe:coordinate> - <swe:coordinate name="alt"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/spaceExtent.owl#Altitude" axisID="h"> - <swe:uom code="m"/> - </swe:Quantity> - </swe:coordinate> - </swe:Vector> - </swe:field> - </swe:DataRecord> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=","/> - </swe:encoding> -</swe:DataStream> - - -

The datastream records are encoded using the Text encoding method as shown below:

- -2007-10-23T15:46:12Z,15.3,Y,45.3,-90.5,311 -2007-10-23T15:46:22Z,25.3,N -2007-10-23T15:46:32Z,20.6,Y,45.3,-90.6,312 -2007-10-23T15:46:52Z,18.9,Y,45.4,-90.6,315 -2007-10-23T15:47:02Z,22.3,N -... - - -

In this example, the whole location “Vector” is marked as optional and thus the coordinate values are only included when the optional flag is set to ‘Y’ in the stream. Field values in each block have to be listed in the same order as the field properties in the record definition thus following the “time,speed,Y,lat,lon,alt” or “time,speed,N” pattern depending on whether or not the location is omitted.

-
- - -B.1.4.<tab/>Datastream with choice (navigation data) -

This is illustrated by the following example:

- -<swe:DataStream> - <swe:elementType name="message"> - <swe:DataChoice> - <swe:item name="TEMP"> - <swe:DataRecord> - <swe:label>Temperature Measurement</swe:label> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="temp"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/air_temperature"> - <swe:uom code="Cel"/> - </swe:Quantity> - </swe:field> - </swe:DataRecord> - </swe:item> - <swe:item name="WIND"> - <swe:DataRecord> - <swe:label>Wind Measurement</swe:label> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="wind_speed"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_speed"> - <swe:uom code="km/h"/> - </swe:Quantity> - </swe:field> - <swe:field name="wind_dir"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/wind_to_direction"> - <swe:uom code="deg"/> - </swe:Quantity> - </swe:field> - </swe:DataRecord> - </swe:item> - </swe:DataChoice> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=","/> - </swe:encoding> -</swe:DataStream> - - -

The datastream records are encoded using the Text encoding method as shown below:

- -TEMP,2009-05-23T19:36:15Z,25.5 -TEMP,2009-05-23T19:37:15Z,25.6 -WIND,2009-05-23T19:37:17Z,56.3,226.3 -TEMP,2009-05-23T19:38:15Z,25.5 -... - - -

This datastream interleaves different types of messages separated by the block separator character. The element type is a “DataChoice” which means that each encoded block is composed of the item name ‘TEMP’ or ‘WIND’, followed by values of the item. This example also demonstrates that items of a choice can be of different types and length.

-
- - -B.1.5.<tab/>Fixed size 2D array (stress matrix) -

The following example illustrates how values of a fixed size 3×3 stress matrix can be text encoded inline:

- -<swe:Matrix definition="http://sweet.jpl.nasa.gov/2.0/physPressure.owl#Stress"> - <swe:elementCount> - <swe:Count> - <swe:value>3</swe:value> - </swe:Count> - </swe:elementCount> - <swe:elementType name="row"> - <swe:Matrix definition="http://sweet.jpl.nasa.gov/2.0/info.owl#Row"> - <swe:elementCount> - <swe:Count> - <swe:value>3</swe:value> - </swe:Count> - </swe:elementCount> - <swe:elementType name="coef"> - <swe:Quantity definition="http://sweet.jpl.nasa.gov/2.0/mathVector.owl#Coordinate"> - <swe:uom code="MPa"/> - </swe:Quantity> - </swe:elementType> - </swe:Matrix> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator=" " tokenSeparator=","/> - </swe:encoding> - <swe:values>0.36,0.48,-0.8 -0.8,0.6,0.0 0.48,0.64,0.6</swe:values> -</swe:Matrix> - - -

Note that elements of the outer array (i.e. a matrix is a special kind of array) are separated by block separators (i.e. each block surrounded by spaces corresponds to one row of the matrix) while the inner array elements are separated by token separators.

-
- - -B.1.6.<tab/>Datastream of variable size 1D arrays (profile series) -

The following example shows how SWE Common can be used to encode a series of irregular length profiles by using a variable size array:

- -<swe:DataStream> - <swe:elementType name="profileData"> - <swe:DataRecord> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime"> - <swe:label>Sampling Time</swe:label> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="profilePoints"> - <swe:DataArray definition="http://sweet.jpl.nasa.gov/2.0/info.owl#Profile"> - <swe:elementCount> - <swe:Count/> - </swe:elementCount> - <swe:elementType name="point"> - <swe:DataRecord> - <swe:field name="depth"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter/depth"> - <swe:label>Sampling Point Vertical Location</swe:label> - <swe:uom code="m"/> - </swe:Quantity> - </swe:field> - <swe:field name="salinity"> - <swe:Quantity definition="http://mmisw.org/ont/cf/parameter#sea_water_salinity"> - <swe:label>Salinity</swe:label> - <swe:uom code="[ppth]"/> - </swe:Quantity> - </swe:field> - </swe:DataRecord> - </swe:elementType> - </swe:DataArray> - </swe:field> - </swe:DataRecord> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator="@@&#10;" tokenSeparator=","/> - </swe:encoding> -</swe:DataStream> - - -

The datastream records are encoded using the Text encoding method as shown below:

- -2005-05-16T21:47:12Z,5,0,45,10,20,20,30,30,35,40,40@@ -2005-05-16T22:43:05Z,4,0,45,10,20,20,30,30,35@@ -2005-05-16T23:40:52Z,5,0,45,10,20,20,30,30,35,40,40 -... - - -

The example shows data for 3 profiles with a variable number of measurements along the vertical dimension. The number of measurements is indicated in the encoded data block by a number inserted after the timestamp, and before the measurements themselves. Since the array is itself the element of a “DataStream”, elements of the array are separated by token separators.

-
- - -B.1.7.<tab/>Datastream with geometry (feature detection) -

The following snippet is an example of datastream that contains a geometry. Here, each datastream record represents a feature detected in a video stream, and is composed of a timestamp, a scalar field and the geometry of the geolocated feature.

- -<swe:DataStream> - <swe:label>Feature Detections</swe:label> - <swe:elementType name="detection"> - <swe:DataRecord> - <swe:field name="time"> - <swe:Time definition="http://www.opengis.net/def/property/OGC/0/SamplingTime" - referenceFrame="http://www.opengis.net/def/trs/OGC/0/GPS"> - <swe:uom xlink:href="http://www.opengis.net/def/uom/ISO-8601/0/Gregorian"/> - </swe:Time> - </swe:field> - <swe:field name="type"> - <swe:Category definition="http://www.opengis.net/def/featureType"> - <swe:codeSpace xlink:href="http://x-myorg.net/def/VehicleTypes"/> - </swe:Category> - </swe:field> - <swe:field name="geom"> - <swe:Geometry definition="http://www.opengis.net/def/property/OGC/0/SamplingTime" srs="http://www.opengis.net/def/crs/EPSG/0/4326"> - <swe:constraint> - <swe:AllowedGeometries> - <swe:geomType>Point</swe:geomType> - <swe:geomType>Polygon</swe:geomType> - </swe:AllowedGeometries> - </swe:constraint> - </swe:Geometry> - </swe:field> - </swe:DataRecord> - </swe:elementType> - <swe:encoding> - <swe:TextEncoding blockSeparator="&#10;" tokenSeparator=";"/> - </swe:encoding> -</swe:DataStream> - - -

The datastream records are encoded using the Text encoding method as shown below:

- -2007-10-23T15:46:12Z;Car;POINT(-86.3254 35.4812) -2007-10-23T15:49:03Z;Truck;POLYGON((-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812)) -2007-10-23T15:56:45Z;Bus;POLYGON((-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812)) -... - -
-
- - -B.2.<tab/>XML Encoding Rules Examples -

The following examples build on the ones provided in the Text Encoding Rules Examples section. The datastream descriptions are kept the same, except that the encoding method would have to be changed to:

- -<swe:encoding> - <swe:XMLEncoding/> -</swe:encoding> - - -

In the following sections, encoded values were kept identical to the ones used in the text encoding section, in order to facilitate comparison.

- - -B.2.1.<tab/>Datastream with records (weather data) -

This example is based on the same datastream description as the one provided in Annex B.1.2.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -<swe:values xmlns:ns="http://www.myorg.com/datasets/id"> - <ns:weatherData> - <ns:time>2023-03-20T15:40:00Z</ns:time> - <ns:temp>15.3</ns:temp> - <ns:press>1014</ns:press> - <ns:windSpeed>3.5</ns:windSpeed> - <ns:windDir>56.0</ns:windDir> - </ns:weatherData> - <ns:weatherData> - <ns:time>2023-03-20T15:45:00Z</ns:time> - <ns:temp>15.4</ns:temp> - <ns:press>1015</ns:press> - <ns:windSpeed>5.6</ns:windSpeed> - <ns:windDir>123.0</ns:windDir> - </ns:weatherData> - <ns:weatherData> - <ns:time>2023-03-20T15:50:00Z</ns:time> - <ns:temp>15.8</ns:temp> - <ns:press>1014</ns:press> - <ns:windSpeed>13.2</ns:windSpeed> - <ns:windDir>34.0</ns:windDir> - </ns:weatherData> - ... -</swe:values> - -
- - -B.2.2.<tab/>Datastream with records and optional fields (navigation data) -

This example is based on the same datastream description as the one provided in Annex B.1.3.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -<swe:values xmlns:ns="urn:myorg:dataset:X156822"> - <ns:navData> - <ns:time>2007-10-23T15:46:12Z</ns:time> - <ns:speed>15.3</ns:speed> - <ns:location> - <ns:lat>45.3</ns:lat> - <ns:lon>-90.5</ns:lon> - <ns:alt>311</ns:alt> - </ns:location> - </ns:navData> - <ns:navData> - <ns:time>2007-10-23T15:46:22Z</ns:time> - <ns:speed>25.3</ns:speed> - </ns:navData> - <ns:navData> - <ns:time>2007-10-23T15:46:32Z</ns:time> - <ns:speed>20.6</ns:speed> - <ns:location> - <ns:lat>45.3</ns:lat> - <ns:lon>-90.6</ns:lon> - <ns:alt>312</ns:alt> - </ns:location> - </ns:navData> - ... -</swe:values> - - -

Notice that the optional ‘location’ field in the second stream element has been completely omitted.

-
- - -B.2.3.<tab/>Datastream with choice (navigation data) -

This example is based on the same datastream description as the one provided in Annex B.1.4.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -<swe:values xmlns:ns="urn:myorg:dataset:DC4578"> - <ns:message> - <ns:TEMP> - <ns:time>2009-05-23T19:36:15Z</ns:time> - <ns:temp>25.5</ns:temp> - </ns:TEMP> - </ns:message> - <ns:message> - <ns:TEMP> - <ns:time>2009-05-23T19:37:15Z</ns:time> - <ns:temp>25.6</ns:temp> - </ns:TEMP> - </ns:message> - <ns:message> - <ns:WIND> - <ns:time>2009-05-23T19:37:17Z</ns:time> - <ns:wind_speed>56.3</ns:wind_speed> - <ns:wind_dir>226.3</ns:wind_dir> - </ns:WIND> - </ns:message> - <ns:message> - <ns:TEMP> - <ns:time>2009-05-23T19:38:15Z</ns:time> - <ns:temp>25.5</ns:temp> - </ns:TEMP> - </ns:message> - ... -</swe:values> - -
- - -B.2.4.<tab/>Datastream of variable size 1D arrays (profile series) -

This example is based on the same datastream description as the one provided in Annex B.1.6.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -<swe:values xmlns:ns="urn:myorg:dataset:PS3658"> - <ns:profileData> - <ns:time>2005-05-16T21:47:12Z</ns:time> - <ns:profilePoints elementCount="5"> - <ns:point> - <ns:depth>0</ns:depth> - <ns:salinity>45</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>10</ns:depth> - <ns:salinity>20</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>20</ns:depth> - <ns:salinity>30</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>30</ns:depth> - <ns:salinity>35</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>40</ns:depth> - <ns:salinity>40</ns:salinity> - </ns:point> - </ns:profilePoints> - </ns:profileData> - <ns:profileData> - <ns:time>2005-05-16T22:43:05Z</ns:time> - <ns:profilePoints elementCount="4"> - <ns:point> - <ns:depth>0</ns:depth> - <ns:salinity>45</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>10</ns:depth> - <ns:salinity>20</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>20</ns:depth> - <ns:salinity>30</ns:salinity> - </ns:point> - <ns:point> - <ns:depth>30</ns:depth> - <ns:salinity>35</ns:salinity> - </ns:point> - </ns:profilePoints> - </ns:profileData> - ... -</swe:values> - - -

This example shows how the array size is specified on the ‘profilePoints’ element corresponding to each nested array, and how element local names correspond to the “name” attributes of each component’s parent property.

-
- - -B.2.5.<tab/>Datastream with geometry (feature detection) -

This example is based on the same datastream description as the one provided in Annex B.1.7.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -<swe:values xmlns:ns="urn:myorg:dataset:X151451" xmlns:gml="http://www.opengis.net/gml/3.2"> - <ns:detection> - <ns:time>2007-10-23T15:46:12Z</ns:time> - <ns:type>Car</ns:type> - <ns:geom> - <gml:Polygon srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> - <gml:exterior> - <gml:LinearRing> - <gml:posList srsDimension="2">-86.3254 35.4812 -86.3253 35.4812 -86.3253 35.4811 -86.3254 35.4811 -86.3254 35.4812</gml:posList> - </gml:LinearRing> - </gml:exterior> - </gml:Polygon> - </ns:geom> - </ns:detection> - <ns:detection> - <ns:time>2007-10-23T15:49:03Z</ns:time> - <ns:type>Truck</ns:type> - <ns:geom> - <gml:Polygon srsName="http://www.opengis.net/def/crs/EPSG/0/4326" > - <gml:exterior> - <gml:LinearRing> - <gml:posList srsDimension="2">-86.3254 35.4812 -86.3253 35.4812 -86.3253 35.4811 -86.3254 35.4811 -86.3254 35.4812</gml:posList> - </gml:LinearRing> - </gml:exterior> - </gml:Polygon> - </ns:geom> - </ns:detection> - <ns:detection> - <ns:time>2007-10-23T15:56:45Z</ns:time> - <ns:type>Bus</ns:type> - <ns:geom> - <gml:Polygon srsName="http://www.opengis.net/def/crs/EPSG/0/4326"> - <gml:exterior> - <gml:LinearRing> - <gml:posList srsDimension="2">-86.3254 35.4812 -86.3253 35.4812 -86.3253 35.4811 -86.3254 35.4811 -86.3254 35.4812</gml:posList> - </gml:LinearRing> - </gml:exterior> - </gml:Polygon> - </ns:geom> - </ns:detection> - ... -</swe:values> - -
-
- - -B.3.<tab/>JSON Encoding Rules Examples -

The following examples build on the ones provided in the Text Encoding Rules Examples section. The datastream descriptions are kept the same, except that the encoding method would have to be changed to:

- -<swe:encoding> - <swe:JSONEncoding/> -</swe:encoding> - - -

In the following sections, encoded values were kept identical to the ones used in the text encoding section, in order to facilitate comparison.

- - -B.3.1.<tab/>DataArray with inline values (curve) -

This example is based on the same “DataArray” description as the one provided in Annex B.1.1.

- -

The equivalent JSON description for this “DataArray” is provided below:

- -{ - "type": "DataArray", - "definition": "http://sweet.jpl.nasa.gov/2.0/mathFunction.owl#Function" - "description": "Measurement error vs. temperature", - "elementCount": { - "type": "Count", - "value": 5 - }, - "elementType": { - "name": "point", - "type": "DataRecord", - "label": "Error vs. Temperature", - "fields": [ - { - "name": "temp", - "type": "Quantity", - "definition": "http://sweet.jpl.nasa.gov/2.0/physThermo.owl#Temperature", - "label": "Temperature", - "uom": { "code": "Cel" } - }, - { - "name": "error", - "type": "Quantity", - "definition": "http://sweet.jpl.nasa.gov/2.0/sciUncertainty.owl#Error", - "label": "Relative Error", - "uom": { "code": "%" } - } - ] - }, - "values": [[0,5], [10,2], [50,2], [80,5], [100,15]] -} - -
- - -B.3.2.<tab/>Datastream with records (weather data) -

This example is based on the same datastream description as the one provided in Annex B.1.2.

- -

The following snippet shows how this datastream records are encoded using the JSON encoding method:

- -[ - { - "time": "2023-03-20T15:40:00Z", - "temp": 15.3, - "press": 1014, - "windSpeed": 3.5, - "windDir": 56.0 - }, - { - "time": "2023-03-20T15:45:00Z", - "temp": 15.4, - "press": 1015, - "windSpeed": 5.6, - "windDir": 123.0 - }, - { - "time": "2023-03-20T15:50:00Z", - "temp": 15.8, - "press": 1014, - "windSpeed": 13.2, - "windDir": 34.0 - }, - ... -] - -
- - -B.3.3.<tab/>Datastream with records and optional fields (navigation data) -

This example is based on the same datastream description as the one provided in Annex B.1.3.

- -

The following snippet shows how this datastream records are encoded using the XML encoding method:

- -[ - { - "time": "2007-10-23T15:46:12Z", - "speed": 15.3, - "location": { - "lat": 45.3, - "lon": -90.5, - "alt": 311 - } - }, - { - "time": "2007-10-23T15:46:22Z", - "speed": 25.3, - "location": null - }, - { - "time": "2007-10-23T15:46:32Z", - "speed": 20.6, - "location": { - "lat": 45.3, - "lon": -90.6, - "alt": 312 - } - }, - ... -] - -
- - -B.3.4.<tab/>Datastream with choice (navigation data) -

This example is based on the same datastream description as the one provided in Annex B.1.4.

- -

The following snippet shows how this datastream records are encoded using the JSON encoding method:

- -[ - { - "TEMP": { - "time": "2009-05-23T19:36:15Z", - "temp": 25.5 - } - }, - { - "TEMP": { - "time": "2009-05-23T19:37:15Z", - "temp": 25.6 - } - }, - { - "WIND": { - "time": "2009-05-23T19:37:17Z", - "wind_speed": 56.3, - "wind_dir": 226.3 - } - }, - { - "TEMP": { - "time": "2009-05-23T19:38:15Z", - "temp": 25.5 - } - }, - ... -] - -
- - -B.3.5.<tab/>Fixed size 2D array (stress matrix) -

This example is based on the same “Matrix” description as the one provided in Annex B.1.5.

- -

The equivalent JSON description for this “Matrix” is provided below:

- -{ - "type": "Matrix", - "definition": "http://sweet.jpl.nasa.gov/2.0/physPressure.owl#Stress" - "elementCount": { - "type": "Count", - "value": 3 - }, - "elementType": { - "name": "row", - "type": "Matrix", - "elementCount": { - "type": "Count", - "value": 3 - }, - "elementType": { - "name": "coef", - "type": "Quantity", - "definition": "http://sweet.jpl.nasa.gov/2.0/mathVector.owl#Coordinate", - "uom": { "code": "MPa" } - } - }, - "values": [[0.36,0.48,-0.8], [-0.8,0.6,0.0], [0.48,0.64,0.6]] -} - -
- - -B.3.6.<tab/>Datastream of variable size 1D arrays (profile series) -

This example is based on the same datastream description as the one provided in Annex B.1.6.

- -

The following snippet shows how this datastream records are encoded using the JSON encoding method:

- -[ - { - "time": "2005-05-16T21:47:12Z", - "profilePoints": [ - { "depth": 0, "salinity": 45 }, - { "depth": 10, "salinity": 20 }, - { "depth": 20, "salinity": 30 }, - { "depth": 30, "salinity": 35 }, - { "depth": 40, "salinity": 40 } - ] - }, - { - "time": "2005-05-16T22:43:05Z", - "profilePoints": [ - { "depth": 0, "salinity": 45 }, - { "depth": 10, "salinity": 20 }, - { "depth": 20, "salinity": 30 }, - { "depth": 30, "salinity": 35 } - ] - }, - { - "time": "2005-05-16T23:40:52Z", - "profilePoints": [ - { "depth": 0, "salinity": 45 }, - { "depth": 10, "salinity": 20 }, - { "depth": 20, "salinity": 30 }, - { "depth": 30, "salinity": 35 }, - { "depth": 40, "salinity": 40 } - ] - }, - ... -] - -
- - -B.3.7.<tab/>Datastream with geometry (feature detection) -

This example is based on the same datastream description as the one provided in Annex B.1.7.

- -

The following snippet shows how this datastream records are encoded using the JSON encoding method:

- -[ - { - "time": "2007-10-23T15:46:12Z", - "type": "Car", - "geom": { - "type": "Point", - "coordinates": [-86.3254, 35.4812] - } - }, - { - "time": "2007-10-23T15:49:03Z", - "type": "Truck", - "geom": { - "type": "Polygon", - "coordinates": [ - [-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812] - ] - } - }, - { - "time": "2007-10-23T15:56:45Z", - "type": "Bus", - "geom": { - "type": "Polygon", - "coordinates": [ - [-86.3254 35.4812,-86.3253 35.4812,-86.3253 35.4811,-86.3254 35.4811,-86.3254 35.4812] - ] - } - }, - ... -] - -
-
-
-<strong>Annex C</strong><br/>(informative)<br/><strong>Relationship with other ISO models</strong> - -C.1.<tab/>Feature model -

SWE “Records” can sometimes be seen as feature data from which GML feature representations could be derived. Even if it is true that a SWE “Record” contains values of feature properties, it does not always represent an object like a “Feature” does. The “Record” is simply a logical collection of fields that may be grouped together for a different reason than the fact that they all represent properties of the same object.

- -

The “Feature” model is a higher level model that is used to regroup property values inside the objects that they correspond to, as well as associate a meaning to the object itself.

- -

A good example is a set of weather observations obtained from different sensors that may be grouped into a single “Record” in SWE Common, but which does not constitute a feature in the GIS sense.

-
- - -C.2.<tab/>Coverage model -

SWE “Arrays” can sometimes be interpreted as coverage range data or grid data. However, SWE data arrays are lower level data types and don’t constitute a “Coverage” in themselves. The “Coverage” model described in OGC Abstract Topic 6 (OGC 07-011) can be used on top of the SWE “Array” model (which only provides means for describing and encoding the data), in order to provide a stronger link between range data and domain definition.

- -

Additionally, sensor descriptions given in SensorML (and thus using the SWE Common model) can be used to define a geo-referencing transformation that can be associated with a coverage via the same model.

-
-
-<strong>Annex D</strong><br/>(informative)<br/><strong>Revision History</strong> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
DateReleaseEditorPrimary clauses modifiedDescription
2008-08-202.0 draftAlexandre RobinAllInitial draft version
2008-10-302.0 draftIngo SimonisAllGeneral revision
2009-10-302.0 draftAlexandre RobinAllDraft candidate standard
2009-11-042.0 draftPeter TaylorClauses 6 and 7Additional examples, minor edits
2009-11-102.0 draftAlexandre RobinAllGeneral revision, added section 8
2010-01-152.0 draftAlexandre RobinAllClarifications in requirements
2010-03-102.0 finalAlexandre RobinAllCorrections following RFC comments
2023-03-072.1 draftAlexandre RobinAllConversion to AsciiDoc / Metanorma
2023-03-082.1 draftAlexandre RobinClauses 7,8,9Removed requirements that were redundant with dependencies
2023-03-162.1 draftAlexandre RobinClause 7,8,9Added Geometry class
2023-03-212.1 draftAlexandre RobinClause 9Added JSON datastream encoding rules
2023-03-212.1 draftAlexandre RobinClause 9Clarified use of media types
2024-04-293.0 draftAlexandre RobinAllRefactored to v3.0, removed XML encoding sections
-
-Bibliography -

TODONOTE

The TC has approved Springer LNCS as the official document citation type.

- -

Springer LNCS is widely used in technical and computer science journals and other publications

- - -

– Actual References:

- -

[n] Journal: Author Surname, A.: Title. Publication Title. Volume number, Issue number, Pages Used (Year Published)

-

- OGC: OGC Testbed 12 Annex B: Architecture (2015).[1] - OGCTB12 - 12 -[1] - - - - -
-