<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v2004 rel. 3 U (http://www.xmlspy.com) by Paul (thx) -->
<!-- edited with XML Spy v4.1 U (http://www.xmlspy.com) by Peter Reichstädter (CIO) -->
<!--Generisches Schema zum Speichern und Austauschen von Personendaten
    (c) 2001-2002 Chief Information Office Austria, Stabsstelle IKT-Strategie des Bundes, BM֖LS
    Kontakt: Peter Reichstädter (peter.reichstaedter@cio.gv.at), Arno Hollosi (arno.hollosi@cio.gv.at)
    Die freie Verwendung dieses Schemas in Applikationen (behördenintern, kommerziell, privat) ist erlaubt und erwünscht.
-->  
<!-- 
	Anpassungen für URV URSuche v3.0
	================================
	2012-09-24 sml  Auslagerung Zusatzdaten in ZusatzdatenPersonenTyp
	2012-09-20 sml  NichtNatuerlichePerson um VollzugAttributes erweitert
	2012-09-11 sml  Kardinalität EVBStatus auf 0..1 geändert
					Kardinalität TypeText von 0..n auf 0..1 geändert
	2012-08-20 hoa  AdressCode/Subcode/Objektnummer hinzugefügt
	2012-08-08 sml	Branche hinzugefügt
	2012-08-07 sml	kein mixed Content bei den Zusatzdaten mehr möglich
	2012-08-06 sml	eigener Namespace für UR-Persondata
	2012-07-05 sml	Any-Attribute und Any-Elemente nach AGII-Empfehlung durch die konkreten ersetzt.
	2012-06-14 sml	Affix wieder auf unbounded (vgl. URSucheService UDB)
 -->
<?xml-stylesheet type="text/xsl" href="getelementnames.xslt"?>

<xs:schema targetNamespace="http://reference.e-government.gv.at/namespace/persondata/de/20040201#"
	xmlns="http://reference.e-government.gv.at/namespace/persondata/de/20040201#" xmlns:xs="http://www.w3.org/2001/XMLSchema"
	xmlns:uri="http://statistik.at/namespace/ur/stammdaten/2#" xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"
	elementFormDefault="qualified" attributeFormDefault="unqualified"
	version="1.0.0">

	<!-- Import der UR-basic -->
	<xs:import namespace="http://statistik.at/namespace/ur/stammdaten/2#"
		schemaLocation="ur-basicTypes.xsd" />


	<xs:annotation>
		<xs:documentation>This version of person deploys only global elements.
			All types derived from abstract types have been replaced by
			substitution groups</xs:documentation>
	</xs:annotation>
	<!-- ### signed structure of a person ### -->
	<xs:element name="AbstractPersonData" type="AbstractPersonType">
		<xs:annotation>
			<xs:documentation>Abstraktes PersonenDaten Element, nur auf englisch
				verfügbar, nicht direkt benützen sondern PersonenDaten benutzen
			</xs:documentation>
		</xs:annotation>
	</xs:element>

	<xs:element name="PersonenDaten" type="PersonenDatenTyp"
		substitutionGroup="AbstractPersonData">
		<xs:annotation>
			<xs:documentation>Signierte Personendatenstruktur</xs:documentation>
		</xs:annotation>
	</xs:element>

	<!-- ### base type for person data ### -->
	<xs:element name="Person" type="AbstractPersonType">
		<xs:annotation>
			<xs:documentation>Abstraktes Personen Element, nur auf englisch
				verfügbar, nicht direkt benützen sondern NatuerlichePerson o.
				NichtNatuerlichePerson benutzen</xs:documentation>
		</xs:annotation>
	</xs:element>
	<!-- ### physical person and corporate body ### -->
	<xs:element name="NatuerlichePerson" type="NatuerlichePersonTyp"
		substitutionGroup="Person">
		<xs:annotation>
			<xs:documentation>Natuerliche Person entspricht PhysicalPerson, ist
				eine Ableitung von Person (abstract)</xs:documentation>
		</xs:annotation>
	</xs:element>

	<xs:element name="NichtNatuerlichePerson" type="NichtNatuerlichePersonTyp"
		substitutionGroup="Person">
		<xs:annotation>
			<xs:documentation>NichtNatuerlichePerson entspricht CorporatzeBody,
				ist Ableitung von Person (abstract)</xs:documentation>
		</xs:annotation>
	</xs:element>

	<!--### complex child elements of person, also available as standalone ### -->
	<xs:element name="PersonenName" type="PersonenNameTyp">
		<xs:annotation>
			<xs:documentation>Container für diverse Namensbestandteile,
				entspricht Name in der englischen Version</xs:documentation>
		</xs:annotation>
	</xs:element>



	<!-- ### adress data for various types of communications ### -->
	<xs:element name="Address" type="AbstractAddressType">
		<xs:annotation>
			<xs:documentation>Abstraktes Address Element, nur auf Englisch
				verfügbar, nicht direkt benützen sondern PostAdresse,
				InternetAdresse, etc benutzen</xs:documentation>
		</xs:annotation>
	</xs:element>
	<xs:element name="PostAdresse" type="PostAdresseTyp"
		substitutionGroup="Address">
		<xs:annotation>
			<xs:documentation>Post oder ZMR Adresse, entspricht PostalAddress,
				ist Ableitung von Address (abstract)</xs:documentation>
		</xs:annotation>
	</xs:element>

	<xs:element name="TypisiertePostAdresse" type="TypisiertePostAdresseTyp"
		substitutionGroup="Address">
		<xs:annotation>
			<xs:documentation>Typisierte Post oder ZMRAdresse, entspricht
				TypedPostalAddress, ist Ableitung von Address (abstract)
			</xs:documentation>
		</xs:annotation>
	</xs:element>

	<!--### elements of simple type #### -->
	<xs:element name="Geburtsdatum" type="GeburtsdatumTyp">
		<xs:annotation>
			<xs:documentation>Geburtsdatum, entspricht DateOfBirth
			</xs:documentation>
		</xs:annotation>
	</xs:element>


	<!--### Complex types ### -->


	<!-- UR Spezialisierung des PersonenDatenTyp -->
	<xs:complexType name="PersonenDatenTyp">
		<xs:annotation>
			<xs:documentation>Container um eine Person und ihre Adressen zu
				speichern</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="AbstractPersonType">
				<xs:sequence>
					<!-- UR-Spezialisierung -->
					<xs:element ref="NichtNatuerlichePerson" />

					<!-- UR-Spezialisierung -->
					<xs:element ref="TypisiertePostAdresse" minOccurs="0"
						maxOccurs="unbounded" />

					<xs:element name="Zusatzdaten" minOccurs="0">
						<!-- UR Erweiterung: kein mixed Content bei den Zusatzdaten -->
						<xs:complexType mixed="false">
							<xs:sequence minOccurs="0">
								<!-- Erweiterung UR -->
								<xs:element ref="uri:AendDat" minOccurs="0"
									maxOccurs="1" />
								<xs:element ref="uri:Bestandszeitraum" minOccurs="0"
									maxOccurs="unbounded" />
								<xs:element ref="uri:Bestandsnachweis" minOccurs="0"
									maxOccurs="unbounded" />
								<xs:element ref="uri:Vertretung" minOccurs="0"
									maxOccurs="unbounded" />
								<xs:element ref="uri:Rechtstatsachen" minOccurs="0"
									maxOccurs="unbounded" />
								<xs:element ref="uri:Branche" minOccurs="0"
									maxOccurs="unbounded" />
								<xs:element name="PersonenDaten" type="PersonenDatenZusatzdatenTyp"
									minOccurs="0" maxOccurs="unbounded" />
								<xs:element ref="uri:Vollzug" minOccurs="0"
									maxOccurs="unbounded" />
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<!-- UR Spezialisierung für natürliche und nichtnatürliche Personen in den 
		Zusatzdaten -->
	<xs:complexType name="PersonenDatenZusatzdatenTyp">
		<xs:annotation>
			<xs:documentation>Container um eine Person und ihre Adressen zu
				speichern</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="AbstractPersonType">
				<xs:sequence>
					<!-- UR-Spezialisierung -->
					<xs:choice minOccurs="0">
						<xs:element ref="NichtNatuerlichePerson" />
						<xs:element ref="NatuerlichePerson" />
					</xs:choice>
					<!-- UR-Spezialisierung -->
					<xs:element ref="TypisiertePostAdresse" minOccurs="0"
						maxOccurs="unbounded" />

					 <xs:element name="Zusatzdaten" type="ZusatzdatenPersonenTyp" minOccurs="0"/>
					
					
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>

	<xs:complexType name="ZusatzdatenPersonenTyp">
		
							<xs:sequence>
								<!-- Erweiterung UR -->
								<xs:element ref="uri:EvbStatus" minOccurs="0"
									maxOccurs="1" />
								<xs:element ref="uri:Funktion" minOccurs="0"
									maxOccurs="unbounded" />
								<xs:element ref="uri:Rechtstatsachen" minOccurs="0"
									maxOccurs="unbounded" />
							</xs:sequence>
					
	</xs:complexType>
	<xs:complexType name="IdentificationType">
		<xs:annotation>
			<xs:documentation>Container für beliebige Identifikationsmerkmale,
				besteht aus Type und Value Unterelementen, aus technischen Gründen
				nur auf Englisch verfügbar</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Value">
				<xs:annotation>
					<xs:documentation>actual value of the identifier.
					</xs:documentation>
				</xs:annotation>
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:string">
							<xs:attribute name="Id" type="xs:ID" use="optional" />
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="Type" type="xs:anyURI">
				<xs:annotation>
					<xs:documentation>type of value (eg 'ZMR', 'SV-Nummer',
						'Martrikelnummer', database identification, ...)
					</xs:documentation>
				</xs:annotation>
			</xs:element>

			<!-- Erweiterung UR -->
			<xs:element ref="uri:TypeText" minOccurs="0" maxOccurs="1" />
			<xs:element ref="uri:Beginn" minOccurs="0" maxOccurs="1" />
			<xs:element ref="uri:Ende" minOccurs="0" maxOccurs="1" />

		</xs:sequence>
		<xs:attribute name="Id" type="xs:ID" use="optional" />
	</xs:complexType>



	<xs:complexType name="AbstractPersonType">
		<xs:annotation>
			<xs:documentation>main structure of person data</xs:documentation>
		</xs:annotation>
		<xs:choice minOccurs="0">
			<xs:element name="Identification" type="IdentificationType"
				minOccurs="0" maxOccurs="unbounded">
				<xs:annotation>
					<xs:documentation>unique identification entities</xs:documentation>
				</xs:annotation>
			</xs:element>
		</xs:choice>
		<xs:attribute name="Id" type="xs:ID" use="optional" />
	</xs:complexType>


	<xs:complexType name="NatuerlichePersonTyp">
		<xs:annotation>
			<xs:documentation>entspricht PhysicalPersonType</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="AbstractPersonType">
				<xs:sequence minOccurs="0">
					<xs:element ref="PersonenName" minOccurs="0" />
					<xs:element ref="Geburtsdatum" minOccurs="0" />
				</xs:sequence>
				<!-- Erweiterung UR -->
				<xs:attributeGroup ref="uri:VollzugAttributes" />
			</xs:extension>

		</xs:complexContent>
	</xs:complexType>




	<xs:complexType name="NichtNatuerlichePersonTyp">
		<xs:annotation>
			<xs:documentation>entspricht CorporateBodyType</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="AbstractPersonType">
				<xs:sequence minOccurs="0">
					<xs:element name="VollerName" type="xs:token" minOccurs="0">
						<xs:annotation>
							<xs:documentation>name of corporate body (whole name)
							</xs:documentation>
						</xs:annotation>
					</xs:element>


					<xs:element name="Rechtsform" type="xs:anyURI"
						minOccurs="0">
						<xs:annotation>
							<xs:documentation>type of company (eg AG, OHG, ...)
							</xs:documentation>
						</xs:annotation>
					</xs:element>


					<!-- Erweiterung UR -->
					<xs:element ref="uri:UntName" minOccurs="0" maxOccurs="unbounded" />
					<xs:element ref="uri:Rechtsform" minOccurs="0"
						maxOccurs="unbounded" />
				</xs:sequence>
				<!-- Erweiterung UR -->
				<xs:attributeGroup ref="uri:VollzugAttributes" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>



	<xs:complexType name="PersonenNameTyp">
		<xs:annotation>
			<xs:documentation>entspricht NameType</xs:documentation>
		</xs:annotation>
		<xs:sequence>
			<xs:element name="Vorname" type="xs:string" minOccurs="1"
				maxOccurs="1" />
			<xs:element name="Familienname" minOccurs="1" maxOccurs="1">
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:string">
							<xs:attribute name="primaer" default="undefiniert">
								<xs:simpleType>
									<xs:restriction base="xs:string">
										<xs:enumeration value="wahr" />
										<xs:enumeration value="falsch" />
										<xs:enumeration value="undefiniert" />
									</xs:restriction>
								</xs:simpleType>
							</xs:attribute>
							<xs:attribute name="prefix" type="xs:string" />
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
			<xs:element name="Affix" minOccurs="0" maxOccurs="unbounded">
				<xs:complexType>
					<xs:simpleContent>
						<xs:extension base="xs:string">
							<xs:attribute name="typ" use="optional">
								<xs:simpleType>
									<xs:restriction base="xs:string">
										<xs:enumeration value="akademischerGrad" />
										<xs:enumeration value="Adelstitel" />
										<xs:enumeration value="FamiliennamenAffix" />
										<xs:enumeration value="Anrede" />
										<xs:enumeration value="Generation" />
										<xs:enumeration value="Qualifikation" />
									</xs:restriction>
								</xs:simpleType>
							</xs:attribute>
							<xs:attribute name="position" use="optional">
								<xs:simpleType>
									<xs:restriction base="xs:string">
										<xs:enumeration value="prefix" />
										<xs:enumeration value="suffix" />
									</xs:restriction>
								</xs:simpleType>
							</xs:attribute>
						</xs:extension>
					</xs:simpleContent>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
	</xs:complexType>



	<xs:complexType name="AbstractAddressType">
		<xs:annotation>
			<xs:documentation>Struktur des Abstrakten Address Elements
			</xs:documentation>
		</xs:annotation>

		<xs:attribute name="Id" type="xs:ID" use="optional" />
	</xs:complexType>



	<xs:complexType name="TypisiertePostAdresseTyp">
		<xs:annotation>
			<xs:documentation>entspricht TypedPostalAddressType
			</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="AbstractAddressType">
				<xs:sequence minOccurs="0">
					<xs:element ref="PostAdresse" />
					<!-- Erweiterung UR -->
					<xs:element ref="uri:Typ" minOccurs="1" maxOccurs="1" />
				</xs:sequence>
				<!-- Erweiterung UR -->
				<xs:attributeGroup ref="uri:VollzugAttributes" />
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>


	<xs:complexType name="PostAdresseTyp">
		<xs:annotation>
			<xs:documentation>entspricht PostalAddressType</xs:documentation>
		</xs:annotation>
		<xs:complexContent>
			<xs:extension base="AbstractAddressType">
				<xs:sequence>
					<xs:element name="Staatscode" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Staatencode, ISO Code oder internationaler Post
								code, entspricht CountryCode</xs:documentation>
						</xs:annotation>
						<xs:simpleType>
							<xs:restriction base="xs:string">
								<xs:pattern value="[A-Z]{3}" />
							</xs:restriction>
						</xs:simpleType>
					</xs:element>
					<xs:element name="Postleitzahl" type="xs:token"
						minOccurs="0">
						<xs:annotation>
							<xs:documentation>entspricht PostalCode</xs:documentation>
						</xs:annotation>
					</xs:element>

					<xs:element name="Gemeinde" type="xs:string" minOccurs="0">
						<xs:annotation>
							<xs:documentation>entspricht Municipality</xs:documentation>
						</xs:annotation>
					</xs:element>
					<xs:element name="Gemeindekennziffer" minOccurs="0" />
					<xs:element name="Ortschaft" type="xs:token" minOccurs="0" />
					<xs:element name="Zustelladresse" minOccurs="0">
						<xs:annotation>
							<xs:documentation>Zustelladresse oder ZMRAdresse, entspricht
								DeliveryAddress</xs:documentation>
						</xs:annotation>
						<xs:complexType>
							<xs:sequence>
								<xs:element name="Strassenname" type="xs:string"
									minOccurs="0">
									<xs:annotation>
										<xs:documentation>Bei Ortschaften ohne Straßenname steht hier
											Ortschaftsname, entspricht StreetName</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="Orientierungsnummer" type="xs:string"
									minOccurs="0">
									<xs:annotation>
										<xs:documentation>Hausnummer oder Konskriptionsnummer, z.B.
											10, 124a, 78-80. Entpricht BuildingNumber</xs:documentation>
									</xs:annotation>
								</xs:element>
								<xs:element name="AdressRegisterEintrag" minOccurs="0">
									<xs:annotation>
										<xs:documentation>Addressregister database keys used to identify Addresses</xs:documentation>
									</xs:annotation>
									<xs:complexType>
										<xs:sequence>
											<xs:element name="Adresscode" type="string7"/>
											<xs:element name="Subcode" type="string3" minOccurs="0"/>
											<xs:element name="Objektnummer" type="string7" minOccurs="0"/>
										</xs:sequence>
									</xs:complexType>
								</xs:element>
							</xs:sequence>
						</xs:complexType>
					</xs:element>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>



	<!-- ### auxiliary types ### -->
	<xs:simpleType name="GeburtsdatumTyp">
		<xs:annotation>
			<xs:documentation>einfacher Datentyp für Daten (union): Tag und/oder
				Monta können ausgelassen werden, entspricht DayOfBirthType
			</xs:documentation>
		</xs:annotation>
		<xs:union memberTypes="xs:date xs:gYearMonth xs:gYear" />
	</xs:simpleType>

	<!-- ### strings of defined maximum lenght for use with ZMR address #### -->
	<xs:simpleType name="string3">
		<xs:restriction base="xs:string">
			<xs:maxLength value="3"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="string7">
		<xs:restriction base="xs:string">
			<xs:maxLength value="7"/>
		</xs:restriction>
	</xs:simpleType>

</xs:schema>