Un tipo simple es una definición abstracta de un elemento de datos como, por ejemplo, un número, una serie de caracteres o una fecha.
La finalidad de un tipo simple es definir el contenido de uno o más elementos simples. Los tipos simples (y cualquier elemento basado en los tipos simples) no pueden contener atributos o elementos hijo. Los tipos simples contrastan con los tipos complejos, que definen la estructura de un elemento pero, generalmente, no definen datos simples.
Los tipos simples pueden ser globales o locales. Un tipo simple global se puede utilizar como base para más de un elemento. Se le debe proporcionar un nombre exclusivo por el cual se pueda hacer referencia al mismo. Un tipo simple local se asocia con un elemento individual y no está disponible para volver a utilizarse en otro lugar del modelo de mensaje. Los tipos locales no tienen un nombre.
El esquema XML define un número elevado de tipos simples que puede utilizar, el cual cubre todos los tipos de datos estándar como, por ejemplo, series de caracteres, enteros, decimales y puntos flotantes.
Puede definir sus propios tipos simples derivándolos de otro tipo simple (el tipo base) por restricción. Un tipo de restricción puede tener aplicadas limitaciones de valor.
Un tipo de restricción se puede derivar de un tipo simple incorporado o de un tipo simple definido por usuario.
Un tipo de lista es un modo de representar un valor simple que se repite. La anotación es más compacta que la anotación de un elemento de repetición y ofrece un modo de tener atributos de varios valores.
Un tipo de lista puede estar basado en un tipo de unión (consulte los párrafos siguientes). Esto puede describir una lista de elementos separados por espacios en la que cada elemento puede estar basado en cualquier tipo simple de la unión.
Una lista de listas no está permitida. El tipo de elemento de una lista no puede ser una lista ni se puede derivar de ningún nivel que no sea otro tipo de lista, y da como resultado un error de lista de tareas en el editor.
Un tipo de lista puede tener aplicadas las facetas de longitud, longitud máxima y longitud mínima. Estas facetas limitan el número de elementos de la lista. Para restringir los valores de cada elemento de la lista, se deben aplicar facetas al tipo de elemento y no a la lista propiamente dicha. El editor de definiciones de mensajes proporciona soporte adicional para las facetas de enumeración y patrón directamente en un tipo de lista, lo que permite importar cualquier esquema que las utilice, pero emite un aviso que indica que el intermediario ignora las facetas de enumeración y patrón.
Un tipo de unión es una unión de dos o más tipos simples.
Un tipo de unión permite que un valor se ajuste a uno de los diferentes tipos simples. Los tipos simples constan de un tipo de unión conocido como sus tipos de miembros. No existe un límite superior en cuanto al número de tipos de miembros que pueden existir pero debe haber como mínimo uno. Un tipo de miembro puede definirse como un tipo simple incorporado, un tipo simple definido por el usuario o un tipo simple local definido de forma anónima dentro del tipo de unión.
Un tipo de unión también puede incluir entre sus miembros tipos simples de lista, de unión y restringidos.
El analizador MRM no aplica restricciones de valores hasta que los datos están en el árbol lógico. Esto significa que no es posible seleccionar entre los dos tipos simples derivados del mismo tipo fundamental, sino que tienen restricciones de valores diferentes (por ejemplo, un entero con un rango de 1-10 y un entero con un rango de 11-20). Se muestra un aviso en la lista de tareas si se intenta llevar a cabo esta tareas y el analizador ignora las restricciones de valor cuando resuelve la unión. El editor de definiciones de mensajes proporciona soporte adicional para las facetas de enumeración y patrón directamente en un tipo de unión, lo que permite importar cualquier esquema que las utilice, pero el editor emite un aviso que indica que el analizador MRM ignora las facetas de enumeración y patrón.
Las limitaciones de valor aplicadas al tipo derivado deben restringir adicionalmente el tipo base (y los elementos basados en él). No está permitido que un tipo derivado debilite o elimine una restricción de valor que su tipo base ha definido. Si no se aplican restricciones de valor al tipo derivado, éste será casi idéntico al tipo base, aunque se tratará como una restricción del tipo base en situaciones en las que esto sea pertinente (herencia de tipo y sustitución de elementos).