5.4. Spécialisation d'un contenu étranger ou inconnu

La spécialisation des éléments <<foreign>> ou <<unknown>> est une extension ouverte de l'architecture DITA permettant à ceux qui adoptent DITA d'incorporer des vocabulaires normalisés de contenu non textuel, nouveaux ou existants, tels que MathML et SVG, comme des objets de type en-ligne.

Incorporation d'un contenu étranger ou inconnu

Il existe trois méthodes par lesquelles un adoptant DITA peut incorporer du contenu étranger dans DITA :

La spécialisation de <foreign> ou de <unknown> devrait normalement s'implémenter comme un domaine, mais ceux qui cherchent un contrôle accrû sur le contenu peuvent implémenter le vocabulaire étranger dans le cadre d'une spécialisation de structure.

L'imbrication du contenu dans un élément <foreign> ou <unknown> non spécialisé, en raison du modèle de contenu ANY, offre le moins de contrôle sur le contenu et gêne l'interopérabilité.

Contenu étranger ou inconnu et l'attribut de classe d'architecture

L'attribut class a une utilisation spécifique dans DITA. Il identifie le module de spécialisation du type d'élément ainsi que les types des éléments ancêtres et les modules de spécialisation auxquels ils appartiennent. Chaque élément DITA doit avoir un attribut class. Puisque les éléments définis au sein du vocabulaire étranger ne sont pas des éléments DITA, il n'y a pas d'obligation pour ces éléments d'avoir un attribut de classe d'architecture. Les éléments qui spécialisent les éléments <foreign> ou <unknown>, donc des éléments DITA, doivent obligatoirement avoir un attribut class.

Specialisation d'un contenu étranger ou inconnu avec des définitions DTD.

Pour des informations plus spécifiques sur la spécialisation des définitions DTD, cf. la section 5.8.4. Modularisation dans les définitions DTD

<!-- declaration for the specialized wrapper -->
<!ENTITY % svg "svg">

<!-- included SVG document type -->
<!ENTITY % SVG.prefix "svg" >
<!ENTITY % svg-qname.mod
    PUBLIC "-//W3C//ENTITIES SVG 1.1 Qualified Name//EN"
           "svg-qname.mod" >

<!-- definition for the specialized wrapper  -->
<!ELEMENT svg ((%SVG.svg.qname;)>
<!ATTLIST svg %global-atts;
          class CDATA "+ topic/foreign svg-d/svg "
>
Un exemple SVG dans un élément de paragraphe
<p>This is an ellipse.
  <svg>
    <svg:svg width="100%" height="100%" version="1.1"
xmlns="http://www.w3.org/2000/svg">

<ellipse cx="300" cy="150" rx="200" ry="80"
style="fill:rgb(200,100,50);
stroke:rgb(0,0,100);stroke-width:2"/>

    </svg:svg>    
  </svg>.
</p>
Spécialisation d'un contenu étranger avec des schémas XML

Pour des informations plus spécifiques sur la spécialisation des schémas XML, cf. la section 5.8.5. Modularisation dans les schémas.

<!-- importing MathML document type --> 
<xs:import namespace="http://www.w3.org/1998/Math/MathML" schemaLocation="mathml2.xsd">
 
<!-- definition for the specialized wrapper  -->
<xs:element name="mathML" type="mathML.class" />
<xs:complexType name="mathML.class">
  <xs:choice>
      <xs:element ref="mml:math" />
  </xs:choice>
  <xs:attribute name="outputclass" type="xs:string"/>
    <xs:attributeGroup ref="univ-atts"/>
    <xs:attributeGroup ref="global-atts"/>
    <xs:attribute ref="class" default="+ topic/foreign mathML/mathML"/>
</xs:complexType>

<!-- definition for each element extended by the domain  -->    
<xs:group name="ma-d-foreign">
  <xs:choice>
     <xs:element ref="mathML" />
  </xs:choice>
</xs:group>
  
<!-- definition for the named model groups  -->
<xs:group name="foreign">
   <xs:choice>
     <xs:group ref="foreign"/>
     <xs:group ref="ma-d-foreign"/>
   </xs:choice>
</xs:group>
Exemple de spécialisation XML Schema de MathML
Utilisation d'un élément <foreign> spécialisé avec un élément <object> utilisant MathML.
<p>... as in the formula 
<object>
  <desc>4 + x</desc>
  <mathML>
    <mml:math display="block">
      <mml:mrow>
        <mml:mo>&sum;</mml:mo>
        <mml:mn>4</mml:mn>
        <mml:mo>+</mml:mo>
        <mml:mi>x</mml:mi>
      </mml:mrow>
    </mml:math>    
  </mathML>
 <object>.
</p>