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

<!--
    Document   : Vocabulary.xsd
    Author     : raul
    Description:
        Este schema describe como pueden ser los vocabularios de parámetros
        para crear las reglas de adaptación. En principio sólo se utilizará el
        fichero tmaestro.xml, que puede ser ampliado con mas parámetros y valores.
        Nota: El primer parámetro en un parámetro complejo es el que lo indexa, no puede ser de tipo complex, y su nombre debería ser el singular del nombre del parámetro complejo.
        Si bien esto último no lo comprueba la aplicación.
-->

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="parameters" type="parametersType"/>
    
    <xsd:complexType name="parametersType">
        <xsd:sequence>
            <xsd:element name="parameter" type="parameterType" minOccurs="1" maxOccurs="unbounded"/>
        </xsd:sequence>
        <xsd:attribute name="vocabulary" type="xsd:string"/>
    </xsd:complexType>
    
    
    <xsd:complexType name="parameterType">
        <xsd:choice>
            <xsd:element name="values" type="valuesType"/> <!-- Sólo tienen sentido con el tipo enumerado -->
            <xsd:sequence>
                <xsd:element name="parameter" type="parameterType" minOccurs="0" maxOccurs="unbounded" /> <!-- Sólo tiene sentido con el tipo collection o complex-->
            </xsd:sequence>
        </xsd:choice>
        <xsd:attribute name="parameterName" type="xsd:string" use="required"/>
        <xsd:attribute name="parameterType" 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:enumeration value="collection"/>
                </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>