<?xml version="1.0" encoding="UTF-8"?>
<!--File version: 14 -->
<xs:schema xmlns:ocl="xmlns://afsprakenstelsel.medmij.nl/oauthclientlist/release6/"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="xmlns://afsprakenstelsel.medmij.nl/oauthclientlist/release6/"
    elementFormDefault="qualified">
    <!--Root element-->
    <xs:element name="OAuthclientlist">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Tijdstempel" type="ocl:DatumTijd"/>
                <xs:element name="Volgnummer" type="ocl:Positiefnummer"/>
                <xs:element name="OAuthclients" type="ocl:OAuthclients">
                    <xs:unique name="Unieke_OAuthclient">
                        <xs:selector xpath="ocl:OAuthclient/ocl:Hostname"/>
                        <xs:field xpath="."/>
                    </xs:unique>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <!--Logische klassen-->
    <xs:complexType name="OAuthclients">
        <xs:sequence>
            <xs:element name="OAuthclient" maxOccurs="unbounded" minOccurs="0"
                type="ocl:OAuthclient"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="OAuthclient">
        <xs:sequence>
            <xs:element name="Hostname" type="ocl:Hostname"/>
            <xs:element name="CommonName" type="ocl:CommonName"/>
            <xs:element name="OAuthclientOrganisatienaam" type="ocl:OAuthclientOrganisatienaam"/>
            <xs:element name="Interfaceversies" type="ocl:Interfaceversies"/>
        </xs:sequence>
    </xs:complexType>

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

    <xs:complexType name="Interfaceversie">
        <xs:sequence>
            <xs:element name="InterfaceversieId" type="ocl:InterfaceversieId"/>
            <xs:element name="Gegevensdiensten" type="ocl:Gegevensdiensten"/>
            <xs:element name="RedirectURI" type="ocl:Backchanneluri" minOccurs="0"/>
        </xs:sequence>
    </xs:complexType>

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

    <xs:complexType name="Gegevensdienst">
        <xs:sequence>
            <xs:element name="GegevensdienstId" type="ocl:GegevensdienstId"/>
            <xs:element minOccurs="0" name="Notificeren" type="ocl:Notificeren"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="Notificeren">
        <xs:sequence>
            <xs:element name="ResourceNotificationEndPoint" type="ocl:ResourceNotificationEndPoint"
                minOccurs="1"/>
            <xs:element name="SubscriptionNotificationEndPoint"
                type="ocl:SubscriptionNotificationEndPoint" minOccurs="1"/>
        </xs:sequence>
    </xs:complexType>

    <!--Basisklassen-->
    <xs:complexType name="ResourceNotificationEndPoint">
        <xs:sequence>
            <xs:element name="ResourceNotificationEndPointuri" type="ocl:Backchanneluri"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="SubscriptionNotificationEndPoint">
        <xs:sequence>
            <xs:element name="SubscriptionNotificationEndPointuri" type="ocl:Backchanneluri"/>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="Hostname">
        <xs:restriction base="xs:string">
            <xs:pattern value="(([a-z0-9])([a-z0-9-])*(\.))+([a-z0-9])([a-z0-9-])*([a-z0-9])"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="CommonName">
        <xs:restriction base="xs:string"/>
    </xs:simpleType>
    <xs:simpleType name="OAuthclientOrganisatienaam">
        <xs:restriction base="xs:string">
            <xs:minLength value="3"/>
            <xs:maxLength value="50"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="GegevensdienstId">
        <xs:restriction base="xs:string">
            <xs:minLength value="1"/>
            <xs:maxLength value="30"/>
        </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="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="Positiefnummer">
        <xs:restriction base="xs:positiveInteger"/>
    </xs:simpleType>
    <xs:simpleType name="DatumTijd">
        <xs:restriction base="xs:dateTime">
            <xs:pattern value=".{20,}"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>
