Un tableau de groupes de modèles est créé lorsque la valeur maxOccurs d'un groupe de modèles est > 1.
Les groupes de modèles étant mis à plat et n'étant pas exprimés dans un objet de données, les propriétés au sein du groupe de modèles deviennent des propriétés à cardinalité multiple et leurs méthodes isMany() renvoient la valeur vrai si elles ne l'ont pas déjà. Leurs facettes minOccurs et maxOccurs sont alors multipliées par celles du groupe de modèles qui les contient. Le choix multipliera la facette maxOccurs de la même manière que les autres groupes de modèles, mais utilisera toujours 0 comme valeur de multiplication pour minOccurs, car toutes les données dans le choix peuvent ne pas être sélectionnées.
Par exemple, le XSD suivant comporte un tableau de groupes de modèles :
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ModelGroupArray"> <xsd:complexType name="ModelGroupArray"> <xsd:sequence minOccurs="2" maxOccurs="5"> <xsd:element name="element1" type="xsd:string"/> <xsd:element name="element2" type="xsd:string" minOccurs="0" maxOccurs="3"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
Comme indiqué, element1 et element2 seront maintenant une cardinalité multiple et un mécanisme d'accès get(...) renverra donc une liste. Element1 a par défaut la valeur minOccurs 1 et la valeur maxOccurs 1. Element2 a la valeur minOccurs 0 et la valeur maxOccurs 3. Dans l'exemple suivant, leurs nouvelles valeurs minOccurs et maxOccurs seront les suivantes :
Data Object - ModelGroupArray Property[0] - element1 - minOccurs=(2*1)=2 - maxOccurs=(5*1)=5 Property[1] - element2 - minOccurs=(2*0)=0 - maxOccurs=(5*3)=15
Si le type était Choix :
<?xml version="1.0" encoding="UTF-8"?> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://ModelGroupArray"> <xsd:complexType name="ModelGroupArray"> <xsd:choice minOccurs="2" maxOccurs="5"> <xsd:element name="element1" type="xsd:string"/> <xsd:element name="element2" type="xsd:string" minOccurs="0" maxOccurs="3"/> </xsd:sequence> </xsd:complexType> </xsd:schema>
La valeur minOccurs suivante serait générée, en raison de l'exclusion du choix indiquant que seul element1 puisse être extrait à chaque fois ou que seul element2 puisse être extrait à chaque fois, et les deux doivent pouvoir avoir 0 occurrence pour réussir la validation :
DataObject - ModelGroupArray Property[0] - element1 - minOccurs=(0*1)=0 - maxOccurs=(5*1)=5 Property[1] - element2 - minOccurs=(0*0)=0 - maxOccurs=(5*3)=15