<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml/3.2" xmlns:bd="http://bfr-wasserversorgung.de/bestand" xmlns:hd="http://bfr-wasserversorgung.de/hydraulik" targetNamespace="http://bfr-wasserversorgung.de/hydraulik" elementFormDefault="qualified" version="1.0.0">
	<import namespace="http://www.opengis.net/gml/3.2" schemaLocation="http://schemas.opengis.net/gml/3.2.1/gml.xsd"/>
	<import namespace="http://bfr-wasserversorgung.de/bestand" schemaLocation="https://www.bfr-wasserversorgung.de/assets/1.0.0/Bestand_1.0.0.xsd"/>
	<simpleType name="AlgorithmusType">
		<restriction base="string">
			<enumeration value="HW">
				<annotation>
					<documentation>Hazen-Williams</documentation>
				</annotation>
			</enumeration>
			<enumeration value="DW">
				<annotation>
					<documentation>Darcy-Weisbach</documentation>
				</annotation>
			</enumeration>
			<enumeration value="CM">
				<annotation>
					<documentation>Chezy-Manning</documentation>
				</annotation>
			</enumeration>
			<enumeration value="Anderer"/>
		</restriction>
	</simpleType>
	<element name="Berechnungsergebnisse" type="hd:BerechnungsergebnisseType" substitutionGroup="gml:AbstractGML">
		<annotation>
			<documentation>Objekte vom Typ "Berechnungsergebnisse" enthalten die Ergebnisse einer Berechnung für einen Lastfall sowie zusätzliche Metadaten zum verwendeten Algorithmus bzw. zur verwendeten Software.</documentation>
		</annotation>
	</element>
	<complexType name="BerechnungsergebnisseType">
		<complexContent>
			<extension base="gml:AbstractGMLType">
				<sequence>
					<element name="Algorithmus" type="hd:AlgorithmusType" minOccurs="0"/>
					<element name="Bezeichnung" type="string" minOccurs="0"/>
					<element name="Ergebnis" minOccurs="0" maxOccurs="unbounded">
						<complexType>
							<sequence>
								<element ref="hd:HydraulikobjektErgebnis"/>
							</sequence>
						</complexType>
					</element>
					<element name="erzeugtDurch" minOccurs="0">
						<complexType>
							<complexContent>
								<extension base="gml:AbstractMetadataPropertyType">
									<sequence minOccurs="0">
										<element ref="hd:Software"/>
									</sequence>
									<attributeGroup ref="gml:AssociationAttributeGroup"/>
								</extension>
							</complexContent>
						</complexType>
					</element>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<simpleType name="BetriebsstatusType">
		<restriction base="string">
			<enumeration value="Auf/An">
				<annotation>
					<documentation>Der Betriebsstatus Auf/An, z.B. eines Schiebers oder einer Pumpe.</documentation>
				</annotation>
			</enumeration>
			<enumeration value="Zu/Aus">
				<annotation>
					<documentation>Der Betriebsstatus Zu/Aus, z.B. eines Schiebers oder einer Pumpe.</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
	<simpleType name="ErstellungsverfahrenType">
		<restriction base="string">
			<enumeration value="gA">
				<annotation>
					<documentation>Bedarfsverteilung über gleichmäßige Aufteilung auf die Entnahmeknoten</documentation>
				</annotation>
			</enumeration>
			<enumeration value="dZ">
				<annotation>
					<documentation>Bedarfsverteilung über detaillierte Zuordnung der Verbrauchswerte</documentation>
				</annotation>
			</enumeration>
			<enumeration value="MM">
				<annotation>
					<documentation>Bedarfsverteilung proportional zu den Längen der Rohrleitungen (=Metermengenwert)</documentation>
				</annotation>
			</enumeration>
			<enumeration value="EZ">
				<annotation>
					<documentation>Bedarfsverteilung über Einzugsflächen der Entnahmeknoten</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
	<simpleType name="HerkunftType">
		<restriction base="string">
			<enumeration value="MD">
				<annotation>
					<documentation>Messdaten</documentation>
				</annotation>
			</enumeration>
			<enumeration value="JW">
				<annotation>
					<documentation>Jahreswerte</documentation>
				</annotation>
			</enumeration>
			<enumeration value="Lit">
				<annotation>
					<documentation>Annahmen aus der Literatur</documentation>
				</annotation>
			</enumeration>
			<enumeration value="MW">
				<annotation>
					<documentation>Monatswerte</documentation>
				</annotation>
			</enumeration>
			<enumeration value="An">
				<annotation>
					<documentation>Anforderung (Regelwerke)</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
	<element name="Hydraulik" type="hd:HydraulikType" substitutionGroup="gml:AbstractGML">
		<annotation>
			<documentation>Hydraulikdaten bestehen aus Hydraulikobjekten und Lastfällen.</documentation>
		</annotation>
	</element>
	<complexType name="HydraulikType">
		<complexContent>
			<extension base="gml:AbstractGMLType">
				<sequence>
					<element name="Lastfall" maxOccurs="unbounded">
						<complexType>
							<complexContent>
								<extension base="gml:AbstractMemberType">
									<sequence>
										<element ref="hd:Lastfall"/>
									</sequence>
								</extension>
							</complexContent>
						</complexType>
					</element>
					<element name="Hydraulikobjekt" maxOccurs="unbounded">
						<complexType>
							<complexContent>
								<extension base="gml:AbstractFeatureMemberType">
									<sequence>
										<element ref="hd:Hydraulikobjekt"/>
									</sequence>
								</extension>
							</complexContent>
						</complexType>
					</element>
				</sequence>
				<attribute name="schemaVersion" type="string" use="required">
					<annotation>
						<documentation>Angabe der Version des Austauschformats. Identisch zum Wert des Attributes "version" des verwendeten XML-Schemas.</documentation>
					</annotation>
				</attribute>
			</extension>
		</complexContent>
	</complexType>
	<element name="Hydraulikobjekt" type="hd:HydraulikobjektType" abstract="true" substitutionGroup="gml:AbstractFeature">
		<annotation>
			<documentation>Der Feature Type "Hydraulikobjekt" dienst als abstrakte Oberklasse für alle Feature Types die Hydraulikobjekte repräsentieren. Hydraulikobjekte sind entweder Knoten oder Kanten des Netzwerkes. Wenn ein Hydraulikobjekt einem Wasserversorgungsobjekt des realen Bestands entspricht, so sollte dieses Bestandsobjekt im Attribut "repräsentiert" referenziert werden.</documentation>
		</annotation>
	</element>
	<complexType name="HydraulikobjektType" abstract="true">
		<complexContent>
			<extension base="gml:AbstractFeatureType">
				<sequence>
					<element name="Bezeichnung" type="string" minOccurs="0"/>
					<element name="repräsentiert" type="gml:ReferenceType" minOccurs="0">
						<annotation>
							<appinfo>
								<targetElement xmlns="http://www.opengis.net/gml/3.2">bd:Wasserversorgungsobjekt</targetElement>
							</appinfo>
						</annotation>
					</element>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="HydraulikobjektErgebnis" type="hd:HydraulikobjektErgebnisType" abstract="true" substitutionGroup="gml:AbstractObject">
		<annotation>
			<documentation>Objekte von Unterklassen dieses abstrakten Feature Types enthalten das Berechnungsergebnis für genau ein Hydraulikobjekt.</documentation>
		</annotation>
	</element>
	<complexType name="HydraulikobjektErgebnisType" abstract="true">
		<sequence>
			<element name="HydraulikObjekt" type="gml:ReferenceType">
				<annotation>
					<appinfo>
						<targetElement xmlns="http://www.opengis.net/gml/3.2">hd:Hydraulikobjekt</targetElement>
					</appinfo>
				</annotation>
			</element>
		</sequence>
	</complexType>
	<element name="Hydraulikstatus" type="hd:HydraulikstatusType" substitutionGroup="hd:Parameter">
		<annotation>
			<documentation>Objekte vom Typ Hydraulikstatus enthalten den Betriebsstatus von Hydraulikobjekten wie z.B. Schieber (Auf/Zu) oder Pumpen (An/Aus).</documentation>
		</annotation>
	</element>
	<complexType name="HydraulikstatusType">
		<complexContent>
			<extension base="hd:ParameterType">
				<sequence>
					<element name="Betriebsstatus" type="hd:BetriebsstatusType"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="Hydraulikwert" type="hd:HydraulikwertType" substitutionGroup="hd:Parameter">
		<annotation>
			<documentation>Objekte vom Typ Hydraulikwert enthalten den numerischen Parameter für genau ein Hydraulikobjekt.</documentation>
		</annotation>
	</element>
	<complexType name="HydraulikwertType">
		<complexContent>
			<extension base="hd:ParameterType">
				<sequence>
					<element name="Parameter" type="hd:ParameterTypType"/>
					<element name="Wert" type="gml:MeasureType">
						<annotation>
							<documentation>Einheiten:
l/s bei Entnahmemenge (Parameter=EM), 
l/s bei Einspeisung (Parameter=ES)
bar bei Druck (Parameter=D),
mNHN bei Wasserstand (Parameter = WS)</documentation>
						</annotation>
					</element>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="Kante" type="hd:KanteType" substitutionGroup="hd:Hydraulikobjekt">
		<annotation>
			<documentation>Der Feature Type "Kante" repräsentiert die Kanten des Hydrauliknetzes, i.d.R. Wasserleitungen. Handelt es sich um ein Objekt das eins zu eins einer Wasserleitung im Bestadsdatensatz entspricht und ist daher das Attribut "repräsentiert" vorhanden, so sind die Dokumentation der Netzverknüpfung im Attribut "verbindet" sowie die Attribute Nennweite und Rauheit  nicht zwingend erforderlich, solange diese Informationen aus dem referenzierten Bestandsdatenobjekt abgeleitet werden kann. Handelt es sich jedoch um ein künstliches Kantenobjekt das keinem Bestandsobjekt direkt entspricht, beispielsweise die Abstraktion eines Teils des Bestandsnetzes zu einer einzelnen Leitung, so sind die genannten Attribute notwendig.</documentation>
		</annotation>
	</element>
	<complexType name="KanteType">
		<complexContent>
			<extension base="hd:HydraulikobjektType">
				<sequence>
					<element name="verbindet" type="gml:ReferenceType" minOccurs="0" maxOccurs="2">
						<annotation>
							<appinfo>
								<targetElement xmlns="http://www.opengis.net/gml/3.2">hd:Knoten</targetElement>
							</appinfo>
						</annotation>
					</element>
					<element name="Rauheit" type="gml:MeasureType" minOccurs="0">
						<annotation>
							<documentation>Einheit: mm</documentation>
						</annotation>
					</element>
					<element name="Nennweite" type="integer">
						<annotation>
							<documentation>Einheit: mm</documentation>
						</annotation>
					</element>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="KantenErgebnis" type="hd:KantenErgebnisType" substitutionGroup="hd:HydraulikobjektErgebnis">
		<annotation>
			<documentation>Objekte dieses Types enthalten Ergebnisse für Kanten des Hydrauliknetzes (Druckverlust, Durchfluss, Energiegefälle, Fliessgeschwindigkeit).</documentation>
		</annotation>
	</element>
	<complexType name="KantenErgebnisType">
		<complexContent>
			<extension base="hd:HydraulikobjektErgebnisType">
				<sequence>
					<element name="Druckverlust" type="gml:MeasureType" minOccurs="0">
						<annotation>
							<documentation>Einheit: bar</documentation>
						</annotation>
					</element>
					<element name="Durchfluss" type="gml:MeasureType" minOccurs="0">
						<annotation>
							<documentation>Einheit: l/s</documentation>
						</annotation>
					</element>
					<element name="Energiegefälle" type="gml:MeasureType" minOccurs="0">
						<annotation>
							<documentation>Einheit: &amp;#176;/oo 
(Promille)</documentation>
						</annotation>
					</element>
					<element name="Fliessgeschwindigkeit" type="gml:MeasureType" minOccurs="0">
						<annotation>
							<documentation>Einheit: m/s</documentation>
						</annotation>
					</element>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="Knoten" type="hd:KnotenType" substitutionGroup="hd:Hydraulikobjekt">
		<annotation>
			<documentation>Der Feature Type "Knoten" repräsentiert die Knoten des Hydrauliknetzes. Handelt es sich um ein Objekt das eins zu eins einem Objekt im Bestandsdatensatz entspricht und ist daher das Attribut "repräsentiert" vorhanden, so ist die Dokumentation der Attribute "Höhe", "Verlustbeiwert" und "Position"  nicht zwingend erforderlich, solange diese Informationen aus dem referenzierten Bestandsdatenobjekt abgeleitet werden können. Handelt es sich jedoch um ein künstliches Knotenobjekt das keinem Bestandsobjekt direkt entspricht, beispielsweise die Abstraktion eines Teils des Bestandsnetzes zu einem einzelnen Knoten, so sind die genannten Attribute notwendig.</documentation>
		</annotation>
	</element>
	<complexType name="KnotenType">
		<complexContent>
			<extension base="hd:HydraulikobjektType">
				<sequence>
					<element name="Position" type="gml:PointPropertyType" minOccurs="0"/>
					<element name="Höhe" type="gml:MeasureType" minOccurs="0">
						<annotation>
							<documentation>Einheit: mNHN</documentation>
						</annotation>
					</element>
					<element name="Verlustbeiwert" type="double" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="KnotenErgebnis" type="hd:KnotenErgebnisType" substitutionGroup="hd:HydraulikobjektErgebnis">
		<annotation>
			<documentation>Objekte dieses Types enthalten Ergebnisse für Knoten des Hydrauliknetzes (Druck und Wasseralter).</documentation>
		</annotation>
	</element>
	<complexType name="KnotenErgebnisType">
		<complexContent>
			<extension base="hd:HydraulikobjektErgebnisType">
				<sequence>
					<element name="Druck" type="gml:MeasureType" minOccurs="0">
						<annotation>
							<documentation>Einheit: bar</documentation>
						</annotation>
					</element>
					<element name="Wasseralter" type="gml:MeasureType" minOccurs="0">
						<annotation>
							<documentation>Einheit: h</documentation>
						</annotation>
					</element>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<element name="Lastfall" type="hd:LastfallType" substitutionGroup="gml:AbstractGML">
		<annotation>
			<documentation>Der Typ "Lastfall" kann zur Dokumentation der Eingaben (Parameter) und Ausgaben (Ergebnisse) von Berechnungen genutzt werden.</documentation>
		</annotation>
	</element>
	<complexType name="LastfallType">
		<complexContent>
			<extension base="gml:AbstractGMLType">
				<sequence>
					<element name="Typ" type="hd:LastfallTypType" minOccurs="0"/>
					<element name="Parameter" minOccurs="0" maxOccurs="unbounded">
						<complexType>
							<sequence>
								<element ref="hd:Parameter"/>
							</sequence>
						</complexType>
					</element>
					<element name="Ergebnisse" minOccurs="0" maxOccurs="1">
						<complexType>
							<complexContent>
								<extension base="gml:AbstractMemberType">
									<sequence minOccurs="0">
										<element ref="hd:Berechnungsergebnisse"/>
									</sequence>
									<attributeGroup ref="gml:AssociationAttributeGroup"/>
								</extension>
							</complexContent>
						</complexType>
					</element>
					<element name="Bemerkung" type="string" minOccurs="0"/>
					<element name="Verbrauchswert" type="hd:VerbrauchswertTypType" minOccurs="0"/>
					<element name="Bezeichnung" type="string" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<simpleType name="LastfallTypType">
		<restriction base="string">
			<enumeration value="LW">
				<annotation>
					<documentation>Löschwassernachweis</documentation>
				</annotation>
			</enumeration>
			<enumeration value="ST">
				<annotation>
					<documentation>Stagnation (=Wasseralter)</documentation>
				</annotation>
			</enumeration>
			<enumeration value="SL">
				<annotation>
					<documentation>Sonstiger Lastfall</documentation>
				</annotation>
			</enumeration>
			<enumeration value="VD">
				<annotation>
					<documentation>Versorgungsdruck</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
	<element name="Parameter" type="hd:ParameterType" abstract="true" substitutionGroup="gml:AbstractObject">
		<annotation>
			<documentation>Objekte von Unterklassen des abstrakten Feature Types "Parameter" definieren den für die Berechnung angesetzten Parameter für genau ein Hydraulikobjekt, z.B. die Einspeisemenge für einen Einspeiseknoten oder den Status eines Schiebers (Auf/Zu).</documentation>
		</annotation>
	</element>
	<complexType name="ParameterType" abstract="true">
		<sequence>
			<element name="HydraulikObjekt" type="gml:ReferenceType">
				<annotation>
					<appinfo>
						<targetElement xmlns="http://www.opengis.net/gml/3.2">hd:Hydraulikobjekt</targetElement>
					</appinfo>
				</annotation>
			</element>
			<element name="basiertAuf" type="hd:HerkunftType" minOccurs="0"/>
			<element name="Erstellungsverfahren" type="hd:ErstellungsverfahrenType" minOccurs="0"/>
		</sequence>
	</complexType>
	<simpleType name="ParameterTypType">
		<restriction base="string">
			<enumeration value="EM">
				<annotation>
					<documentation>Entnahmemenge</documentation>
				</annotation>
			</enumeration>
			<enumeration value="ES">
				<annotation>
					<documentation>Einspeisung</documentation>
				</annotation>
			</enumeration>
			<enumeration value="D">
				<annotation>
					<documentation>Druck</documentation>
				</annotation>
			</enumeration>
			<enumeration value="WS">
				<annotation>
					<documentation>Wasserstand</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
	<element name="Software" type="hd:SoftwareType" substitutionGroup="gml:AbstractGML">
		<annotation>
			<documentation>Der Typ "Software" kann zur Dokumentation der verwendeten Software genutzt werden.</documentation>
		</annotation>
	</element>
	<complexType name="SoftwareType">
		<complexContent>
			<extension base="gml:AbstractGMLType">
				<sequence>
					<element name="Name" type="string"/>
					<element name="Version" type="string" minOccurs="0"/>
				</sequence>
			</extension>
		</complexContent>
	</complexType>
	<simpleType name="VerbrauchswertTypType">
		<restriction base="string">
			<enumeration value="MV">
				<annotation>
					<documentation>Mittlerer Verbrauch</documentation>
				</annotation>
			</enumeration>
			<enumeration value="SV">
				<annotation>
					<documentation>Spitzenverbrauch</documentation>
				</annotation>
			</enumeration>
		</restriction>
	</simpleType>
</schema>
