Project

General

Profile

1
<?xml version="1.0" encoding="UTF-8"?>
2
<schema targetNamespace="http://www.opengis.net/gml" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:sch="http://www.ascc.net/xml/schematron" xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" elementFormDefault="qualified" version="3.2.0">
3
	<annotation>
4
		<appinfo source="urn:ogc:specification:gml:schema-xsd:geometryPrimitives:3.2.0">geometryPrimitives.xsd</appinfo>
5
		<documentation>See ISO/DIS 19136 Clause 11.
6
Beside the “simple” geometric primitives specified in the previous Clause, this Clause specifies additional primitives to describe real world situations which require a more expressive geometry model.
7
</documentation>
8
	</annotation>
9
	<include schemaLocation="geometryBasic2d.xsd"/>
10
	<complexType name="CurveType">
11
		<complexContent>
12
			<extension base="gml:AbstractCurveType">
13
				<sequence>
14
					<element ref="gml:segments"/>
15
				</sequence>
16
			</extension>
17
		</complexContent>
18
	</complexType>
19
	<element name="Curve" type="gml:CurveType" substitutionGroup="gml:AbstractCurve">
20
		<annotation>
21
			<documentation>A curve is a 1-dimensional primitive. Curves are continuous, connected, and have a measurable length in terms of the coordinate system. 
22
A curve is composed of one or more curve segments. Each curve segment within a curve may be defined using a different interpolation method. The curve segments are connected to one another, with the end point of each segment except the last being the start point of the next segment in the segment list.
23
The orientation of the curve is positive.
24
The element segments encapsulates the segments of the curve.</documentation>
25
		</annotation>
26
	</element>
27
	<complexType name="OrientableCurveType">
28
		<complexContent>
29
			<extension base="gml:AbstractCurveType">
30
				<sequence>
31
					<element ref="gml:baseCurve"/>
32
				</sequence>
33
				<attribute name="orientation" type="gml:SignType" default="+"/>
34
			</extension>
35
		</complexContent>
36
	</complexType>
37
	<element name="baseCurve" type="gml:CurvePropertyType">
38
		<annotation>
39
			<documentation>The property baseCurve references or contains the base curve, i.e. it either references the base curve via the XLink-attributes or contains the curve element. A curve element is any element which is substitutable for AbstractCurve. The base curve has positive orientation.</documentation>
40
		</annotation>
41
	</element>
42
	<element name="OrientableCurve" type="gml:OrientableCurveType" substitutionGroup="gml:AbstractCurve">
43
		<annotation>
44
			<documentation>OrientableCurve consists of a curve and an orientation. If the orientation is "+", then the OrientableCurve is identical to the baseCurve. If the orientation is "-", then the OrientableCurve is related to another AbstractCurve with a parameterization that reverses the sense of the curve traversal.</documentation>
45
		</annotation>
46
	</element>
47
	<complexType name="AbstractCurveSegmentType" abstract="true">
48
		<attribute name="numDerivativesAtStart" type="integer" default="0"/>
49
		<attribute name="numDerivativesAtEnd" type="integer" default="0"/>
50
		<attribute name="numDerivativeInterior" type="integer" default="0"/>
51
	</complexType>
52
	<element name="AbstractCurveSegment" type="gml:AbstractCurveSegmentType" abstract="true" substitutionGroup="gml:AbstractObject">
53
		<annotation>
54
			<documentation>A curve segment defines a homogeneous segment of a curve.
55
The attributes numDerivativesAtStart, numDerivativesAtEnd and numDerivativesInterior specify the type of continuity as specified in ISO 19107:2003, 6.4.9.3.
56
The AbstractCurveSegment element is the abstract head of the substituition group for all curve segment elements, i.e. continuous segments of the same interpolation mechanism.
57
All curve segments shall have an attribute interpolation with type gml:CurveInterpolationType specifying the curve interpolation mechanism used for this segment. This mechanism uses the control points and control parameters to determine the position of this curve segment.</documentation>
58
		</annotation>
59
	</element>
60
	<complexType name="CurveSegmentArrayPropertyType">
61
		<annotation>
62
			<documentation>gml:CurveSegmentArrayPropertyType is a container for an array of curve segments.</documentation>
63
		</annotation>
64
		<sequence minOccurs="0" maxOccurs="unbounded">
65
			<element ref="gml:AbstractCurveSegment"/>
66
		</sequence>
67
	</complexType>
68
	<element name="segments" type="gml:CurveSegmentArrayPropertyType">
69
		<annotation>
70
			<documentation>This property element contains a list of curve segments. The order of the elements is significant and shall be preserved when processing the array.</documentation>
71
		</annotation>
72
	</element>
73
	<simpleType name="CurveInterpolationType">
74
		<annotation>
75
			<documentation>gml:CurveInterpolationType is a list of codes that may be used to identify the interpolation mechanisms specified by an application schema.</documentation>
76
		</annotation>
77
		<restriction base="string">
78
			<enumeration value="linear"/>
79
			<enumeration value="geodesic"/>
80
			<enumeration value="circularArc3Points"/>
81
			<enumeration value="circularArc2PointWithBulge"/>
82
			<enumeration value="circularArcCenterPointWithRadius"/>
83
			<enumeration value="elliptical"/>
84
			<enumeration value="clothoid"/>
85
			<enumeration value="conic"/>
86
			<enumeration value="polynomialSpline"/>
87
			<enumeration value="cubicSpline"/>
88
			<enumeration value="rationalSpline"/>
89
		</restriction>
90
	</simpleType>
91
	<complexType name="LineStringSegmentType">
92
		<complexContent>
93
			<extension base="gml:AbstractCurveSegmentType">
94
				<sequence>
95
					<choice>
96
						<choice minOccurs="2" maxOccurs="unbounded">
97
							<element ref="gml:pos"/>
98
							<element ref="gml:pointProperty"/>
99
							<element ref="gml:pointRep"/>
100
						</choice>
101
						<element ref="gml:posList"/>
102
						<element ref="gml:coordinates"/>
103
					</choice>
104
				</sequence>
105
				<attribute name="interpolation" type="gml:CurveInterpolationType" fixed="linear"/>
106
			</extension>
107
		</complexContent>
108
	</complexType>
109
	<element name="LineStringSegment" type="gml:LineStringSegmentType" substitutionGroup="gml:AbstractCurveSegment">
110
		<annotation>
111
			<documentation>A LineStringSegment is a curve segment that is defined by two or more control points including the start and end point, with linear interpolation between them.
112
The content model follows the general pattern for the encoding of curve segments.</documentation>
113
		</annotation>
114
	</element>
115
	<complexType name="ArcStringType">
116
		<complexContent>
117
			<extension base="gml:AbstractCurveSegmentType">
118
				<sequence>
119
					<choice>
120
						<choice minOccurs="3" maxOccurs="unbounded">
121
							<element ref="gml:pos"/>
122
							<element ref="gml:pointProperty"/>
123
							<element ref="gml:pointRep"/>
124
						</choice>
125
						<element ref="gml:posList"/>
126
						<element ref="gml:coordinates"/>
127
					</choice>
128
				</sequence>
129
				<attribute name="interpolation" type="gml:CurveInterpolationType" fixed="circularArc3Points"/>
130
				<attribute name="numArc" type="integer"/>
131
			</extension>
132
		</complexContent>
133
	</complexType>
134
	<element name="ArcString" type="gml:ArcStringType" substitutionGroup="gml:AbstractCurveSegment">
135
		<annotation>
136
			<documentation>An ArcString is a curve segment that uses three-point circular arc interpolation (“circularArc3Points”). The number of arcs in the arc string may be explicitly stated in the attribute numArc. The number of control points in the arc string shall be 2 * numArc + 1.
137
The content model follows the general pattern for the encoding of curve segments.</documentation>
138
		</annotation>
139
	</element>
140
	<complexType name="ArcType">
141
		<complexContent>
142
			<restriction base="gml:ArcStringType">
143
				<sequence>
144
					<choice>
145
						<choice minOccurs="3" maxOccurs="3">
146
							<element ref="gml:pos"/>
147
							<element ref="gml:pointProperty"/>
148
							<element ref="gml:pointRep"/>
149
						</choice>
150
						<element ref="gml:posList"/>
151
						<element ref="gml:coordinates"/>
152
					</choice>
153
				</sequence>
154
				<attribute name="numArc" type="integer" fixed="1"/>
155
			</restriction>
156
		</complexContent>
157
	</complexType>
158
	<element name="Arc" type="gml:ArcType" substitutionGroup="gml:ArcString">
159
		<annotation>
160
			<documentation>An Arc is an arc string with only one arc unit, i.e. three control points including the start and end point. As arc is an arc string consisting of a single arc, the attribute “numArc” is fixed to "1".</documentation>
161
		</annotation>
162
	</element>
163
	<complexType name="CircleType">
164
		<complexContent>
165
			<extension base="gml:ArcType"/>
166
		</complexContent>
167
	</complexType>
168
	<element name="Circle" type="gml:CircleType" substitutionGroup="gml:Arc">
169
		<annotation>
170
			<documentation>A Circle is an arc whose ends coincide to form a simple closed loop. The three control points shall be distinct non-co-linear points for the circle to be unambiguously defined. The arc is simply extended past the third control point until the first control point is encountered.</documentation>
171
		</annotation>
172
	</element>
173
	<complexType name="ArcStringByBulgeType">
174
		<complexContent>
175
			<extension base="gml:AbstractCurveSegmentType">
176
				<sequence>
177
					<choice>
178
						<choice minOccurs="2" maxOccurs="unbounded">
179
							<element ref="gml:pos"/>
180
							<element ref="gml:pointProperty"/>
181
							<element ref="gml:pointRep"/>
182
						</choice>
183
						<element ref="gml:posList"/>
184
						<element ref="gml:coordinates"/>
185
					</choice>
186
					<element name="bulge" type="double" maxOccurs="unbounded"/>
187
					<element name="normal" type="gml:VectorType" maxOccurs="unbounded"/>
188
				</sequence>
189
				<attribute name="interpolation" type="gml:CurveInterpolationType" fixed="circularArc2PointWithBulge"/>
190
				<attribute name="numArc" type="integer"/>
191
			</extension>
192
		</complexContent>
193
	</complexType>
194
	<element name="ArcStringByBulge" type="gml:ArcStringByBulgeType" substitutionGroup="gml:AbstractCurveSegment">
195
		<annotation>
196
			<documentation>This variant of the arc computes the mid points of the arcs instead of storing the coordinates directly. The control point sequence consists of the start and end points of each arc plus the bulge (see ISO 19107:2003, 6.4.17.2). The normal is a vector normal (perpendicular) to the chord of the arc (see ISO 19107:2003, 6.4.17.4).
197
The interpolation is fixed as "circularArc2PointWithBulge".
198
The number of arcs in the arc string may be explicitly stated in the attribute numArc. The number of control points in the arc string shall be numArc + 1.
199
The content model follows the general pattern for the encoding of curve segments.</documentation>
200
		</annotation>
201
	</element>
202
	<complexType name="ArcByBulgeType">
203
		<complexContent>
204
			<restriction base="gml:ArcStringByBulgeType">
205
				<sequence>
206
					<choice>
207
						<choice minOccurs="2" maxOccurs="2">
208
							<element ref="gml:pos"/>
209
							<element ref="gml:pointProperty"/>
210
							<element ref="gml:pointRep"/>
211
						</choice>
212
						<element ref="gml:posList"/>
213
						<element ref="gml:coordinates"/>
214
					</choice>
215
					<element name="bulge" type="double"/>
216
					<element name="normal" type="gml:VectorType"/>
217
				</sequence>
218
				<attribute name="numArc" type="integer" fixed="1"/>
219
			</restriction>
220
		</complexContent>
221
	</complexType>
222
	<element name="ArcByBulge" type="gml:ArcByBulgeType" substitutionGroup="gml:ArcStringByBulge">
223
		<annotation>
224
			<documentation>An ArcByBulge is an arc string with only one arc unit, i.e. two control points, one bulge and one normal vector.
225
As arc is an arc string consisting of a single arc, the attribute “numArc” is fixed to "1".</documentation>
226
		</annotation>
227
	</element>
228
	<complexType name="ArcByCenterPointType">
229
		<complexContent>
230
			<extension base="gml:AbstractCurveSegmentType">
231
				<sequence>
232
					<choice>
233
						<choice>
234
							<element ref="gml:pos"/>
235
							<element ref="gml:pointProperty"/>
236
							<element ref="gml:pointRep"/>
237
						</choice>
238
						<element ref="gml:posList"/>
239
						<element ref="gml:coordinates"/>
240
					</choice>
241
					<element name="radius" type="gml:LengthType"/>
242
					<element name="startAngle" type="gml:AngleType" minOccurs="0"/>
243
					<element name="endAngle" type="gml:AngleType" minOccurs="0"/>
244
				</sequence>
245
				<attribute name="interpolation" type="gml:CurveInterpolationType" fixed="circularArcCenterPointWithRadius"/>
246
				<attribute name="numArc" type="integer" use="required" fixed="1"/>
247
			</extension>
248
		</complexContent>
249
	</complexType>
250
	<element name="ArcByCenterPoint" type="gml:ArcByCenterPointType" substitutionGroup="gml:AbstractCurveSegment">
251
		<annotation>
252
			<documentation>This variant of the arc requires that the points on the arc shall be computed instead of storing the coordinates directly. The single control point is the center point of the arc plus the radius and the bearing at start and end. This representation can be used only in 2D.
253
The element radius specifies the radius of the arc.
254
The element startAngle specifies the bearing of the arc at the start.
255
The element endAngle specifies the bearing of the arc at the end.
256
The interpolation is fixed as "circularArcCenterPointWithRadius".
257
Since this type describes always a single arc, the attribute “numArc” is fixed to "1".
258
The content model follows the general pattern for the encoding of curve segments.</documentation>
259
		</annotation>
260
	</element>
261
	<complexType name="CircleByCenterPointType">
262
		<complexContent>
263
			<restriction base="gml:ArcByCenterPointType">
264
				<sequence>
265
					<choice>
266
						<choice>
267
							<element ref="gml:pos"/>
268
							<element ref="gml:pointProperty"/>
269
							<element ref="gml:pointRep"/>
270
						</choice>
271
						<element ref="gml:posList"/>
272
						<element ref="gml:coordinates"/>
273
					</choice>
274
					<element name="radius" type="gml:LengthType"/>
275
				</sequence>
276
			</restriction>
277
		</complexContent>
278
	</complexType>
279
	<element name="CircleByCenterPoint" type="gml:CircleByCenterPointType" substitutionGroup="gml:ArcByCenterPoint">
280
		<annotation>
281
			<documentation>A gml:CircleByCenterPoint is an gml:ArcByCenterPoint with identical start and end angle to form a full circle. Again, this representation can be used only in 2D.</documentation>
282
		</annotation>
283
	</element>
284
	<complexType name="CubicSplineType">
285
		<complexContent>
286
			<extension base="gml:AbstractCurveSegmentType">
287
				<sequence>
288
					<choice>
289
						<choice minOccurs="2" maxOccurs="unbounded">
290
							<element ref="gml:pos"/>
291
							<element ref="gml:pointProperty"/>
292
							<element ref="gml:pointRep"/>
293
						</choice>
294
						<element ref="gml:posList"/>
295
						<element ref="gml:coordinates"/>
296
					</choice>
297
					<element name="vectorAtStart" type="gml:VectorType"/>
298
					<element name="vectorAtEnd" type="gml:VectorType"/>
299
				</sequence>
300
				<attribute name="interpolation" type="gml:CurveInterpolationType" fixed="cubicSpline"/>
301
				<attribute name="degree" type="integer" fixed="3"/>
302
			</extension>
303
		</complexContent>
304
	</complexType>
305
	<element name="CubicSpline" type="gml:CubicSplineType" substitutionGroup="gml:AbstractCurveSegment">
306
		<annotation>
307
			<documentation>The number of control points shall be at least three.
308
vectorAtStart is the unit tangent vector at the start point of the spline. vectorAtEnd is the unit tangent vector at the end point of the spline. Only the direction of the vectors shall be used to determine the shape of the cubic spline, not their length.
309
interpolation is fixed as "cubicSpline".
310
degree shall be the degree of the polynomial used for the interpolation in this spline. Therefore the degree for a cubic spline is fixed to "3".
311
The content model follows the general pattern for the encoding of curve segments.</documentation>
312
		</annotation>
313
	</element>
314
	<complexType name="BSplineType">
315
		<complexContent>
316
			<extension base="gml:AbstractCurveSegmentType">
317
				<sequence>
318
					<choice>
319
						<choice minOccurs="0" maxOccurs="unbounded">
320
							<element ref="gml:pos"/>
321
							<element ref="gml:pointProperty"/>
322
							<element ref="gml:pointRep"/>
323
						</choice>
324
						<element ref="gml:posList"/>
325
						<element ref="gml:coordinates"/>
326
					</choice>
327
					<element name="degree" type="nonNegativeInteger"/>
328
					<element name="knot" type="gml:KnotPropertyType" minOccurs="2" maxOccurs="unbounded"/>
329
				</sequence>
330
				<attribute name="interpolation" type="gml:CurveInterpolationType" default="polynomialSpline"/>
331
				<attribute name="isPolynomial" type="boolean"/>
332
				<attribute name="knotType" type="gml:KnotTypesType"/>
333
			</extension>
334
		</complexContent>
335
	</complexType>
336
	<element name="BSpline" type="gml:BSplineType" substitutionGroup="gml:AbstractCurveSegment">
337
		<annotation>
338
			<documentation>A B-Spline is a piecewise parametric polynomial or rational curve described in terms of control points and basis functions as specified in ISO 19107:2003, 6.4.30. Therefore, interpolation may be either "polynomialSpline" or "rationalSpline" depending on the interpolation type; default is "polynomialSpline".
339
degree shall be the degree of the polynomial used for interpolation in this spline.
340
knot shall be the sequence of distinct knots used to define the spline basis functions (see ISO 19107:2003, 6.4.26.2).
341
The attribute isPolynomial shall be set to “true” if this is a polynomial spline (see ISO 19107:2003, 6.4.30.5).
342
The attribute knotType shall provide the type of knot distribution used in defining this spline (see ISO 19107:2003, 6.4.30.4).
343
The content model follows the general pattern for the encoding of curve segments.</documentation>
344
		</annotation>
345
	</element>
346
	<complexType name="KnotType">
347
		<sequence>
348
			<element name="value" type="double"/>
349
			<element name="multiplicity" type="nonNegativeInteger"/>
350
			<element name="weight" type="double"/>
351
		</sequence>
352
	</complexType>
353
	<complexType name="KnotPropertyType">
354
		<annotation>
355
			<documentation>gml:KnotPropertyType encapsulates a knot to use it in a geometric type.</documentation>
356
		</annotation>
357
		<sequence>
358
			<element name="Knot" type="gml:KnotType">
359
				<annotation>
360
					<documentation>A knot is a breakpoint on a piecewise spline curve.
361
value is the value of the parameter at the knot of the spline (see ISO 19107:2003, 6.4.24.2).
362
multiplicity is the multiplicity of this knot used in the definition of the spline (with the same weight).
363
weight is the value of the averaging weight used for this knot of the spline.</documentation>
364
				</annotation>
365
			</element>
366
		</sequence>
367
	</complexType>
368
	<simpleType name="KnotTypesType">
369
		<annotation>
370
			<documentation>This enumeration type specifies values for the knots’ type (see ISO 19107:2003, 6.4.25).</documentation>
371
		</annotation>
372
		<restriction base="string">
373
			<enumeration value="uniform"/>
374
			<enumeration value="quasiUniform"/>
375
			<enumeration value="piecewiseBezier"/>
376
		</restriction>
377
	</simpleType>
378
	<complexType name="BezierType">
379
		<complexContent>
380
			<restriction base="gml:BSplineType">
381
				<sequence>
382
					<choice>
383
						<choice minOccurs="0" maxOccurs="unbounded">
384
							<element ref="gml:pos"/>
385
							<element ref="gml:pointProperty"/>
386
							<element ref="gml:pointRep"/>
387
						</choice>
388
						<element ref="gml:posList"/>
389
						<element ref="gml:coordinates"/>
390
					</choice>
391
					<element name="degree" type="nonNegativeInteger"/>
392
					<element name="knot" type="gml:KnotPropertyType" minOccurs="2" maxOccurs="2"/>
393
				</sequence>
394
				<attribute name="interpolation" type="gml:CurveInterpolationType" fixed="polynomialSpline"/>
395
				<attribute name="isPolynomial" type="boolean" fixed="true"/>
396
				<attribute name="knotType" type="gml:KnotTypesType" use="prohibited"/>
397
			</restriction>
398
		</complexContent>
399
	</complexType>
400
	<element name="Bezier" type="gml:BezierType" substitutionGroup="gml:BSpline">
401
		<annotation>
402
			<documentation>Bezier curves are polynomial splines that use Bezier or Bernstein polynomials for interpolation purposes. It is a special case of the B-Spline curve with two knots.
403
degree shall be the degree of the polynomial used for interpolation in this spline.
404
knot shall be the sequence of distinct knots used to define the spline basis functions.
405
interpolation is fixed as "polynomialSpline".
406
isPolynomial is fixed as “true”.
407
knotType is not relevant for Bezier curve segments.
408
</documentation>
409
		</annotation>
410
	</element>
411
	<complexType name="OffsetCurveType">
412
		<complexContent>
413
			<extension base="gml:AbstractCurveSegmentType">
414
				<sequence>
415
					<element name="offsetBase" type="gml:CurvePropertyType"/>
416
					<element name="distance" type="gml:LengthType"/>
417
					<element name="refDirection" type="gml:VectorType" minOccurs="0"/>
418
				</sequence>
419
			</extension>
420
		</complexContent>
421
	</complexType>
422
	<element name="OffsetCurve" type="gml:OffsetCurveType" substitutionGroup="gml:AbstractCurveSegment">
423
		<annotation>
424
			<documentation>An offset curve is a curve at a constant distance from the basis curve. offsetBase is the base curve from which this curve is defined as an offset. distance and refDirection have the same meaning as specified in ISO 19107:2003, 6.4.23.
425
The content model follows the general pattern for the encoding of curve segments.</documentation>
426
		</annotation>
427
	</element>
428
	<complexType name="AffinePlacementType">
429
		<sequence>
430
			<element name="location" type="gml:DirectPositionType"/>
431
			<element name="refDirection" type="gml:VectorType" maxOccurs="unbounded"/>
432
			<element name="inDimension" type="positiveInteger"/>
433
			<element name="outDimension" type="positiveInteger"/>
434
		</sequence>
435
	</complexType>
436
	<element name="AffinePlacement" type="gml:AffinePlacementType" substitutionGroup="gml:AbstractObject">
437
		<annotation>
438
			<documentation>location, refDirection, inDimension and outDimension have the same meaning as specified in ISO 19107:2003, 6.4.21.</documentation>
439
		</annotation>
440
	</element>
441
	<complexType name="ClothoidType">
442
		<complexContent>
443
			<extension base="gml:AbstractCurveSegmentType">
444
				<sequence>
445
					<element name="refLocation">
446
						<complexType>
447
							<sequence>
448
								<element ref="gml:AffinePlacement"/>
449
							</sequence>
450
						</complexType>
451
					</element>
452
					<element name="scaleFactor" type="decimal"/>
453
					<element name="startParameter" type="double"/>
454
					<element name="endParameter" type="double"/>
455
				</sequence>
456
				<attribute name="interpolation" type="gml:CurveInterpolationType" fixed="clothoid"/>
457
			</extension>
458
		</complexContent>
459
	</complexType>
460
	<element name="Clothoid" type="gml:ClothoidType" substitutionGroup="gml:AbstractCurveSegment">
461
		<annotation>
462
			<documentation>A clothoid, or Cornu's spiral, is plane curve whose curvature is a fixed function of its length.
463
refLocation, startParameter, endParameter and scaleFactor have the same meaning as specified in ISO 19107:2003, 6.4.22.
464
interpolation is fixed as "clothoid".
465
The content model follows the general pattern for the encoding of curve segments.</documentation>
466
		</annotation>
467
	</element>
468
	<complexType name="GeodesicStringType">
469
		<complexContent>
470
			<extension base="gml:AbstractCurveSegmentType">
471
				<choice>
472
					<element ref="gml:posList"/>
473
					<group ref="gml:geometricPositionGroup" minOccurs="2" maxOccurs="unbounded"/>
474
				</choice>
475
				<attribute name="interpolation" type="gml:CurveInterpolationType" fixed="geodesic"/>
476
			</extension>
477
		</complexContent>
478
	</complexType>
479
	<element name="GeodesicString" type="gml:GeodesicStringType" substitutionGroup="gml:AbstractCurveSegment">
480
		<annotation>
481
			<documentation>A sequence of geodesic segments. 
482
The number of control points shall be at least two.
483
interpolation is fixed as "geodesic".
484
The content model follows the general pattern for the encoding of curve segments.</documentation>
485
		</annotation>
486
	</element>
487
	<complexType name="GeodesicType">
488
		<complexContent>
489
			<extension base="gml:GeodesicStringType"/>
490
		</complexContent>
491
	</complexType>
492
	<element name="Geodesic" type="gml:GeodesicType" substitutionGroup="gml:GeodesicString"/>
493
	<complexType name="SurfaceType">
494
		<complexContent>
495
			<extension base="gml:AbstractSurfaceType">
496
				<sequence>
497
					<element ref="gml:patches"/>
498
				</sequence>
499
			</extension>
500
		</complexContent>
501
	</complexType>
502
	<element name="Surface" type="gml:SurfaceType" substitutionGroup="gml:AbstractSurface">
503
		<annotation>
504
			<documentation>A Surface is a 2-dimensional primitive and is composed of one or more surface patches as specified in ISO 19107:2003, 6.3.17.1. The surface patches are connected to one another.
505
patches encapsulates the patches of the surface.</documentation>
506
		</annotation>
507
	</element>
508
	<complexType name="OrientableSurfaceType">
509
		<complexContent>
510
			<extension base="gml:AbstractSurfaceType">
511
				<sequence>
512
					<element ref="gml:baseSurface"/>
513
				</sequence>
514
				<attribute name="orientation" type="gml:SignType" default="+"/>
515
			</extension>
516
		</complexContent>
517
	</complexType>
518
	<element name="baseSurface" type="gml:SurfacePropertyType">
519
		<annotation>
520
			<documentation>The property baseSurface references or contains the base surface. The property baseSurface either references the base surface via the XLink-attributes or contains the surface element. A surface element is any element which is substitutable for gml:AbstractSurface. The base surface has positive orientation.</documentation>
521
		</annotation>
522
	</element>
523
	<element name="OrientableSurface" type="gml:OrientableSurfaceType" substitutionGroup="gml:AbstractSurface">
524
		<annotation>
525
			<documentation>OrientableSurface consists of a surface and an orientation. If the orientation is "+", then the OrientableSurface is identical to the baseSurface. If the orientation is "-", then the OrientableSurface is a reference to a gml:AbstractSurface with an up-normal that reverses the direction for this OrientableSurface, the sense of "the top of the surface".</documentation>
526
		</annotation>
527
	</element>
528
	<complexType name="AbstractSurfacePatchType" abstract="true"/>
529
	<element name="AbstractSurfacePatch" type="gml:AbstractSurfacePatchType" abstract="true">
530
		<annotation>
531
			<documentation>A surface patch defines a homogenuous portion of a surface. 
532
The AbstractSurfacePatch element is the abstract head of the substituition group for all surface patch elements describing a continuous portion of a surface.
533
All surface patches shall have an attribute interpolation (declared in the types derived from gml:AbstractSurfacePatchType) specifying the interpolation mechanism used for the patch using gml:SurfaceInterpolationType.</documentation>
534
		</annotation>
535
	</element>
536
	<complexType name="SurfacePatchArrayPropertyType">
537
		<annotation>
538
			<documentation>gml:SurfacePatchArrayPropertyType is a container for a sequence of surface patches.</documentation>
539
		</annotation>
540
		<sequence minOccurs="0" maxOccurs="unbounded">
541
			<element ref="gml:AbstractSurfacePatch"/>
542
		</sequence>
543
	</complexType>
544
	<element name="patches" type="gml:SurfacePatchArrayPropertyType">
545
		<annotation>
546
			<documentation>The patches property element contains the sequence of surface patches. The order of the elements is significant and shall be preserved when processing the array.</documentation>
547
		</annotation>
548
	</element>
549
	<simpleType name="SurfaceInterpolationType">
550
		<annotation>
551
			<documentation>gml:SurfaceInterpolationType is a list of codes that may be used to identify the interpolation mechanisms specified by an application schema.</documentation>
552
		</annotation>
553
		<restriction base="string">
554
			<enumeration value="none"/>
555
			<enumeration value="planar"/>
556
			<enumeration value="spherical"/>
557
			<enumeration value="elliptical"/>
558
			<enumeration value="conic"/>
559
			<enumeration value="tin"/>
560
			<enumeration value="parametricCurve"/>
561
			<enumeration value="polynomialSpline"/>
562
			<enumeration value="rationalSpline"/>
563
			<enumeration value="triangulatedSpline"/>
564
		</restriction>
565
	</simpleType>
566
	<complexType name="PolygonPatchType">
567
		<complexContent>
568
			<extension base="gml:AbstractSurfacePatchType">
569
				<sequence>
570
					<element ref="gml:exterior" minOccurs="0"/>
571
					<element ref="gml:interior" minOccurs="0" maxOccurs="unbounded"/>
572
				</sequence>
573
				<attribute name="interpolation" type="gml:SurfaceInterpolationType" fixed="planar"/>
574
			</extension>
575
		</complexContent>
576
	</complexType>
577
	<element name="PolygonPatch" type="gml:PolygonPatchType" substitutionGroup="gml:AbstractSurfacePatch">
578
		<annotation>
579
			<documentation>A gml:PolygonPatch is a surface patch that is defined by a set of boundary curves and an underlying surface to which these curves adhere. The curves shall be coplanar and the polygon uses planar interpolation in its interior. 
580
interpolation is fixed to "planar", i.e. an interpolation shall return points on a single plane. The boundary of the patch shall be contained within that plane.</documentation>
581
		</annotation>
582
	</element>
583
	<complexType name="TriangleType">
584
		<complexContent>
585
			<extension base="gml:AbstractSurfacePatchType">
586
				<sequence>
587
					<element ref="gml:exterior"/>
588
				</sequence>
589
				<attribute name="interpolation" type="gml:SurfaceInterpolationType" fixed="planar"/>
590
			</extension>
591
		</complexContent>
592
	</complexType>
593
	<element name="Triangle" type="gml:TriangleType" substitutionGroup="gml:AbstractSurfacePatch">
594
		<annotation>
595
			<documentation>gml:Triangle represents a triangle as a surface patch with an outer boundary consisting of a linear ring. Note that this is a polygon (subtype) with no inner boundaries. The number of points in the linear ring shall be four.
596
The ring (element exterior) shall be a gml:LinearRing and shall form a triangle, the first and the last position shall be coincident.
597
interpolation is fixed to "planar", i.e. an interpolation shall return points on a single plane. The boundary of the patch shall be contained within that plane.</documentation>
598
		</annotation>
599
	</element>
600
	<complexType name="RectangleType">
601
		<complexContent>
602
			<extension base="gml:AbstractSurfacePatchType">
603
				<sequence>
604
					<element ref="gml:exterior"/>
605
				</sequence>
606
				<attribute name="interpolation" type="gml:SurfaceInterpolationType" fixed="planar"/>
607
			</extension>
608
		</complexContent>
609
	</complexType>
610
	<element name="Rectangle" type="gml:RectangleType" substitutionGroup="gml:AbstractSurfacePatch">
611
		<annotation>
612
			<documentation>gml:Rectangle represents a rectangle as a surface patch with an outer boundary consisting of a linear ring. Note that this is a polygon (subtype) with no inner boundaries. The number of points in the linear ring shall be five.
613
The ring (element exterior) shall be a gml:LinearRing and shall form a rectangle; the first and the last position shall be coincident.
614
interpolation is fixed to "planar", i.e. an interpolation shall return points on a single plane. The boundary of the patch shall be contained within that plane.</documentation>
615
		</annotation>
616
	</element>
617
	<complexType name="RingType">
618
		<complexContent>
619
			<extension base="gml:AbstractRingType">
620
				<sequence>
621
					<element ref="gml:curveMember" maxOccurs="unbounded"/>
622
				</sequence>
623
				<attributeGroup ref="gml:AggregationAttributeGroup"/>
624
			</extension>
625
		</complexContent>
626
	</complexType>
627
	<element name="Ring" type="gml:RingType" substitutionGroup="gml:AbstractRing">
628
		<annotation>
629
			<documentation>A ring is used to represent a single connected component of a surface boundary as specified in ISO 19107:2003, 6.3.6.
630
Every gml:curveMember references or contains one curve, i.e. any element which is substitutable for gml:AbstractCurve. In the context of a ring, the curves describe the boundary of the surface. The sequence of curves shall be contiguous and connected in a cycle.
631
If provided, the aggregationType attribute shall have the value “sequence”.</documentation>
632
		</annotation>
633
	</element>
634
	<element name="curveMember" type="gml:CurvePropertyType"/>
635
	<complexType name="RingPropertyType">
636
		<annotation>
637
			<documentation>A property with the content model of gml:RingPropertyType encapsulates a ring to represent a component of a surface boundary.</documentation>
638
		</annotation>
639
		<sequence>
640
			<element ref="gml:Ring"/>
641
		</sequence>
642
	</complexType>
643
	<group name="PointGrid">
644
		<annotation>
645
			<documentation>A gml:PointGrid group contains or references points or positions which are organised into sequences or grids. All rows shall have the same number of positions (columns).</documentation>
646
		</annotation>
647
		<sequence>
648
			<element name="rows">
649
				<complexType>
650
					<sequence>
651
						<element name="Row" maxOccurs="unbounded">
652
							<complexType>
653
								<group ref="gml:geometricPositionListGroup"/>
654
							</complexType>
655
						</element>
656
					</sequence>
657
				</complexType>
658
			</element>
659
		</sequence>
660
	</group>
661
	<complexType name="AbstractParametricCurveSurfaceType" abstract="true">
662
		<complexContent>
663
			<extension base="gml:AbstractSurfacePatchType">
664
				<attributeGroup ref="gml:AggregationAttributeGroup"/>
665
			</extension>
666
		</complexContent>
667
	</complexType>
668
	<element name="AbstractParametricCurveSurface" type="gml:AbstractParametricCurveSurfaceType" abstract="true" substitutionGroup="gml:AbstractSurfacePatch">
669
		<annotation>
670
			<documentation>The element provides a substitution group head for the surface patches based on parametric curves. All properties are specified in the derived subtypes. All derived subtypes shall conform to the constraints specified in ISO 19107:2003, 6.4.40.
671
If provided, the aggregationType attribute shall have the value “set”.</documentation>
672
		</annotation>
673
	</element>
674
	<complexType name="AbstractGriddedSurfaceType" abstract="true">
675
		<complexContent>
676
			<extension base="gml:AbstractParametricCurveSurfaceType">
677
				<sequence>
678
					<group ref="gml:PointGrid"/>
679
				</sequence>
680
				<attribute name="rows" type="integer"/>
681
				<attribute name="columns" type="integer"/>
682
			</extension>
683
		</complexContent>
684
	</complexType>
685
	<element name="AbstractGriddedSurface" type="gml:AbstractGriddedSurfaceType" abstract="true" substitutionGroup="gml:AbstractParametricCurveSurface">
686
		<annotation>
687
			<documentation>if provided, rows gives the number of rows, columns the number of columns in the parameter grid. The parameter grid is represented by an instance of the gml:PointGrid group.
688
The element provides a substitution group head for the surface patches based on a grid. All derived subtypes shall conform to the constraints specified in ISO 19107:2003, 6.4.41.</documentation>
689
		</annotation>
690
	</element>
691
	<complexType name="ConeType">
692
		<complexContent>
693
			<extension base="gml:AbstractGriddedSurfaceType">
694
				<attribute name="horizontalCurveType" type="gml:CurveInterpolationType" fixed="circularArc3Points"/>
695
				<attribute name="verticalCurveType" type="gml:CurveInterpolationType" fixed="linear"/>
696
			</extension>
697
		</complexContent>
698
	</complexType>
699
	<element name="Cone" type="gml:ConeType" substitutionGroup="gml:AbstractGriddedSurface"/>
700
	<complexType name="CylinderType">
701
		<complexContent>
702
			<extension base="gml:AbstractGriddedSurfaceType">
703
				<attribute name="horizontalCurveType" type="gml:CurveInterpolationType" fixed="circularArc3Points"/>
704
				<attribute name="verticalCurveType" type="gml:CurveInterpolationType" fixed="linear"/>
705
			</extension>
706
		</complexContent>
707
	</complexType>
708
	<element name="Cylinder" type="gml:CylinderType" substitutionGroup="gml:AbstractGriddedSurface"/>
709
	<complexType name="SphereType">
710
		<complexContent>
711
			<extension base="gml:AbstractGriddedSurfaceType">
712
				<attribute name="horizontalCurveType" type="gml:CurveInterpolationType" fixed="circularArc3Points"/>
713
				<attribute name="verticalCurveType" type="gml:CurveInterpolationType" fixed="circularArc3Points"/>
714
			</extension>
715
		</complexContent>
716
	</complexType>
717
	<element name="Sphere" type="gml:SphereType" substitutionGroup="gml:AbstractGriddedSurface"/>
718
	<complexType name="PolyhedralSurfaceType">
719
		<complexContent>
720
			<restriction base="gml:SurfaceType">
721
				<sequence>
722
					<group ref="gml:StandardObjectProperties"/>
723
					<element ref="gml:polygonPatches"/>
724
				</sequence>
725
			</restriction>
726
		</complexContent>
727
	</complexType>
728
	<element name="polygonPatches" type="gml:PolygonPatchArrayPropertyType" substitutionGroup="gml:patches"/>
729
	<element name="PolyhedralSurface" type="gml:PolyhedralSurfaceType" substitutionGroup="gml:Surface">
730
		<annotation>
731
			<documentation>A polyhedral surface is a surface composed of polygon patches connected along their common boundary curves. This differs from the surface type only in the restriction on the types of surface patches acceptable.
732
polygonPatches encapsulates the polygon patches of the polyhedral surface.</documentation>
733
		</annotation>
734
	</element>
735
	<complexType name="PolygonPatchArrayPropertyType">
736
		<annotation>
737
			<documentation>gml:PolygonPatchArrayPropertyType provides a container for an array of polygon patches.</documentation>
738
		</annotation>
739
		<complexContent>
740
			<restriction base="gml:SurfacePatchArrayPropertyType">
741
				<sequence minOccurs="0" maxOccurs="unbounded">
742
					<element ref="gml:PolygonPatch"/>
743
				</sequence>
744
			</restriction>
745
		</complexContent>
746
	</complexType>
747
	<complexType name="TriangulatedSurfaceType">
748
		<complexContent>
749
			<restriction base="gml:SurfaceType">
750
				<sequence>
751
					<group ref="gml:StandardObjectProperties"/>
752
					<element ref="gml:trianglePatches"/>
753
				</sequence>
754
			</restriction>
755
		</complexContent>
756
	</complexType>
757
	<element name="trianglePatches" type="gml:TrianglePatchArrayPropertyType" substitutionGroup="gml:patches"/>
758
	<element name="TriangulatedSurface" type="gml:TriangulatedSurfaceType" substitutionGroup="gml:Surface">
759
		<annotation>
760
			<documentation>A triangulated surface is a polyhedral surface that is composed only of triangles. There is no restriction on how the triangulation is derived.
761
trianglePatches encapsulates the triangles of the triangulated surface.</documentation>
762
		</annotation>
763
	</element>
764
	<complexType name="TrianglePatchArrayPropertyType">
765
		<annotation>
766
			<documentation>gml:TrianglePatchArrayPropertyType provides a container for an array of triangle patches.</documentation>
767
		</annotation>
768
		<complexContent>
769
			<restriction base="gml:SurfacePatchArrayPropertyType">
770
				<sequence minOccurs="0" maxOccurs="unbounded">
771
					<element ref="gml:Triangle"/>
772
				</sequence>
773
			</restriction>
774
		</complexContent>
775
	</complexType>
776
	<complexType name="TinType">
777
		<complexContent>
778
			<extension base="gml:TriangulatedSurfaceType">
779
				<sequence>
780
					<element name="stopLines" type="gml:LineStringSegmentArrayPropertyType" minOccurs="0" maxOccurs="unbounded"/>
781
					<element name="breakLines" type="gml:LineStringSegmentArrayPropertyType" minOccurs="0" maxOccurs="unbounded"/>
782
					<element name="maxLength" type="gml:LengthType"/>
783
					<element name="controlPoint">
784
						<complexType>
785
							<choice>
786
								<element ref="gml:posList"/>
787
								<group ref="gml:geometricPositionGroup" minOccurs="3" maxOccurs="unbounded"/>
788
							</choice>
789
						</complexType>
790
					</element>
791
				</sequence>
792
			</extension>
793
		</complexContent>
794
	</complexType>
795
	<element name="Tin" type="gml:TinType" substitutionGroup="gml:TriangulatedSurface">
796
		<annotation>
797
			<documentation>A tin is a triangulated surface that uses the Delauny algorithm or a similar algorithm complemented with consideration of stoplines (stopLines), breaklines (breakLines), and maximum length of triangle sides (maxLength). controlPoint shall contain a set of the positions (three or more) used as posts for this TIN (corners of the triangles in the TIN). See ISO 19107:2003, 6.4.39 for details.</documentation>
798
		</annotation>
799
	</element>
800
	<complexType name="LineStringSegmentArrayPropertyType">
801
		<annotation>
802
			<documentation>gml:LineStringSegmentArrayPropertyType provides a container for line strings.</documentation>
803
		</annotation>
804
		<sequence minOccurs="0" maxOccurs="unbounded">
805
			<element ref="gml:LineStringSegment"/>
806
		</sequence>
807
	</complexType>
808
	<complexType name="AbstractSolidType">
809
		<annotation>
810
			<documentation>gml:AbstractSolidType is an abstraction of a solid to support the different levels of complexity. The solid may always be viewed as a geometric primitive, i.e. is contiguous.</documentation>
811
		</annotation>
812
		<complexContent>
813
			<extension base="gml:AbstractGeometricPrimitiveType"/>
814
		</complexContent>
815
	</complexType>
816
	<element name="AbstractSolid" type="gml:AbstractSolidType" abstract="true" substitutionGroup="gml:AbstractGeometricPrimitive">
817
		<annotation>
818
			<documentation>The AbstractSolid element is the abstract head of the substituition group for all (continuous) solid elements.</documentation>
819
		</annotation>
820
	</element>
821
	<complexType name="SolidPropertyType">
822
		<annotation>
823
			<documentation>A property that has a solid as its value domain may either be an appropriate geometry element encapsulated in an element of this type or an XLink reference to a remote geometry element (where remote includes geometry elements located elsewhere in the same document). Either the reference or the contained element shall be given, but neither both nor none.</documentation>
824
		</annotation>
825
		<sequence minOccurs="0">
826
			<element ref="gml:AbstractSolid"/>
827
		</sequence>
828
		<attributeGroup ref="gml:AssociationAttributeGroup"/>
829
		<attributeGroup ref="gml:OwnershipAttributeGroup"/>
830
	</complexType>
831
	<element name="solidProperty" type="gml:SolidPropertyType">
832
		<annotation>
833
			<documentation>This property element either references a solid via the XLink-attributes or contains the solid element. solidProperty is the predefined property which may be used by GML Application Schemas whenever a GML feature has a property with a value that is substitutable for AbstractSolid.</documentation>
834
		</annotation>
835
	</element>
836
	<complexType name="SolidArrayPropertyType">
837
		<annotation>
838
			<documentation>gml:SolidArrayPropertyType is a container for an array of solids. The elements are always contained in the array property, referencing geometry elements or arrays of geometry elements is not supported.</documentation>
839
		</annotation>
840
		<sequence minOccurs="0" maxOccurs="unbounded">
841
			<element ref="gml:AbstractSolid"/>
842
		</sequence>
843
		<attributeGroup ref="gml:OwnershipAttributeGroup"/>
844
	</complexType>
845
	<element name="solidArrayProperty" type="gml:SolidArrayPropertyType">
846
		<annotation>
847
			<documentation>This property element contains a list of solid elements. solidArrayProperty is the predefined property which may be used by GML Application Schemas whenever a GML feature has a property with a value that is substitutable for a list of AbstractSolid.</documentation>
848
		</annotation>
849
	</element>
850
	<complexType name="SolidType">
851
		<complexContent>
852
			<extension base="gml:AbstractSolidType">
853
				<sequence>
854
					<element name="exterior" type="gml:ShellPropertyType" minOccurs="0"/>
855
					<element name="interior" type="gml:ShellPropertyType" minOccurs="0" maxOccurs="unbounded"/>
856
				</sequence>
857
			</extension>
858
		</complexContent>
859
	</complexType>
860
	<element name="Solid" type="gml:SolidType" substitutionGroup="gml:AbstractSolid">
861
		<annotation>
862
			<documentation>A solid is the basis for 3-dimensional geometry. The extent of a solid is defined by the boundary surfaces as specified in ISO 19107:2003, 6.3.18. exterior specifies the outer boundary, interior the inner boundary of the solid.</documentation>
863
		</annotation>
864
	</element>
865
	<complexType name="ShellType">
866
		<sequence>
867
			<element ref="gml:surfaceMember" maxOccurs="unbounded"/>
868
		</sequence>
869
		<attributeGroup ref="gml:AggregationAttributeGroup"/>
870
	</complexType>
871
	<element name="Shell" type="gml:ShellType" substitutionGroup="gml:AbstractObject">
872
		<annotation>
873
			<documentation>A shell is used to represent a single connected component of a solid boundary as specified in ISO 19107:2003, 6.3.8.
874
Every gml:surfaceMember references or contains one surface, i.e. any element which is substitutable for gml:AbstractSurface. In the context of a shell, the surfaces describe the boundary of the solid. 
875
If provided, the aggregationType attribute shall have the value “set”.
876
</documentation>
877
		</annotation>
878
	</element>
879
	<element name="surfaceMember" type="gml:SurfacePropertyType">
880
		<annotation>
881
			<documentation>This property element either references a surface via the XLink-attributes or contains the surface element. A surface element is any element, which is substitutable for gml:AbstractSurface.</documentation>
882
		</annotation>
883
	</element>
884
	<complexType name="ShellPropertyType">
885
		<annotation>
886
			<documentation>A property with the content model of gml:ShellPropertyType encapsulates a shell to represent a component of a solid boundary.</documentation>
887
		</annotation>
888
		<sequence>
889
			<element ref="gml:Shell"/>
890
		</sequence>
891
	</complexType>
892
</schema>
(26-26/54)