<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:gr="https://www.arimr.gov.pl/lpis/geometrie/referencyjne"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:gml="http://www.opengis.net/gml/3.2"
            targetNamespace="https://www.arimr.gov.pl/lpis/geometrie/referencyjne"
            attributeFormDefault="unqualified"
            elementFormDefault="qualified"
            version="1.0">
	<!-- import GML -->
	<xsd:import namespace="http://www.opengis.net/gml/3.2"
	            schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>
	<!-- dozwolony układ odniesienia -->
	<xsd:simpleType name="AllowedSRS">
		<xsd:restriction base="xsd:anyURI">
			<xsd:enumeration value="urn:ogc:def:crs:EPSG::2180"/>
			<xsd:enumeration value="urn:ogc:def:crs:EPSG::4326"/>
			<xsd:enumeration value="EPSG:2180"/>
			<xsd:enumeration value="EPSG:4326"/>
		</xsd:restriction>
	</xsd:simpleType>
	<!-- PointType -->
	<xsd:complexType name="PointType">
		<xsd:complexContent>
			<xsd:restriction base="gml:PointType">
				<xsd:sequence>
					<xsd:choice>
						<xsd:element ref="gml:pos"/>
						<xsd:element ref="gml:coordinates"/>
					</xsd:choice>
				</xsd:sequence>
				<xsd:attribute name="srsName"
				               type="gr:AllowedSRS"
				               use="required"/>
			</xsd:restriction>
		</xsd:complexContent>
	</xsd:complexType>
	<!-- MultiPointType -->
	<xsd:complexType name="MultiPointType">
		<xsd:complexContent>
			<xsd:restriction base="gml:MultiPointType">
				<xsd:sequence>
					<xsd:element ref="gml:pointMember"
					             minOccurs="0"
					             maxOccurs="unbounded"/>
					<xsd:element ref="gml:pointMembers"
					             minOccurs="0"/>
				</xsd:sequence>
				<xsd:attribute name="srsName"
				               type="gr:AllowedSRS"
				               use="required"/>
			</xsd:restriction>
		</xsd:complexContent>
	</xsd:complexType>
	<!-- LineStringType -->
	<xsd:complexType name="LineStringType">
		<xsd:complexContent>
			<xsd:restriction base="gml:LineStringType">
				<xsd:sequence>
					<xsd:choice>
						<xsd:choice minOccurs="2"
						            maxOccurs="unbounded">
							<xsd:element ref="gml:pos"/>
							<xsd:element ref="gml:pointProperty"/>
							<xsd:element ref="gml:pointRep"/>
						</xsd:choice>
						<xsd:element ref="gml:posList"/>
						<xsd:element ref="gml:coordinates"/>
					</xsd:choice>
				</xsd:sequence>
				<xsd:attribute name="srsName"
				               type="gr:AllowedSRS"
				               use="required"/>
			</xsd:restriction>
		</xsd:complexContent>
	</xsd:complexType>
	<!-- CurveType tożsamy z  LineStringType -->
	<xsd:complexType name="CurveType">
		<xsd:complexContent>
			<xsd:restriction base="gml:CurveType">
				<xsd:sequence>
					<xsd:element ref="gml:segments"/>
				</xsd:sequence>
				<xsd:attribute name="srsName"
				               type="gr:AllowedSRS"
				               use="required"/>
			</xsd:restriction>
		</xsd:complexContent>
	</xsd:complexType>
	<!-- MultiCurveType tożsamy MultiLineStringType -->
	<xsd:complexType name="MultiCurveType">
		<xsd:complexContent>
			<xsd:restriction base="gml:MultiCurveType">
				<xsd:sequence>
					<xsd:element ref="gml:curveMember"
					             minOccurs="0"
					             maxOccurs="unbounded"/>
					<xsd:element ref="gml:curveMembers"
					             minOccurs="0"/>
				</xsd:sequence>
				<xsd:attribute name="srsName"
				               type="gr:AllowedSRS"
				               use="required"/>
			</xsd:restriction>
		</xsd:complexContent>
	</xsd:complexType>
	<!-- PolygonType -->
	<xsd:complexType name="PolygonType">
		<xsd:complexContent>
			<xsd:restriction base="gml:PolygonType">
				<xsd:sequence>
					<xsd:element ref="gml:exterior"
					             minOccurs="0"/>
					<xsd:element ref="gml:interior"
					             minOccurs="0"
					             maxOccurs="unbounded"/>
				</xsd:sequence>
				<xsd:attribute name="srsName"
				               type="gr:AllowedSRS"
				               use="required"/>
			</xsd:restriction>
		</xsd:complexContent>
	</xsd:complexType>
	<!-- SurfaceType tożsamy PolygonType -->
	<xsd:complexType name="SurfaceType">
		<xsd:complexContent>
			<xsd:restriction base="gml:PolygonType">
				<xsd:sequence>
					<xsd:element ref="gml:patches"/>
				</xsd:sequence>
				<xsd:attribute name="srsName"
				               type="gr:AllowedSRS"
				               use="required"/>
			</xsd:restriction>
		</xsd:complexContent>
	</xsd:complexType>
	<!-- MultiSurfaceType tożsamy MultiPolygonType -->
	<xsd:complexType name="MultiSurfaceType">
		<xsd:complexContent>
			<xsd:restriction base="gml:MultiSurfaceType">
				<xsd:sequence>
					<xsd:element ref="gml:surfaceMember"
					             minOccurs="0"
					             maxOccurs="unbounded"/>
					<xsd:element ref="gml:surfaceMembers"
					             minOccurs="0"/>
				</xsd:sequence>
				<xsd:attribute name="srsName"
				               type="gr:AllowedSRS"
				               use="required"/>
			</xsd:restriction>
		</xsd:complexContent>
	</xsd:complexType>
	<!-- GeometryPropertyType -->
	<xsd:complexType name="GeometryPropertyType">
		<xsd:choice>
			<xsd:element name="Point"
			             type="gr:PointType"/>
			<xsd:element name="MultiPoint"
			             type="gr:MultiPointType"/>
			<xsd:element name="LineString"
			             type="gr:LineStringType"/>
			<xsd:element name="Curve"
			             type="gr:CurveType"/>
			<xsd:element name="MultiCurve"
			             type="gr:MultiCurveType"/>
			<xsd:element name="Polygon"
			             type="gr:PolygonType"/>
			<xsd:element name="Surface"
			             type="gr:SurfaceType"/>
			<xsd:element name="MultiSurface"
			             type="gr:MultiSurfaceType"/>
		</xsd:choice>
	</xsd:complexType>
	<!-- IdPropertyType -->
	<xsd:simpleType name="IdPropertyType">
		<xsd:restriction base="xsd:long">
			<xsd:totalDigits value="10"/>
		</xsd:restriction>
	</xsd:simpleType>
	<!-- GeometriaReferencyjnaType -->
	<xsd:complexType name="GeometriaReferencyjnaType">
		<xsd:complexContent>
			<xsd:extension base="gml:AbstractFeatureType">
				<xsd:sequence>
					<xsd:element name="geometria"
					             type="gr:GeometryPropertyType"
					             nillable="false">
						<xsd:annotation>
							<xsd:documentation>Geometria referencyjna</xsd:documentation>
						</xsd:annotation>
					</xsd:element>
					<xsd:element name="identyfikator"
					             type="gr:IdPropertyType"
					             nillable="false">
						<xsd:annotation>
							<xsd:documentation>Identyfikator geometrii referencyjnej</xsd:documentation>
						</xsd:annotation>
					</xsd:element>
					<xsd:element minOccurs="1"
					             name="etykieta"
					             type="xsd:string">
						<xsd:annotation>
							<xsd:documentation>Etykieta wyświetlana / identyfikatora</xsd:documentation>
						</xsd:annotation>
					</xsd:element>
					<xsd:element minOccurs="0"
					             name="dlugosc"
					             type="xsd:decimal">
						<xsd:annotation>
							<xsd:documentation>Długość elementu dla obiektu liniowego</xsd:documentation>
						</xsd:annotation>
					</xsd:element>
					<xsd:element minOccurs="0"
					             name="powierzchnia"
					             type="xsd:decimal">
						<xsd:annotation>
							<xsd:documentation>Powierzchnia elementu dla obiektu powierzchniowego</xsd:documentation>
						</xsd:annotation>
					</xsd:element>
				</xsd:sequence>
				<xsd:attribute name="fid"
				               type="xsd:string"
				               use="required">
					<xsd:annotation>
						<xsd:documentation>Unikalny identyfikator obiektu</xsd:documentation>
					</xsd:annotation>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<!-- GeometriaReferencyjna -->
	<xsd:element name="GeometriaReferencyjna"
	             type="gr:GeometriaReferencyjnaType"
	             substitutionGroup="gml:AbstractFeature"/>
</xsd:schema>