5.7.7.2. Généralisation de l'élément <foreign>

Pendant la généralisation, les éléments DITA sont modifiés en fonction de la valeur de l'attribut class pour utiliser le nom d'un élément ancêtre. On ne peut pas le faire avec le contenu d'un élément <foreign> spécialisé parce que les éléments contenus ne sont pas des éléments DITA et n'ont pas d'attributs class.

À la place, on devrait seulement généraliser l'élément <foreign> lui-même avec les règles normales. Le contenu de l'élément <foreign> devrait être exporté vers un fichier séparé et replacé en ligne avec un élément <object>. L'élément <object> devrait pointer vers le fichier généré en utilisant son attribut data. La valeur de l'attribut type sur l'élément <object> devrait être paramétrée à "DITA-foreign".

L'élément <object> est déjà permis dans l'élément <foreign>. S'il est présent pendant la généralisation, il ne devrait pas être exporté vers le fichier séparé. L'élément <object> original ne devrait pas être modifié sauf obligation des règles ordinaires de généralisation. Cet élément <object> est utilisé pour le contenu alternatif dans les systèmes de publication qui ne peuvent pas afficher le contenu de <foreign>.

Un élément <foreign> peut contenir plusieurs éléments principaux, hormis le contenu alternatif. Pour les recevoir, le contenu exporté devrait avoir un élément racine <foreign>.

Le nom du fichier exporté devrait commencer par « dita-generalized- » afin d'aider les utilisateurs à reconnaître l'origine des fichiers générés. Il est recommandé pour le nom du fichier qu'il contienne également l'identificateur du thème, le type de spécialisation et l'identificateur de l'élément ou un identificateur généré. Par exemple, le premier objet <mathml> dans le thème "topicid" se nommerait "dita-generalized-topicid-mathml1.xml".

Exemple — Généralisation d'un objet simple

Par exemple, un document DITA peut contenir une spécialisation de <foreign> pour MathML. Il pourrait ressembler à quelque chose comme :

<mathml class="+ topic/foreign mathml/mathml ">
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    <mi>x</mi><mo>+</mo><mn>3</mn>
  </math>
  <object><desc>X plus three</desc></object>
</mathml>

Le conteneur <mathml>, qui est un élément DITA normal, devrait être généralisé en utilisant les règles normales. L'élément math, qui n'est pas un élément DITA, sera exporté vers un autre fichier. L'élément <object> restera :

<foreign class="+ topic/foreign mathml/mathml ">
  <object data="dita-generalized-topicid_mathml1.xml" type="DITA-foreign"/>
  <object><desc>X plus three</desc></object>
</foreign>

Contenu du fichier « dita-generalized-topicid_mathml1.xml » :

<foreign class="+ topic/foreign mathml/mathml ">
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    <mi>x</mi><mo>+</mo><mn>3</mn>
  </math>
</foreign>

Exemple — Généralisation d'un objet multiple

Un objet peut aussi contenir plusieurs éléments <object> :

<mathml class="+ topic/foreign mathml/mathml ">
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    <mi>x</mi><mo>+</mo><mn>3</mn>
  </math>
  <object><desc>X plus three</desc></object>
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    <mi>y</mi><mo>-</mo><mn>2</mn>
  </math>
</mathml>

Le conteneur <mathml>, qui est un élément DITA normal, devrait être généralisé en utilisant les règles normales. Un fichier devrait être généré pour chaque ensemble d'éléments liés par le conteneur et tous les éléments <object> existants. Ici, deux fichiers seront générés, et deux nouveaux éléments <object> ajoutés à la source :

<foreign class="+ topic/foreign mathml/mathml ">
  <object data="dita-generalized-topicid_mathml1.xml" type="DITA-foreign"/>
  <object><desc>X plus three</desc></object>
  <object data="dita-generalized-topicid_mathml2.xml" type="DITA-foreign"/>
</foreign>

Contenu du fichier « dita-generalized-topicid_mathml1.xml » :

<foreign class="+ topic/foreign mathml/mathml ">
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    <mi>x</mi><mo>+</mo><mn>3</mn>
  </math>
</foreign>

Contenu du fichier « dita-generalized-topicid_mathml2.xml » :

<foreign class="+ topic/foreign mathml/mathml ">
  <math xmlns="http://www.w3.org/1998/Math/MathML">
    <mi>y</mi><mo>-</mo><mn>2</mn>
  </math>
</foreign>