<?xml version="1.0" encoding="UTF-8"?>
<!--File version: 13 -->
<xs:schema xmlns:zal="xmlns://afsprakenstelsel.medmij.nl/zorgaanbiederslijst/release4/"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="xmlns://afsprakenstelsel.medmij.nl/zorgaanbiederslijst/release4/"
    elementFormDefault="qualified">
    <!--Root element-->
    <xs:element name="Zorgaanbiederslijst">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Tijdstempel" type="zal:DatumTijd"/>
                <xs:element name="Volgnummer" type="zal:Positiefnummer"/>
                <xs:element name="Zorgaanbieders" type="zal:Zorgaanbieders">
                    <xs:unique name="Unieke_Zorgaanbieder">
                        <xs:selector xpath="zal:Zorgaanbieder/zal:Zorgaanbiedernaam"/>
                        <xs:field xpath="."/>
                    </xs:unique>
                </xs:element>
            </xs:sequence>
        </xs:complexType>   
    </xs:element>

    <!--Logische klassen-->
    <xs:complexType name="Zorgaanbieders">
        <xs:sequence>
            <xs:element name="Zorgaanbieder" maxOccurs="unbounded" minOccurs="0"
                type="zal:Zorgaanbieder"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Zorgaanbieder">
        <xs:sequence>
            <xs:element name="Zorgaanbiedernaam" type="zal:Zorgaanbiedernaam"/>
			<xs:element name="Aanbiedertype" type="zal:Aanbiedertype"/>
            <xs:element name="Interfaceversies" type="zal:Interfaceversies"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Interfaceversies">
        <xs:sequence>
            <xs:element maxOccurs="unbounded" name="Interfaceversie" type="zal:Interfaceversie"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Interfaceversie">
        <xs:sequence>
            <xs:element name="InterfaceversieId" type="zal:InterfaceversieId"/>
            <xs:element name="Gegevensdiensten" type="zal:Gegevensdiensten"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Gegevensdiensten">
        <xs:sequence>
            <xs:element name="Gegevensdienst" minOccurs="0" maxOccurs="unbounded" type="zal:Gegevensdienst"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Gegevensdienst">
        <xs:sequence>
            <xs:element name="GegevensdienstId" type="zal:GegevensdienstId"/>
            <xs:element minOccurs="1" name="AuthorizationEndpoint" type="zal:AuthorizationEndpoint"/>
            <xs:element minOccurs="1" name="TokenEndpoint" type="zal:TokenEndpoint"/>
            <xs:element minOccurs="0" name="Abonneren" type="zal:Abonneren"/>
            <xs:element name="Systeemrollen" type="zal:Systeemrollen">
                <xs:unique name="Unieke_Systeemrol">
                    <xs:selector xpath="zal:Systeemrol/zal:Systeemrolcode"/>
                    <xs:field xpath="."/>
                </xs:unique>
            </xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="AuthorizationEndpoint">
        <xs:sequence>
            <xs:element name="AuthorizationEndpointuri" type="zal:Frontchanneluri"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="TokenEndpoint">
        <xs:sequence>
            <xs:element name="TokenEndpointuri" type="zal:Backchanneluri"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ResourceEndpoint">
        <xs:sequence maxOccurs="2">
            <xs:element name="ResourceEndpointuri" type="zal:Backchanneluri"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Abonneren">
        <xs:sequence>
            <xs:element name="MaximaleDuur" type="zal:Nietnegatiefgetal"/>
            <xs:element name="SubscriptionEndpointuri" type="zal:SubscriptionChannelUriType"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Systeemrollen">
        <xs:sequence>
            <xs:element name="Systeemrol" maxOccurs="unbounded" type="zal:Systeemrol"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Systeemrol">
        <xs:sequence>
            <xs:element name="Systeemrolcode" type="zal:Systeemrolcode"/>
            <xs:element minOccurs="0" name="ResourceEndpoint" type="zal:ResourceEndpoint"/>
        </xs:sequence>
    </xs:complexType>

    <!--Basisklassen-->
    <xs:simpleType name="GegevensdienstId">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="30"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Zorgaanbiedernaam">
        <xs:restriction base="xs:string">
            <xs:minLength value="10"/>
            <xs:maxLength value="287"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Systeemrolcode">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="30"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Frontchanneluri">
        <xs:restriction base="xs:string">
            <xs:pattern
                value="https://(([a-z0-9])([a-z0-9-])*(\.))+([a-z0-9])([a-z0-9-])*([a-z0-9])?(/[^?#/]+)*"
            />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Backchanneluri">
        <xs:restriction base="xs:string">
            <xs:pattern
                value="https://(([a-z0-9])([a-z0-9-])*(\.))+([a-z0-9])([a-z0-9-])*([a-z0-9])(:(\d){1,5})?(/[^?#/]+)*"
            />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="SubscriptionChannelUriType">
        <xs:restriction base="xs:string">
            <xs:pattern
                value="https://(([a-z0-9])([a-z0-9-])*(\.))+([a-z0-9])([a-z0-9-])*([a-z0-9])?(/[^?#/]+)*"
            />
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="InterfaceversieId">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="30"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="DatumTijd">
        <xs:restriction base="xs:dateTime">
            <xs:pattern value=".{20,}"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="Positiefnummer">
        <xs:restriction base="xs:positiveInteger"/>
    </xs:simpleType>
    <xs:simpleType name="Nietnegatiefgetal">
        <xs:restriction base="xs:nonNegativeInteger"/>
    </xs:simpleType>
	<xs:simpleType name="Aanbiedertype">
        <xs:restriction base="xs:string">
            <xs:enumeration value="ZA"/>
			<xs:enumeration value="BAZB"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
