<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
    <xs:element name="publication">
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="desc">
                    <xs:annotation>
                        <xs:documentation>Beschrijving van deze publicatie</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="lab_concepts">
                    <xs:annotation>
                        <xs:documentation>Lijst met alle actieve concepten in de Nederlandse Labcodeset</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="materials" type="materialTable">
                    <xs:annotation>
                        <xs:documentation>Lijst met gebruikte Snomed materialen</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="methods" type="methodTable">
                    <xs:annotation>
                        <xs:documentation>Lijst met gebruikte Snomed methoden</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="units" type="unitTable">
                    <xs:annotation>
                        <xs:documentation>Lijst met gebruikte UCUM eenheden</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="ordinals">
                    <xs:annotation>
                        <xs:documentation>Lijst met gebruikte ordinale uitslagenlijsten</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element ref="nominals">
                    <xs:annotation>
                        <xs:documentation>Lijst met verwijzingen naar gebruikte nominale uitslagenlijsten</xs:documentation>
                    </xs:annotation>
                </xs:element>
                <xs:element name="panels" type="panelTable">
                    <xs:annotation>
                        <xs:documentation>Lijst gebruikte panels</xs:documentation>
                    </xs:annotation>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="effectiveDate" use="required" type="xs:string"/>
            <xs:attribute name="user" use="optional" type="xs:string"/>
            <xs:attribute name="type" use="optional" type="xs:string"/>
        </xs:complexType>
    </xs:element>
    <xs:element name="lab_concepts">
        <xs:annotation>
            <xs:documentation>Lijst met alle NL Labcodeset concepten</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="lab_concept" type="lab_concept"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="materialOrMethodStatus">
        <xs:restriction base="xs:string">
            <xs:enumeration value="draft"/>
            <xs:enumeration value="active"/>
            <xs:enumeration value="final"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="lab_concept">
        <xs:sequence>
            <xs:element name="loincConcept" type="loincConcept">
                <xs:annotation>
                    <xs:documentation>LOINC concept behorende bij dit Labcodeset concept. Bevat de Engelstalige en (waar aanwezig) Nederlandstalige assen.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="materials" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Materialen die gebruikt kunnen worden bij dit concept.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="material" minOccurs="1" maxOccurs="unbounded">
                            <xs:annotation>
                                <xs:documentation>Verwijst naar een materiaal in de materialenlijst.</xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                                <xs:attribute name="ref" type="xs:string" use="required"/>
                                <xs:attribute name="status" type="materialOrMethodStatus" use="required"/>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="methods" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Methoden die gebruikt kunnen worden bij dit concept.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="method" minOccurs="1" maxOccurs="unbounded">
                            <xs:annotation>
                                <xs:documentation>Verwijst naar een methode in de methodenlijst.</xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                                <xs:attribute name="ref" type="xs:string" use="required"/>
                                <xs:attribute name="status" type="materialOrMethodStatus" use="required"/>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:choice>
                <xs:choice minOccurs="0" maxOccurs="1">
                    <xs:element name="outcomes">
                        <xs:annotation>
                            <xs:documentation>Bevat de lijst van mogelijke nominale of ordinale uitkomsten.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:choice minOccurs="0">
                                <xs:element ref="refset">
                                    <xs:annotation>
                                        <xs:documentation>Verwijst naar een referentieset in SNOMED. U kunt deze vinden in de Nederlandse SNOMED-editie met behulp van het gegeven conceptId.</xs:documentation>
                                    </xs:annotation>
                                </xs:element>
                                <xs:element name="valueSet">
                                    <xs:annotation>
                                        <xs:documentation>"Verwijst naar de lijst van mogelijke ordinale uitkomsten."</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                        <xs:attribute name="ref" type="xs:string"/>
                                    </xs:complexType>
                                </xs:element>
                            </xs:choice>
                        </xs:complexType>
                    </xs:element>
                    <xs:element name="units">
                        <xs:annotation>
                            <xs:documentation>Eenheden (units) die gebruikt worden bij dit concept.</xs:documentation>
                        </xs:annotation>
                        <xs:complexType>
                            <xs:sequence>
                                <xs:element name="unit">
                                    <xs:annotation>
                                        <xs:documentation>Verwijst naar een eenheid (unit) in de eenhedenlijst.</xs:documentation>
                                    </xs:annotation>
                                    <xs:complexType>
                                        <xs:attribute name="ref" type="xs:string"/>
                                    </xs:complexType>
                                </xs:element>
                            </xs:sequence>
                        </xs:complexType>
                    </xs:element>
                </xs:choice>
            </xs:choice>
            <xs:element name="errors" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Eventuele warnings: geen NL vertaling, of prerelease concept</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:any processContents="skip"/>
                    </xs:sequence>
                    <xs:anyAttribute processContents="skip"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="last_update" type="xs:dateTime"/>
        <xs:attribute name="status" use="required" type="labConceptStatus"/>
        <xs:attribute name="user"/>
    </xs:complexType>
    <xs:element name="ordinals">
        <xs:annotation>
            <xs:documentation>Tabel met alle ordinale lijsten.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="valueSet" type="valueSetDefinition"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="nominals">
        <xs:annotation>
            <xs:documentation>Tabel met nominale lijsten.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element ref="refset"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="desc">
        <xs:complexType mixed="true">
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="unbounded" ref="desc"/>
            </xs:sequence>
            <xs:attribute name="language" type="xs:NCName"/>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="loincConcept">
        <xs:sequence>
            <xs:element name="component" type="loincAxis" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation/>
                </xs:annotation>
            </xs:element>
            <xs:element name="property" type="loincAxis" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De LOINC-as property oftewel kenmerk.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="timing" type="loincAxis" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De LOINC-as timing.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="system" type="loincAxis" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De LOINC-as system ofwel systeem.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="scale" type="loincAxis" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De LOINC-as scale ofwel schaal.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="method" type="loincAxis" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De LOINC-as method ofwel methode.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="class" type="loincAxis" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Het laboratoriumspecialisme volgens LOINC.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="orderObs" type="loincAxis" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Geeft aan of het concept gebruikt kan worden als aanvraag, resultaat of beide.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="longName" type="loincAxis" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Bevat de Long Common Name (LCN) van een LOINC-concept. Naast name heeft het attributen count (het aantal tokens) en length (de totale lengte). Dit is de naam waarmee een LOINC-concept getoond dient te worden.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="map" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Voor (door Regenstrief) 'DEPRECATED' LOINC concepten bevat dit soms een map naar het nieuw te gebruiken LOINC concept.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:attribute name="from"/>
                    <xs:attribute name="to"/>
                    <xs:attribute name="comment"/>
                </xs:complexType>
            </xs:element>
            <xs:element name="panelType" type="loincAxis" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Voor een panel van bepalingen zal dit element aanwezig zijn met de waarde 'Panel'. In andere gevallen is het afwezig.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="translation" type="loincConcept" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Bevat de vertalingen volgens LOINC. Het attribuut language geeft de taal aan; in de Nederlandse Labcodeset zal dat nl-NL zijn.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="references" type="references" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Verwijzingen naar externe websites met informatie over dit concept.</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="loinc_num" type="xs:string" use="optional"/>
        <xs:attribute name="status" type="loincStatus" use="optional"/>
        <xs:attribute name="language" type="xs:string" use="optional"/>
    </xs:complexType>
    <xs:complexType name="references">
        <xs:sequence>
            <xs:element name="a" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:anyURI">
                            <xs:attribute name="href" type="xs:anyURI"/>
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
    <xs:simpleType name="loincStatus">
        <xs:restriction base="xs:string">
            <xs:enumeration value="ACTIVE"/>
            <xs:enumeration value="DEPRECATED"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="labConceptStatus">
        <xs:restriction base="xs:string">
            <xs:enumeration value="active"/>
            <xs:enumeration value="retired"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:complexType name="loincAxis">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="name" use="optional"/>
                <xs:attribute name="count" use="optional"/>
                <xs:attribute name="length" use="optional"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="materialTable">
        <xs:sequence>
            <xs:element name="material" type="materialDefinition" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="materialDefinition">
        <xs:annotation>
            <xs:documentation>Een materiaal, d.w.z. een monster (specimen) waarin een bepaling uitgevoerd kan worden, bv. urine.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De Nederlandse weergavenaam.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="root" type="snomedConcept" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Het ouderconcept in SNOMED.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="substance" type="snomedConcept" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De substantie die in SNOMED aan dit materiaal gekoppeld is, bv. ‘urine’ voor het materiaal ‘midstream-urine’.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="topo" type="snomedConcept" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De herkomst van het materiaal, bv. ‘eye proper’ voor ‘eye fluid sample’.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="morph" type="snomedConcept" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De morfologische afwijking waaruit het materiaal afkomstig is, bv. een wond of abces.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="ident" type="snomedConcept" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Wanneer het materiaal in feite een object is, bv. een kathetertip, wordt dit object op deze as gespecificeerd.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="proc" type="snomedConcept" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De verrichting waarmee het materiaal verkregen is, bv. een uitstrijk.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="references" type="references" minOccurs="0">
                <xs:annotation>
                    <xs:documentation>Verwijzingen naar externe websites met informatie over dit concept.</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="code" type="xs:integer"/>
        <xs:attribute name="displayName" type="xs:string"/>
        <xs:attribute name="id" type="xs:string"/>
        <xs:attribute name="status" use="required" type="materialOrMethodStatus"/>
    </xs:complexType>
    <xs:complexType name="snomedConcept">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="code" type="xs:integer"/>
                <xs:attribute name="displayName"/>
            </xs:extension>
        </xs:simpleContent>
    </xs:complexType>
    <xs:complexType name="methodTable">
        <xs:annotation>
            <xs:documentation>Methodes dienen nog nader gedefinieerd te worden.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="method" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:sequence>
                        <xs:any processContents="skip" maxOccurs="unbounded"/>
                    </xs:sequence>
                    <xs:attribute name="id" type="xs:integer"/>
                    <xs:attribute name="status" type="xs:NCName"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:anyAttribute/>
    </xs:complexType>
    <xs:complexType name="unitTable">
        <xs:sequence>
            <xs:element name="unit" maxOccurs="unbounded" type="unitDefinition"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="unitDefinition">
        <xs:annotation>
            <xs:documentation>Een eenheid in de eenhedenlijst.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="rm" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De UCUM-expressie, de officiële notatie van de eenheid.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="name" minOccurs="0" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De Engelse weergavenaam.</xs:documentation>
                </xs:annotation>
            </xs:element>
            <xs:element name="nlname" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>De Nederlandse weergavenaam.</xs:documentation>
                </xs:annotation>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="id" type="xs:string"/>
        <xs:attribute name="status" type="xs:string"/>
    </xs:complexType>
    <xs:element name="refset">
        <xs:annotation>
            <xs:documentation>Verwijzing naar een nominale refset.</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:attribute name="conceptId" use="required" type="xs:integer"/>
            <xs:attribute name="preferredTerm" use="required"/>
            <xs:attribute name="src" use="required" type="xs:anyURI"/>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="valueSetDefinition">
        <xs:annotation>
            <xs:documentation>Definitie van een ordinale lijst.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="conceptList" minOccurs="1" maxOccurs="1">
                <xs:annotation>
                    <xs:documentation>Bevat een lijst van SNOMED-concepten.</xs:documentation>
                </xs:annotation>
                <xs:complexType>
                    <xs:sequence>
                        <xs:element maxOccurs="unbounded" name="concept">
                            <xs:annotation>
                                <xs:documentation>Verwijst naar een SNOMED-concept.</xs:documentation>
                            </xs:annotation>
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="desc">
                                        <xs:complexType>
                                            <xs:simpleContent>
                                                <xs:extension base="xs:string">
                                                    <xs:attribute name="language"/>
                                                </xs:extension>
                                            </xs:simpleContent>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                                <xs:attribute name="code" type="xs:string" use="required">
                                    <xs:annotation>
                                        <xs:documentation>Het SNOMED-id</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="codeSystem" type="xs:string" use="required">
                                    <xs:annotation>
                                        <xs:documentation>De OID van het terminologiestelsel (in dit geval altijd SNOMED).</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="codeSystemName" type="xs:string" use="optional">
                                    <xs:annotation>
                                        <xs:documentation>De OID van het terminologiestelsel (in dit geval SNOMED CT).</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="displayName" type="xs:string" use="required">
                                    <xs:annotation>
                                        <xs:documentation>De fully specified name volgens SNOMED</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="level" type="xs:string" use="optional">
                                    <xs:annotation>
                                        <xs:documentation>In geneste value sets wordt hiermee het niveau aangegeven. De Labcodeset bevat geen geneste value sets, dus is level altijd 0.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                                <xs:attribute name="type" type="xs:string" use="optional">
                                    <xs:annotation>
                                        <xs:documentation>Geeft aan of het een knoop of een blad (L) betreft – in de Labcodeset bevatten de value sets alleen bladeren.</xs:documentation>
                                    </xs:annotation>
                                </xs:attribute>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="displayName" use="required" type="xs:string"/>
        <xs:attribute name="effectiveDate" type="xs:dateTime"/>
        <xs:attribute name="id" type="xs:string"/>
        <xs:attribute name="name" type="xs:string"/>
        <xs:attribute name="statusCode" type="materialOrMethodStatus"/>
    </xs:complexType>
    <xs:complexType name="panelTable">
        <xs:annotation>
            <xs:documentation>Overzicht van de panels.</xs:documentation>
        </xs:annotation>
        <xs:sequence maxOccurs="unbounded">
            <xs:element name="loincConcept" type="panelConcept"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="panelConcept">
        <xs:annotation>
            <xs:documentation>Een panel.</xs:documentation>
        </xs:annotation>
        <xs:sequence>
            <xs:element name="SEQUENCE" minOccurs="0"/>
            <xs:element name="LoincName" minOccurs="0"/>
            <xs:element name="ObservationRequiredInPanel" minOccurs="0"/>
            <xs:element name="EntryType" minOccurs="0"/>
            <xs:element name="members" minOccurs="0"/>
            <xs:element minOccurs="0" name="ConditionForInclusion"/>
        </xs:sequence>
        <xs:attribute name="loinc_num" use="required" type="xs:NMTOKEN"/>
        <xs:attribute name="panelMember" type="xs:NCName"/>
        <xs:attribute name="status" type="xs:NCName"/>
        <xs:attribute name="type" type="xs:NCName"/>
    </xs:complexType>
    <xs:element name="EntryType" type="xs:NCName"/>
    <xs:element name="LoincName" type="xs:string"/>
    <xs:element name="ObservationRequiredInPanel" type="xs:NCName"/>
    <xs:element name="SEQUENCE" type="xs:integer"/>
    <xs:element name="ConditionForInclusion" type="xs:string"/>
    <xs:element name="members">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="loincConcept" maxOccurs="unbounded" type="panelConcept"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
