1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363
|
<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:gml="http://www.opengis.net/gml" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
attributeFormDefault="unqualified" version="3.1.1 2010-01-28">
<annotation>
<appinfo source="urn:opengis:specification:gml:schema-xsd:valueObjects:3.1.1">valueObjects.xsd</appinfo>
<documentation>GML conformant schema for Values in which the
* scalar Value types and lists have their values recorded in simpleContent elements
* complex Value types are built recursively
GML is an OGC Standard.
Copyright (c) 2001,2005,2010 Open Geospatial Consortium, Inc. All Rights Reserved.
To obtain additional rights of use, visit http://www.opengeospatial.org/legal/ .
</documentation>
</annotation>
<!-- ====================================================================== -->
<!-- geometry and temporal included so that _Geometry and _TimeObject can be added to Value choice group -->
<include schemaLocation="geometryBasic0d1d.xsd"/>
<include schemaLocation="temporal.xsd"/>
<!-- ====================================================================== -->
<group name="Value">
<annotation>
<documentation>Utility choice group which unifies generic Values defined in this schema document with
Geometry and Temporal objects and the Measures described above,
so that any of these may be used within aggregate Values.</documentation>
</annotation>
<choice>
<!-- <element ref="gml:_Value"/> -->
<group ref="gml:ValueObject"/>
<element ref="gml:_Object"/>
<!-- <element ref="gml:_Geometry"/>
<element ref="gml:_TimeObject"/> -->
<element ref="gml:Null"/>
</choice>
</group>
<!-- ====================================================================== -->
<group name="ValueObject">
<choice>
<group ref="gml:ScalarValue"/>
<group ref="gml:ScalarValueList"/>
<group ref="gml:ValueExtent"/>
<element ref="gml:CompositeValue"/>
</choice>
</group>
<!-- ======================================================================
<element name="_Value" abstract="true" substitutionGroup="gml:_Object">
<annotation>
<documentation>Abstract element which acts as the head of a substitution group which contains _ScalarValue, _ScalarValueList and CompositeValue and (transitively) the elements in their substitution groups. This element may be used in an application schema as a variable, so that in an XML instance document any member of its substitution group may occur.</documentation>
</annotation>
</element> -->
<!-- ====================================================================== -->
<!-- ================== Scalar Values =========================
<element name="_ScalarValue" abstract="true" substitutionGroup="gml:_Value">
<annotation>
<documentation>Abstract element which acts as the head of a substitution group which contains Boolean, Category, Count and Quantity, and (transitively) the elements in their substitution groups. This element may be used in an application schema as a variable, so that in an XML instance document any member of its substitution group may occur.</documentation>
</annotation>
</element> -->
<group name="ScalarValue">
<choice>
<element ref="gml:Boolean"/>
<element ref="gml:Category"/>
<element ref="gml:Quantity"/>
<element ref="gml:Count"/>
</choice>
</group>
<!-- ======================================================================
<element name="_ScalarValueList" abstract="true" substitutionGroup="gml:_Value">
<annotation>
<documentation>Abstract element which acts as the head of a substitution group which contains the compact encodings BooleanList, CategoryList, CountList and QuantityList, and (transitively) the elements in their substitution groups. This element may be used in an application schema as a variable, so that in an XML instance document any member of its substitution group may occur.</documentation>
</annotation>
</element> -->
<group name="ScalarValueList">
<choice>
<element ref="gml:BooleanList"/>
<element ref="gml:CategoryList"/>
<element ref="gml:QuantityList"/>
<element ref="gml:CountList"/>
</choice>
</group>
<!-- ====================================================================== -->
<!-- ======================= Boolean ========================
<element name="Boolean" type="boolean" substitutionGroup="gml:_ScalarValue"> -->
<element name="Boolean" type="boolean">
<annotation>
<documentation>A value from two-valued logic, using the XML Schema boolean type. An instance may take the values {true, false, 1, 0}.</documentation>
</annotation>
</element>
<!--
<element name="BooleanList" type="gml:booleanOrNullList" substitutionGroup="gml:_ScalarValueList"> -->
<element name="BooleanList" type="gml:booleanOrNullList">
<annotation>
<documentation>XML List based on XML Schema boolean type. An element of this type contains a space-separated list of boolean values {0,1,true,false}</documentation>
</annotation>
</element>
<!-- ====================================================================== -->
<!-- ======================= Category ==========================
<element name="Category" type="gml:CodeType" substitutionGroup="gml:_ScalarValue"> -->
<element name="Category" type="gml:CodeType">
<annotation>
<documentation>A term representing a classification. It has an optional XML attribute codeSpace, whose value is a URI which identifies a dictionary, codelist or authority for the term.</documentation>
</annotation>
</element>
<!--
<element name="CategoryList" type="gml:CodeOrNullListType" substitutionGroup="gml:_ScalarValueList"> -->
<element name="CategoryList" type="gml:CodeOrNullListType">
<annotation>
<documentation>A space-separated list of terms or nulls. A single XML attribute codeSpace may be provided, which authorises all the terms in the list.</documentation>
</annotation>
</element>
<!-- ====================================================================== -->
<!-- =========================== Quantity ============================
<element name="Quantity" type="gml:MeasureType" substitutionGroup="gml:_ScalarValue"> -->
<element name="Quantity" type="gml:MeasureType">
<annotation>
<documentation>A numeric value with a scale. The content of the element is an amount using the XML Schema type double which permits decimal or scientific notation. An XML attribute uom (unit of measure) is required, whose value is a URI which identifies the definition of the scale or units by which the numeric value must be multiplied.</documentation>
</annotation>
</element>
<!--
<element name="QuantityList" type="gml:MeasureOrNullListType" substitutionGroup="gml:_ScalarValueList"> -->
<element name="QuantityList" type="gml:MeasureOrNullListType">
<annotation>
<documentation>A space separated list of amounts or nulls. The amounts use the XML Schema type double. A single XML attribute uom (unit of measure) is required, whose value is a URI which identifies the definition of the scale or units by which all the amounts in the list must be multiplied.</documentation>
</annotation>
</element>
<!-- ====================================================================== -->
<!-- ========================== Count ==========================
<element name="Count" type="integer" substitutionGroup="gml:_ScalarValue"> -->
<element name="Count" type="integer">
<annotation>
<documentation>An integer representing a frequency of occurrence.</documentation>
</annotation>
</element>
<!--
<element name="CountList" type="gml:integerOrNullList" substitutionGroup="gml:_ScalarValueList"> -->
<element name="CountList" type="gml:integerOrNullList">
<annotation>
<documentation>A space-separated list of integers or nulls.</documentation>
</annotation>
</element>
<!-- ====================================================================== -->
<!-- aggregate Value types -->
<!-- ====================================================================== -->
<!-- ===================== ValueCollection ========================== -->
<complexType name="CompositeValueType">
<annotation>
<documentation>Aggregate value built from other Values using the Composite pattern. It contains zero or an arbitrary number of valueComponent elements, and zero or one valueComponents elements. It may be used for strongly coupled aggregates (vectors, tensors) or for arbitrary collections of values.</documentation>
</annotation>
<complexContent>
<extension base="gml:AbstractGMLType">
<sequence>
<element ref="gml:valueComponent" minOccurs="0" maxOccurs="unbounded"/>
<element ref="gml:valueComponents" minOccurs="0"/>
</sequence>
</extension>
</complexContent>
</complexType>
<!-- <element name="CompositeValue" type="gml:CompositeValueType" substitutionGroup="gml:_Value"> -->
<element name="CompositeValue" type="gml:CompositeValueType">
<annotation>
<documentation>Aggregate value built using the Composite pattern.</documentation>
</annotation>
</element>
<!-- ====================================================================== -->
<!-- ========================= ValueArray ========================== -->
<complexType name="ValueArrayType">
<annotation>
<documentation>A Value Array is used for homogeneous arrays of primitive and aggregate values. The member values may be scalars, composites, arrays or lists. ValueArray has the same content model as CompositeValue, but the member values must be homogeneous. The element declaration contains a Schematron constraint which expresses this restriction precisely. Since the members are homogeneous, the referenceSystem (uom, codeSpace) may be specified on the ValueArray itself and implicitly inherited by all the members if desired. Note that a_ScalarValueList is preferred for arrays of Scalar Values since this is a more efficient encoding.</documentation>
</annotation>
<complexContent>
<extension base="gml:CompositeValueType">
<attributeGroup ref="gml:referenceSystem"/>
</extension>
</complexContent>
</complexType>
<!-- -->
<element name="ValueArray" type="gml:ValueArrayType" substitutionGroup="gml:CompositeValue">
<annotation>
<appinfo>
<sch:pattern name="Check either codeSpace or uom not both">
<sch:rule context="gml:ValueArray">
<sch:report test="@codeSpace and @uom">ValueArray may not carry both a reference to a codeSpace and a uom</sch:report>
</sch:rule>
</sch:pattern>
<sch:pattern name="Check components are homogeneous">
<sch:rule context="gml:ValueArray">
<sch:assert test="count(gml:valueComponent/*) = count(gml:valueComponent/*[name() = name(../../gml:valueComponent[1]/*[1])])">All components of <sch:name/> must be of the same type</sch:assert>
<sch:assert test="count(gml:valueComponents/*) = count(gml:valueComponents/*[name() = name(../*[1])])">All components of <sch:name/> must be of the same type</sch:assert>
</sch:rule>
</sch:pattern>
</appinfo>
<documentation>A Value Array is used for homogeneous arrays of primitive and aggregate values. _ScalarValueList is preferred for arrays of Scalar Values since this is more efficient. Since "choice" is not available for attribute groups, an external constraint (e.g. Schematron) would be required to enforce the selection of only one of these through schema validation</documentation>
</annotation>
</element>
<!-- attribute group required for ValueArray -->
<attributeGroup name="referenceSystem">
<attribute name="codeSpace" type="anyURI" use="optional"/>
<attribute name="uom" type="anyURI" use="optional"/>
</attributeGroup>
<!-- ====================================================================== -->
<!-- ====================== Typed ValueExtents ============================ -->
<group name="ValueExtent">
<choice>
<!--
<element ref="gml:CategoryExtent"/>
<element ref="gml:QuantityExtent"/>
-->
<element ref="gml:CountExtent"/>
</choice>
</group>
<!-- ======================================================================
<element name="QuantityExtent" type="gml:QuantityExtentType" substitutionGroup="gml:_Value">
<element name="QuantityExtent" type="gml:QuantityExtentType">
<annotation>
<documentation>Utility element to store a 2-point range of numeric values. If one member is a null, then this is a single ended interval.</documentation>
</annotation>
</element>
<complexType name="QuantityExtentType">
<annotation>
<documentation>Restriction of list type to store a 2-point range of numeric values. If one member is a null, then this is a single ended interval.</documentation>
</annotation>
<simpleContent>
<restriction base="gml:MeasureOrNullListType">
<length value="2"/>
</restriction>
</simpleContent>
</complexType>
-->
<!-- ======================================================================
<element name="CategoryExtent" type="gml:CategoryExtentType" substitutionGroup="gml:_Value">
<element name="CategoryExtent" type="gml:CategoryExtentType">
<annotation>
<documentation>Utility element to store a 2-point range of ordinal values. If one member is a null, then this is a single ended interval.</documentation>
</annotation>
</element>
<complexType name="CategoryExtentType">
<annotation>
<documentation>Restriction of list type to store a 2-point range of ordinal values. If one member is a null, then this is a single ended interval.</documentation>
</annotation>
<simpleContent>
<restriction base="gml:CodeOrNullListType">
<length value="2"/>
</restriction>
</simpleContent>
</complexType>
-->
<!-- ======================================================================
<element name="CountExtent" type="gml:CountExtentType" substitutionGroup="gml:_Value"> -->
<element name="CountExtent" type="gml:CountExtentType">
<annotation>
<documentation>Utility element to store a 2-point range of frequency values. If one member is a null, then this is a single ended interval.</documentation>
</annotation>
</element>
<!-- -->
<simpleType name="CountExtentType">
<annotation>
<documentation>Restriction of list type to store a 2-point range of frequency values. If one member is a null, then this is a single ended interval.</documentation>
</annotation>
<restriction base="gml:integerOrNullList">
<length value="2"/>
</restriction>
</simpleType>
<!-- ====================================================================== -->
<!-- ===================== pieces needed for compositing ==================== -->
<element name="valueProperty" type="gml:ValuePropertyType">
<annotation>
<documentation>Element which refers to, or contains, a Value</documentation>
</annotation>
</element>
<!-- ====================================================================== -->
<element name="valueComponent" type="gml:ValuePropertyType">
<annotation>
<documentation>Element which refers to, or contains, a Value. This version is used in CompositeValues.</documentation>
</annotation>
</element>
<!-- ====================================================================== -->
<complexType name="ValuePropertyType">
<annotation>
<documentation>GML property which refers to, or contains, a Value</documentation>
</annotation>
<sequence minOccurs="0">
<group ref="gml:Value"/>
</sequence>
<attributeGroup ref="gml:AssociationAttributeGroup"/>
</complexType>
<!-- ====================================================================== -->
<!-- ====================================================================== -->
<element name="valueComponents" type="gml:ValueArrayPropertyType">
<annotation>
<documentation>Element which refers to, or contains, a set of homogeneously typed Values.</documentation>
</annotation>
</element>
<!-- ====================================================================== -->
<complexType name="ValueArrayPropertyType">
<annotation>
<documentation>GML property which refers to, or contains, a set of homogeneously typed Values.</documentation>
</annotation>
<sequence>
<group ref="gml:Value" maxOccurs="unbounded"/>
</sequence>
</complexType>
<!-- ====================== utility typed valueProperty types =================== -->
<complexType name="ScalarValuePropertyType">
<annotation>
<documentation>Property whose content is a scalar value.</documentation>
</annotation>
<complexContent>
<restriction base="gml:ValuePropertyType">
<sequence minOccurs="0">
<!-- <element ref="gml:_ScalarValue"/> -->
<group ref="gml:ScalarValue"/>
</sequence>
</restriction>
</complexContent>
</complexType>
<complexType name="BooleanPropertyType">
<annotation>
<documentation>Property whose content is a Boolean value.</documentation>
</annotation>
<complexContent>
<restriction base="gml:ValuePropertyType">
<sequence minOccurs="0">
<element ref="gml:Boolean"/>
</sequence>
</restriction>
</complexContent>
</complexType>
<complexType name="CategoryPropertyType">
<annotation>
<documentation>Property whose content is a Category.</documentation>
</annotation>
<complexContent>
<restriction base="gml:ValuePropertyType">
<sequence minOccurs="0">
<element ref="gml:Category"/>
</sequence>
</restriction>
</complexContent>
</complexType>
<complexType name="QuantityPropertyType">
<annotation>
<documentation>Property whose content is a Quantity.</documentation>
</annotation>
<complexContent>
<restriction base="gml:ValuePropertyType">
<sequence minOccurs="0">
<element ref="gml:Quantity"/>
</sequence>
</restriction>
</complexContent>
</complexType>
<complexType name="CountPropertyType">
<annotation>
<documentation>Property whose content is a Count.</documentation>
</annotation>
<complexContent>
<restriction base="gml:ValuePropertyType">
<sequence minOccurs="0">
<element ref="gml:Count"/>
</sequence>
</restriction>
</complexContent>
</complexType>
<!-- ====================================================================== -->
</schema>
|