5.8.5. Modularisation dans les schémas

En soutien de l'extensibilité et de la connectivité, DITA exige d'une implémentation de schéma XML de modules de spécialisation de structure et de domaine qu'elle soit conforme à des modèles de conception bien définis.

Cette section décrit ces modèles de conception. Ces modèles de conception réalisent l'architecture de spécialisation dans les capacités et les limites de la grammaire XML Schema.

Modèle de spécialisation structurelle

Pour chaque type structurel, le document d'interpréteur de type de document (document type shell document) collecte les documents de schéma, les modules de type structurel parents, les modules de type de domaine et les modèles de contenu nécessaires pour mettre en œuvre de nouvelles spécialisations de type de thème. Chaque nouveau type structurel nécessite trois fichiers. Cf. le document d'interpréteur de type de document concept.xsd du type de thème concept.

  1. 1. Chaque type structurel doit définir un document de schéma de module séparé, avec un nom composé du nom de l'élément structurel racine et du suffixe « Mod.xsd » ;
  2. 2. Chaque type structurel doit définir un document de schéma de définition de groupe de modèles séparé, avec un nom composé du nom de l'élément structurel racine et de « Grp.xsd ».

Le document de schéma de module doit définir un groupe de modèles info-types nommé, ayant pour préfixe le nom de l'élément de thème et pour suffixe « -info-types ». Voici un exemple de groupe de modèles info-types qui est défini dans conceptMod.xsd :

<xs:group name="concept-info-types">
  <xs:choice>
     <xs:group ref="concept"minOccurs="0"/>
     <xs:group ref="info-types" minOccurs="0"/>
  </xs:choice>
</xs:group>

Le document de schéma de module définit chaque élément spécialisé utilisé comme sous-structure dans le type structurel. L'élément spécialisé doit suivre les règles de l'architecture dans la définition des modèles de contenu et des attributs. La convention de nommage des modèles de contenu est que l'on doive utiliser le nom de l'élément structurel racine et le suffixe « .class ».

Comme pour toutes les spécialisations, l'élément racine d'une spécialisation structurelle doit avoir un modèle de contenu qui restreint ou conserve le modèle de contenu de l'élément qu'il spécialise. L'élément racine doit également référencer les attributs DITAArchVersion et domains. Pour les schémas, la valeur de l'attribut domains est établie dans l'interpréteur de type de document. Cf. la section Modèle d'interpréteur de type de document pour plus de renseignements sur la façon de déterminer les valeurs de l'attribut domains. En outre, la dernière position dans le modèle de contenu doit être l'entité des thèmes imbriqués comme dans l'exemple suivant :

<xs:complexType name="concept.class">
   <xs:sequence>
      <xs:group ref="title"/>
      <xs:group ref="titlealts" minOccurs="0"/>
      <xs:choice minOccurs="0">
        <xs:group ref="shortdesc" />
        <xs:group ref="abstract" />
      </xs:choice>
      <xs:group ref="prolog" minOccurs="0"/>
      <xs:group ref="conbody" minOccurs="0"/>
      <xs:group ref="related-links" minOccurs="0"/>
      <xs:group ref="concept-info-types" minOccurs="0" maxOccurs="unbounded"/>
   </xs:sequence>
   ....
</xs:complexType>

Ces attributs donnent aux processus un moyen fiable de vérifier la version d'architecture et de consulter la liste des domaines disponibles dans le type de document.

<xs:attribute name="id" type="xs:ID" use="required"/>
<xs:attribute ref="ditaarch:DITAArchVersion" />

Le nouveau fichier type-de-thèmeGrp.xsd est nécessaire pour simuler (mimic) substitutionGroups en XML Schema sans utiliser le modèle d'héritage de la spécification XML Schema 1.0 du W3C. Le processus est très semblable au modèle de conception DTD DITA. Pour un type structurel, le nom du document de schéma se compose du nom de l'élément structurel racine et du suffixe « Grp.xsd ». Cf. le fichier conceptGrp.xsd pour un exemple de document de schéma de groupe de modèles :

<xs:group name="concept">
    <xs:sequence>
      <xs:element ref="concept"/>
    </xs:sequence>  
</xs:group>

Le document de schéma de groupe de modèles définit les groupes de modèles de chaque nouvel élément spécialisé dans un type structurel. Chaque type structurel et chaque domaine ont un document de schéma de groupe de modèles. Le document de schéma de groupe de modèles est une partie essentielle de la spécialisation.

Liaison de l'attribut class à un élément

L'attribut class doit inclure la valeur de l'attribut class de l'élément de base et ajouter à la fin le nom de l'élément qualifié par le nom de l'élément structurel racine ou le nom de domaine, avec au moins un espace de tête et de queue. L'attribut class commence par un SIGNE MOINS « - » s'il est déclaré dans un module structurel, ou par un SIGNE PLUS « + » s'il est déclaré dans un module de domaine.

Cet attribut fournit une relation entre le nom courant de l'élément et son équivalent plus général. Il doit être lié dans la déclaration des éléments et non dans le type complexType référencé par l'élément. Cf. le document de schéma reference.xsd pour un exemple.

<xs:element name="reference">
  <xs:complexType>
    <xs:complexContent>
      <xs:extension base="reference.class">
        <xs:attribute ref="class" default="- topic/topic reference/reference "/>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>
</xs:element>

Modèle de spécialisation de domaine

Un document de schéma de type de domaine avec un nom composé du nom de domaine et du suffixe « Domain.xsd ».

Comme dans un module structurel, le module de domaine doit définir chaque élément spécialisé, ses attributs et ses groupes de modèles. Comme pour toute spécialisation, l'élément de domaine doit restreindre l'élément de base. L'attribut class de l'élément de domaine doit commencer par un SIGNE PLUS, sinon suit les mêmes règles que l'attribut class d'un élément introduit par une spécialisation de thème.

Pour chaque élément étendu par un ou plusieurs domaines, le document de schéma de type de domaine définit un groupe de modèles pour l'élement de base vers une liste d'alternatives comprenant le nom littéral de l'élément et l'entité d'extension d'élément de chaque domaine qui fournit des spécialisations.

Le document de schéma doit définir un groupe de modèles pour chaque élément étendu par le domaine. Le contenu du groupe de modèles doit être dans la liste des éléments spécialisés de l'élément étendu. Le nom du groupe de modèles a pour préfixe l'abréviation du domaine et pour suffixe le nom de l'élément étendu. Dans l'exemple suivant, le domaine de l'interface utilisateur (abrégé en ui-d) étend l'élément ph.

<xs:group name="ui-d-ph">
  <xs:choice>
     <xs:element ref="uicontrol" />
     <xs:element ref="menucascade" />
  </xs:choice> 
</xs:group>

Modèle d'interpréteur de type de document

Pour chaque interpréteur de type de document, le groupe de modèles nommé info-types suivant doit être défini. Ce groupe de modèles peut définir une liste de thèmes subordonnés par défaut. Si le type de thème n'a pas de thèmes subordonnés par défaut, alors la valeur par défaut du groupe de modèles info-types doit être un groupe vide.

<xs:group name="info-types">
   <xs:sequence/>
</xs:group>

Les valeurs par défaut des attributs domains dans l'élément structurel racine de base et les éléments structurels racines spécialisés doivent être définies en utilisant le mécanisme redefine du schéma afin de peupler l'attribut domains. Il identifie les domaines utilisés dans le type structurel. Cet attribut donne aux processus un moyen fiable de consulter la liste des domaines disponibles dans le document, comme dans l'exemple suivant :

<xs:redefine schemaLocation="topicMod.xsd" >
   <xs:complexType name="topic.class">
      <xs:complexContent>
         <xs:extension base="topic.class">
          <xs:attribute
          name="domains" type="xs:string" default="(topic ui-d)
          (topic hi-d) (topic sw-d) (topic pr-d) (topic ut-d) (topic indexing-d)"/>
         </xs:extension>
      </xs:complexContent>
   </xs:complexType> 
</xs:redefine>

Pour chaque élément étendu par un ou plusieurs domaines, l'interpréteur de type de document redéfinit le groupe de modèles de l'élément vers une liste d'alternatives incluant le nom littéral de l'élément et le groupe de modèles d'extension d'élément de chaque domaine fournissant des spécialisations. Pour intégrer un nouveau domaine dans l'interpréteur de type de document, utilisez le mécanisme redefine du schéma pour gérer le nombre de domaines utilisés par l'interpréteur de type de document. Le groupe de modèles nécessite une référence à lui-même pour étendre le groupe de modèles de base. Cf. le document de schéma topic.xsd pour un exemple.

<xs:group name="pre">   
  <xs:choice>       
    <xs:group ref="pre" />
    <xs:group ref="pr-d-pre" />
    <xs:group ref="ui-d-pre" />
    <xs:group ref="sw-d-pre" />
  </xs:choice>
</xs:group>

Pour ajouter des domaines à un nouveau type structurel, on peut copier le contenu du document de schéma des domaines du type structurel parent dans l'interpréteur de type de document. Ajoutez ou supprimez le groupe de modèles du nouveau domaine vers le groupe nommé approprié.

<xs:group name="pre">
 <xs:choice>
   <xs:group ref="pre"/>
   <xs:group ref="pr-d-pre" />
   <xs:group ref="domainName-d-element"/>
 </xs:choice> 
</xs:group>

Pour chaque attribut étendu par un ou plusieurs domaines, l'interpréteur de type de document redéfinit le groupe de modèles d'extension d'attribut de l'attribut vers une liste d'alternatives incluant le nom littéral de l'attribut et le groupe de modèles d'extension d'attribut de chaque domaine fournissant des spécialisations. Les attributs ne peuvent être spécialisés qu'à partir de l'attribut props dans DITA 1.1. Pour intégrer un nouveau domaine d'attribut dans l'interpréteur de type de document, utilisez le mécanisme de schéma redefine pour gérer le nombre des domaines d'attribut utilisés par l'interpréteur de type de document.

<xs:attributeGroup name="props-attribute-extensions">
   <xs:attributeGroup ref="props-attribute-extensions"/>
   <xs:attributeGroup ref="newAtt-d-attribute"/>
   <xs:attributeGroup ref="othernewAtt-d-attribute"/>
</xs:attributeGroup>
    
<xs:attributeGroup name="base-attribute-extensions">
    <xs:attributeGroup ref="base-attribute-extensions"/>
    <xs:attributeGroup ref="newfrombaseAtt-d-attribute"/>
    <xs:attributeGroup ref="othernewfrombaseAtt-d-attribute"/>
</xs:attributeGroup>

Modèle de spécialisation de domaine d'attribut

Le modèle de domaine d'attribut est un cas particulier du modèle de spécialisation de domaine, qui permet la création de nouveaux attributs spécialisés à partir des attributs props ou base.

Créez un fichier d'entité de module par attribut, par exemple newAttDomain.xsd. Chaque module devrait avoir le contenu suivant :

L'entité qui porte la déclaration réelle de l'attribut en forme d'entité. On peut alors utiliser cette entité dans les interpréteur de type de document afin d'ajouter le nouvel attribut. Par exemple :

<xs:attributeGroup name="newAtt-d-attribute">
    <xs:attribute name="new" type="xs:string"/>
</xs:attributeGroup>

On peut ensuite utiliser cette valeur de déclaration de domaine d'attribut dans les interpréteurs de type de document pour signaler la disponibilité de l'attribut aux processus compatibles avec DITA. Elle emploie la même syntaxe que la valeur de déclaration de domaine régulière hormis l'ajout en tête d'un « a » pour indiquer qu'il s'agit d'un domaine d'attribut. Par exemple :

<xs:attribute name="domains" type="xs:string" default="... a(props new)"/>