<?xml version="1.0" encoding="UTF-8" ?>
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2000/09/xmldsig# http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd">
    <xsd:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd" />
    <xsd:complexType name="MetaInfoTyp">
        <xsd:sequence>
            <xsd:element name="user-agent" type="xsd:string" minOccurs="0" />
            <xsd:element name="user-agent-version" type="xsd:string" minOccurs="0" />
            <xsd:element name="form-version" type="xsd:string" minOccurs="0" />
            <!-- for private usage -->
            <xsd:element name="custom-data" type="xsd:string" minOccurs="0" maxOccurs="1" />
            <xsd:element name="xmlSignature" type="XmlSignatureTyp" minOccurs="0" />
            <xsd:any namespace="##other" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
    </xsd:complexType>
    <xsd:complexType name="XmlSignatureTyp">
        <xsd:all>
            <xsd:element ref="ds:Signature" minOccurs="0" />
        </xsd:all>
    </xsd:complexType>

    <xsd:simpleType name="NonEmptyStringTyp">
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1" />
            <xsd:pattern value=".*[^\s].*" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="NonEmptyMultilineStringTyp">
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="ShortStringTyp">
        <xsd:restriction base="NonEmptyStringTyp">
            <xsd:maxLength value="30" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="MediumStringTyp">
        <xsd:restriction base="NonEmptyStringTyp">
            <xsd:maxLength value="100" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="LongStringTyp">
        <xsd:restriction base="NonEmptyStringTyp">
            <xsd:maxLength value="255" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="ExtraLongStringTyp">
        <xsd:restriction base="NonEmptyMultilineStringTyp">
            <xsd:maxLength value="2048" />
        </xsd:restriction>
    </xsd:simpleType>

    <!-- for now same as MediumStringTyp -->
    <xsd:simpleType name="IspopIdTyp">
        <xsd:restriction base="NonEmptyStringTyp">
            <xsd:maxLength value="100" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Nazev48Typ">
        <xsd:restriction base="NonEmptyStringTyp">
            <xsd:maxLength value="48" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Nazev32Typ">
        <xsd:restriction base="NonEmptyStringTyp">
            <xsd:maxLength value="32" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Kod3Typ">
        <xsd:restriction base="xsd:int">
            <xsd:maxInclusive value="999" />
            <xsd:minInclusive value="0" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Kod4Typ">
        <xsd:restriction base="xsd:int">
            <xsd:maxInclusive value="9999" />
            <xsd:minInclusive value="0" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="IcTyp">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="\d{8}" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="NonNegativeDecimal">
        <xsd:restriction base="xsd:decimal">
            <xsd:minInclusive value="0" />
            <xsd:totalDigits value="15" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Decimal1FrTyp">
        <xsd:restriction base="NonNegativeDecimal">
            <xsd:fractionDigits value="1" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Decimal2FrTyp">
        <xsd:restriction base="NonNegativeDecimal">
            <xsd:fractionDigits value="2" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Decimal3FrTyp">
        <xsd:restriction base="NonNegativeDecimal">
            <xsd:fractionDigits value="3" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Decimal4FrTyp">
        <xsd:restriction base="NonNegativeDecimal">
            <xsd:fractionDigits value="4" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Decimal5FrTyp">
        <xsd:restriction base="NonNegativeDecimal">
            <xsd:fractionDigits value="5" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="Decimal6FrTyp">
        <xsd:restriction base="NonNegativeDecimal">
            <xsd:fractionDigits value="6" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="AdresaProvozovnaTyp">
        <xsd:all>
            <xsd:element name="adresa" type="AdresaTyp" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="AdresaTyp">
        <xsd:all>
            <xsd:element name="adresaVyber" type="AdresaVyberTyp" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="AdresaVyberTyp">
        <xsd:choice>
            <xsd:element name="adresaIszr" type="AdresaIszrTyp" />
            <xsd:element name="adresaNonIszr" type="AdresaNonIszrTyp" />
        </xsd:choice>
    </xsd:complexType>

    <xsd:complexType name="AdresaIszrTyp">
        <xsd:choice>
            <xsd:element name="adresaRuian" type="AdresaRuianTyp" />
        </xsd:choice>
    </xsd:complexType>

    <xsd:complexType name="AdresaNonIszrTyp">
        <xsd:choice>
            <xsd:element name="adresaCr" type="AdresaCrTyp" />
            <xsd:element name="addressNonCr" type="AddressNonCrTyp" />
        </xsd:choice>
    </xsd:complexType>

    <xsd:complexType name="AdresaRuianTyp">
        <xsd:all>
            <xsd:element name="krajKod" type="xsd:nonNegativeInteger" minOccurs="0" />
            <xsd:element name="krajNazev" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="okresKod" type="xsd:nonNegativeInteger" minOccurs="0" />
            <xsd:element name="okresNazev" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="obecKod" type="xsd:nonNegativeInteger" minOccurs="0" />
            <xsd:element name="obecNazev" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="momcKod" type="xsd:nonNegativeInteger" minOccurs="0" />
            <xsd:element name="momcNazev" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="castObceKod" type="xsd:nonNegativeInteger" minOccurs="0" />
            <xsd:element name="castObceNazev" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="uliceKod" type="xsd:nonNegativeInteger" minOccurs="0" />
            <xsd:element name="uliceNazev" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="psc" type="ShortStringTyp" minOccurs="0" />
            <xsd:element name="cisloPopisne" type="xsd:nonNegativeInteger" minOccurs="0" />
            <xsd:element name="cisloOrientacni" type="ShortStringTyp" minOccurs="0" />
            <xsd:element name="adresniMistoKod" type="xsd:nonNegativeInteger" minOccurs="0" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="AdresaCrTyp">
        <xsd:all>
            <xsd:element name="zujKod" type="ZujTyp" minOccurs="0" />
            <xsd:element name="zujNazev" type="Nazev48Typ" minOccurs="0" />
            <xsd:element name="iczujKod" type="IcZujTyp" minOccurs="0" />
            <xsd:element name="iczujNazev" type="Nazev48Typ" minOccurs="0" />
            <xsd:element name="ulice" type="Nazev48Typ" minOccurs="0" />
            <xsd:element name="psc" type="PscTyp" minOccurs="0" />

            <xsd:element name="krajNazev" type="Nazev32Typ" minOccurs="0" />
            <xsd:element name="krajKod" type="ShortStringTyp" minOccurs="0" />
            <xsd:element name="okresNazev" type="Nazev48Typ" minOccurs="0" />
            <xsd:element name="okresKod" type="ShortStringTyp" minOccurs="0" />

            <xsd:element name="cisloDomovni" type="CisloDomovniTyp" minOccurs="0" />
            <xsd:element name="cisloOrientacni" type="CisloOrientacniTyp" minOccurs="0" />
            <xsd:element name="cisloPopisne" type="CisloPopisneTyp" minOccurs="0" />
        </xsd:all>
    </xsd:complexType>

    <xsd:simpleType name="ZujTyp">
        <xsd:restriction base="xsd:nonNegativeInteger">
            <xsd:pattern value="\d{6}" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="IcZujTyp">
        <xsd:restriction base="xsd:nonNegativeInteger">
            <xsd:pattern value="\d{6}" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="PscTyp">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="\d{4,5}" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="CisloDomovniTyp">
        <xsd:restriction base="xsd:int">
            <xsd:maxInclusive value="9999" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="CisloOrientacniTyp">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="5" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="CisloPopisneTyp">
        <xsd:restriction base="xsd:string">
            <xsd:maxLength value="5" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="AddressNonCrTyp">
        <xsd:all>
            <xsd:element name="countryCode" type="CountryCodeTyp" minOccurs="0" />
            <xsd:element name="countryName" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="addressLine1" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="addressLine2" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="zipCode" type="ShortStringTyp" minOccurs="0" />
        </xsd:all>
    </xsd:complexType>

    <!-- ISO 3166 A2 Country Code -->
    <xsd:simpleType name="CountryCodeTyp">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="\w{2}" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="OverovatelCommonTyp" />

    <xsd:complexType name="OhlasovatelCommonTyp">
        <xsd:all>
            <xsd:element name="ispopNazev" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="ohlasovatelIdentifikatorVyber" type="OhlasovatelIdentifikatorVyberTyp" />
            <xsd:element name="ispopAdresa" type="ExtraLongStringTyp" minOccurs="0" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="OhlasovatelIdentifikatorVyberTyp">
        <xsd:choice>
            <xsd:element name="ispopId" type="IspopIdTyp" />
            <xsd:element name="ic" type="IcTyp" />
            <xsd:element name="identifikaceFyzickeOsoby" type="IdentifikaceFyzickeOsobyTyp" />
        </xsd:choice>
    </xsd:complexType>

    <xsd:complexType name="OhlasovatelVseTyp">
        <xsd:all>
            <xsd:element name="spolecnostVyber">
                <xsd:complexType>
                    <xsd:choice>
                        <xsd:element name="fyzickaOsoba" type="FyzickaOsobaBezIcTyp" />
                        <xsd:element name="fyzickaOsobaPodnikajici" type="FyzickaOsobaPodnikajiciTyp" />
                        <xsd:element name="pravnickaOsoba" type="PravnickaOsobaTyp" />
                        <xsd:element name="pravnickaOsobaBezIc" type="PravnickaOsobaBezIcTyp" />
                        <xsd:element name="zahranicniOsoba" type="ZahranicniOsobaTyp" />
                        <xsd:element name="zahranicniPravnickaOsoba" type="ZahranicniOsobaTyp" />
                    </xsd:choice>
                </xsd:complexType>
            </xsd:element>
            <xsd:element name="adresa" type="AdresaTyp" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="FyzickaOsobaTyp">
        <xsd:all>
            <xsd:element name="jmeno" type="LongStringTyp" />
            <xsd:element name="prijmeni" type="LongStringTyp" />
        </xsd:all>
    </xsd:complexType>
    <xsd:complexType name="FyzickaOsobaBezIcTyp">
        <xsd:all>
            <xsd:element name="osoba" type="FyzickaOsobaTyp" />
            <xsd:element name="identifikacniCislo" type="LongStringTyp" />
        </xsd:all>
    </xsd:complexType>
    <xsd:complexType name="FyzickaOsobaPodnikajiciTyp">
        <xsd:all>
            <xsd:element name="osoba" type="FyzickaOsobaTyp" />
            <xsd:element name="nazev" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="ic" type="IcTyp" />
        </xsd:all>
    </xsd:complexType>
    <xsd:complexType name="PravnickaOsobaTyp">
        <xsd:all>
            <xsd:element name="nazev" type="LongStringTyp" />
            <xsd:element name="ic" type="IcTyp" />
        </xsd:all>
    </xsd:complexType>
    <xsd:complexType name="PravnickaOsobaBezIcTyp">
        <xsd:all>
            <xsd:element name="nazev" type="LongStringTyp" />
            <xsd:element name="identifikacniCislo" type="LongStringTyp" />
        </xsd:all>
    </xsd:complexType>
    <xsd:complexType name="ZahranicniOsobaTyp">
        <xsd:all>
            <xsd:element name="kodZeme" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="nazevZeme" type="LongStringTyp" minOccurs="0" />
            <xsd:element name="nazev" type="LongStringTyp" />
            <xsd:element name="identifikacniCislo" type="LongStringTyp" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="ZpracovatelTyp">
        <xsd:all>
            <xsd:element name="jmeno" type="MediumStringTyp" />
            <xsd:element name="prijmeni" type="MediumStringTyp" />
            <xsd:element name="kontakt" type="KontaktTyp" />
            <xsd:element name="datumVyplneni" type="xsd:date" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="KontaktTyp">
        <xsd:all>
            <xsd:element name="email" type="LongStringTyp" />
            <xsd:element name="telefon" type="TelefonTyp" />
            <xsd:element name="fax" type="FaxTyp" minOccurs="0" />
            <xsd:element name="mobil" type="TelefonMobilTyp" minOccurs="0" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="TelefonTyp">
        <xsd:all>
            <xsd:element name="predvolba" type="ShortStringTyp" />
            <xsd:element name="cislo" type="ShortStringTyp" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="FaxTyp">
        <xsd:all>
            <xsd:element name="predvolba" type="ShortStringTyp" minOccurs="0" />
            <xsd:element name="cislo" type="ShortStringTyp" minOccurs="0" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="TelefonMobilTyp">
        <xsd:all>
            <xsd:element name="predvolba" type="ShortStringTyp" minOccurs="0" />
            <xsd:element name="cislo" type="ShortStringTyp" minOccurs="0" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="ProvozovnaCommonTyp">
        <xsd:all>
            <xsd:element name="nazev" type="LongStringTyp" />
            <xsd:element name="icp" type="MediumStringTyp" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="RadneDoplneneHlaseniTyp">
        <xsd:choice>
            <xsd:element name="radne" type="RadneTyp" />
            <xsd:element name="doplnene" type="DoplneneTyp" />
        </xsd:choice>
    </xsd:complexType>

    <xsd:complexType name="RadneDoplneneHlaseniDuvodTyp">
        <xsd:choice>
            <xsd:element name="radne" type="RadneTyp" />
            <xsd:element name="doplnene" type="DoplneneDuvodTyp" />
        </xsd:choice>
    </xsd:complexType>

    <xsd:complexType name="RadneOpravneDodatecneHlaseniTyp">
        <xsd:choice>
            <xsd:element name="radne" type="RadneTyp" />
            <xsd:element name="opravne" type="DoplneneTyp" />
            <xsd:element name="dodatecne" type="DoplneneTyp" />
        </xsd:choice>
    </xsd:complexType>

    <xsd:complexType name="RadneTyp" />

    <xsd:complexType name="DoplneneTyp">
        <xsd:sequence>
            <xsd:element name="evidencniCislo" type="MediumStringTyp" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="DoplneneDuvodTyp">
        <xsd:complexContent>
            <xsd:extension base="DoplneneTyp">
                <xsd:sequence>
                    <xsd:element name="duvod" type="ExtraLongStringTyp" />
                    <xsd:element name="podpurnePodklady" type="AttachmentsMax10Typ" />
                </xsd:sequence>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>

    <xsd:complexType name="AttachmentsTyp">
        <xsd:sequence>
            <xsd:element name="attachment" type="FileDataTyp" minOccurs="0" maxOccurs="unbounded" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="AttachmentsMax10Typ">
        <xsd:sequence>
            <xsd:element name="attachment" type="FileDataTyp" minOccurs="0" maxOccurs="10" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:complexType name="FileDataTyp">
        <xsd:annotation>
            <xsd:documentation xml:lang="cs">
                Typ reprezentující přílohu -- vložený dokument do hlášení.  Žádný vnořený element není povinný, je na
                klientovi, jaké informace bude posílat.  Pro rozumnou prezentaci v rámci aplikace ISPOP je vhodné
                posílat alespoň 'fileName' a (samozřejmě) 'data'.
            </xsd:documentation>
        </xsd:annotation>
        <xsd:all>
            <xsd:element name="formFileKey" type="MediumStringTyp" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation xml:lang="cs">
                        Rozlišuje přílohy, pokud by měly stejné jméno souboru.  Je teoreticky možné vložit více stejně
                        pojmenovaných souborů, pak je vhodné využít tento element a v rámci dokumentu je unikátně
                        pojmenovat.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="fileName" type="LongStringTyp" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation xml:lang="cs">
                        Název souboru.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="contentTyp" type="MediumStringTyp" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation xml:lang="cs">
                        MIME Content-Type
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
            <xsd:element name="data" type="xsd:base64Binary" minOccurs="0">
                <xsd:annotation>
                    <xsd:documentation xml:lang="cs">
                        Příloha -- data.
                    </xsd:documentation>
                </xsd:annotation>
            </xsd:element>
        </xsd:all>
    </xsd:complexType>

    <xsd:simpleType name="RokTyp">
        <xsd:restriction base="xsd:unsignedInt">
            <xsd:pattern value="\d{4}" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="OsobaCommonTyp">
        <xsd:choice>
            <xsd:element name="ispopId" type="IspopIdTyp" />
            <xsd:element name="ic" type="IcTyp" />
            <xsd:element name="identifikaceFyzickeOsoby" type="IdentifikaceFyzickeOsobyTyp" />
        </xsd:choice>
    </xsd:complexType>

    <xsd:complexType name="IdentifikaceFyzickeOsobyTyp">
        <xsd:sequence>
            <xsd:element name="ispopId" type="IspopIdTyp" />
            <xsd:choice>
                <xsd:element name="cisloOP" type="CisloDokladuTyp" minOccurs="0" />
                <xsd:element name="cisloPasu" type="CisloDokladuTyp" minOccurs="0" />
            </xsd:choice>
        </xsd:sequence>
    </xsd:complexType>

    <xsd:simpleType name="CisloDokladuTyp">
        <xsd:restriction base="NonEmptyStringTyp">
            <xsd:maxLength value="9" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="OrpTyp">
        <xsd:restriction base="xsd:nonNegativeInteger">
            <xsd:pattern value="\d{4}" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="KrajTyp">
        <xsd:all>
            <xsd:element name="kod" type="KrajCZTyp" />
            <xsd:element name="nazev" type="LongStringTyp" />
        </xsd:all>
    </xsd:complexType>

    <xsd:simpleType name="KrajCZTyp">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="CZ[0-9]{3}" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="InspektoratCizpTyp">
        <xsd:all>
            <xsd:element name="kod" type="LongStringTyp" />
            <xsd:element name="nazev" type="LongStringTyp" />
        </xsd:all>
    </xsd:complexType>

    <xsd:complexType name="IntegrovanePovoleniTyp">
        <xsd:sequence>
            <xsd:element name="pid" type="PIDTyp" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:simpleType name="PIDTyp">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="MZP[A-Z0-9]{9}" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:simpleType name="ICZTyp">
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="CZ[ASULKHEPCJBMTZ](0{4}[1-9]|0{3}[1-9]\d|0{2}[1-9]\d{2}|0[1-9]\d{3}|[1-9]\d{4})" />
        </xsd:restriction>
    </xsd:simpleType>

    <xsd:complexType name="Wgs84CoordinateTyp">
        <xsd:all>
            <xsd:element name="degrees" type="xsd:nonNegativeInteger" />
            <xsd:element name="minutes" type="xsd:nonNegativeInteger" />
            <xsd:element name="seconds" type="Decimal5FrTyp" />
        </xsd:all>
    </xsd:complexType>

    <xsd:simpleType name="LangTyp">
        <xsd:restriction base="xsd:string">
            <xsd:enumeration value="cs" />
            <xsd:enumeration value="en" />
        </xsd:restriction>
    </xsd:simpleType>

</xsd:schema>
