<?xml version="1.0" encoding="UTF-8"?>

<!--
    Document   : Vocabulary.xsd
    Author     : raul
    Description:
        Este schema describe como pueden ser los vocabularios de los elementos
        que aparecerán en el formulario de metadatos. En principio sólo se utilizará el
        fichero metadata.xml, que puede ser ampliado con mas elementos y valores.
        
-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="levels" type="levelsType"/>
    
    <xsd:complexType name="levelsType">
        <xsd:sequence>
            <xsd:element name="level" type="levelType" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="vocabulary" type="xsd:string"/>
    </xsd:complexType>
    
     <xsd:complexType name="levelType">
        <xsd:sequence>
            <xsd:element name="element" type="elementType" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="levelName" type="xsd:string"/>
        <xsd:attribute name="screenName" type="xsd:string"/>
    </xsd:complexType>
    
    <xsd:complexType name="elementType">
        <xsd:choice>
            <xsd:element name="values" type="valuesType"/> <!-- Sólo tienen sentido con el tipo enumerado -->
            <xsd:sequence>
                <xsd:element name="element" type="elementType" minOccurs="0" maxOccurs="unbounded" /> <!-- Sólo tiene sentido con el tipo complex-->
            </xsd:sequence>
        </xsd:choice>
        <xsd:attribute name="elementName" type="xsd:string" use="required"/>
        <xsd:attribute name="screenName" type="xsd:string" use="required"/>
        <xsd:attribute name="elementType" use="required">
            <xsd:simpleType>
                <xsd:restriction base="xsd:string">
                    <xsd:enumeration value="enumeration"/>
                    <xsd:enumeration value="integer"/>
                    <xsd:enumeration value="real" />
                    <xsd:enumeration value="boolean"/>
                    <xsd:enumeration value="text"/>
                    <xsd:enumeration value="langCode"/>
                    <xsd:enumeration value="complex"/>
                </xsd:restriction>
            </xsd:simpleType>
        </xsd:attribute>
        <xsd:attribute name="min" type="xsd:decimal"/> <!-- Sólo tiene sentindo con los tipos numéricos -->
        <xsd:attribute name="max" type="xsd:decimal"/> <!-- Sólo tiene sentindo con el tipos numéricos -->
    </xsd:complexType>
    
    <xsd:complexType name="valuesType">
        <xsd:sequence>
            <xsd:element name="value" type="xsd:string" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
    </xsd:complexType>
    
</xsd:schema>
