4.4. Traitement conditionnel (profilage)

Le traitement conditionnel, appelé également profilage (profiling), est le filtrage ou le marquage (flagging) de l'information fondés sur des critères au traitement.

DITA essaye de mettre en œuvre un traitement conditionnel dans un sens sémantique : plutôt que de permettre l'accumulation avec le temps de valeurs arbitraires dans un document, dans un attribut de traitement d'utilisation générale, qui fait sens seulement pour l'auteur original, nous encourageons la création de métadonnées en utilisant des attributs de métadonnée spécifiques sur le contenu. Ces valeurs de métadonnées peuvent alors être mises à profit dans un nombre quelconque de processus, dont le filtrage, le marquage, la recherche et l'indexation, au lieu de convenir seulement au filtrage.

Attributs de traitement conditionnel

Pour un élément <topic> ou <topicref>, les métadonnées de public, de plateforme et de produit peuvent s'exprimer par des attributs sur l'élément <topic> ou <topicref>, ou par des éléments au sein de l'élément <prolog> ou <topicmeta> du thème. Bien que les éléments de métadonnée soient plus expressifs, la signification des valeurs est la même et peut être utilisée en coordination : par exemple, les éléments <prolog> peuvent définir entièrement les publics d'un thème, puis on pourra utiliser des attributs de métadonnée au sein du contenu pour identifier les parties qui ne s'appliquent qu'à certains publics.

audience
Les valeurs des attributs énumérés de l'élément de métadonnée <audience> ont la même signification lorsqu'elles sont utilisées dans l'attribut audience d'un élément de contenu. Par exemple, la valeur "user" a la même signification, que celle-ci apparaisse dans l'attribut type de l'élément <audience> d'un thème ou dans l'attribut audience d'un élément de contenu. Le principe s'applique aux attributs de type (type), de travail (job) et de niveau d'expérience (experiencelevel) de l'élément <audience>.

Les valeurs dans l'attribut audience peuvent également servir à référencer une description plus complète d'un public dans un élément <audience>. Utilisez le nom du public dans l'élément <audience> pour appeler le même public dans un attribut audience.

L'attribut audience prend une liste de valeurs, délimitées par des blancs, qui peuvent correspondre ou non aux valeurs de nom des éléments <audience>.

platform
La plateforme peut être le système d'exploitation, le matériel ou un autre environnement. Cet attribut est l'équivalent de l'élément <platform> des métadonnées du thème.

L'attribut platform prend une liste de valeurs délimitées par des blancs, qui peut correspondre ou non au contenu d'un élément <platform> dans le prologue.

product
Le nom du produit ou du composant, la version, la marque, ou un code ou un numéro internes. Cet attribut est l'équivalent de l'élément <prodinfo> des métadonnées du thème.

L'attribut product prend une liste de valeurs délimitées par des blancs, qui peuvent correspondre ou non aux valeurs de l'élément <prodname> dans le prologue.

rev
L'identificateur du niveau de révision. Par exemple, si un paragraphe a changé ou a été ajouté pendant la révision 1.1, l'attribut rev pourrait contenir la valeur "1.1".
otherprops
Un fourre-tout (catchall) pour les valeurs de qualification des métadonnées à propos du contenu. Cet attribut est l'équivalent de l'élément <othermeta> des métadonnées du thème.

L'attribut otherprops prend une liste de valeurs délimitées par des blancs, qui peuvent correspondre ou non aux valeurs des éléments <othermeta> dans le prologue.

Par exemple, voici une liste de valeurs otherprops simple : <codeblock otherprops="java cpp">

L'attribut peut aussi accepter des groupes de valeurs étiquetés, mais cette syntaxe est déconseillée dans DITA 1.1 en faveur de la spécialisation des attributs. La syntaxe des groupes étiquetés est similaire à celle des attributs généralisés et peut perturber les processeurs. Un groupe étiqueté consiste en une valeur de chaîne, suivie d'une parenthèse ouvrante, suivie d'une ou plusieurs valeurs délimitées par des blancs, suivies d'une parenthèse fermante. Le format simple suffit lorsqu'un ensemble d'information ne requiert qu'un seul axe de métadonnée supplémentaire, en plus des attributs de métadonnée de base product, platform et audience. Le format complet ressemble à la spécialisation des attributs en cela qu'il permet deux (ou plus) axes de métadonnée supplémentaires.

Par exemple, voici une liste de valeurs otherprops complexe : <codeblock otherprops="proglang(java cpp) commentformat(javadoc html)">

props
Un attribut générique pour les valeurs de traitement conditionnel. En DITA 1.1, l'attribut props peut être spécialisé afin de créer de nouveaux attributs de traitement conditionnel.

Utilisation des attributs de métadonnée

Chaque attribut prend zéro ou plusieurs valeurs de chaîne délimitées par des espaces. Par exemple, on peut utiliser l'attribut product pour identifier le fait qu'un élément s'applique à deux produits particuliers.

Figure 1. Exemple de source
<p audience="administrator">Set the configuration options:
 <ul>
  <li product="extendedprod">Set foo to bar</li>
  <li product="basicprod extendedprod">Set your blink rate</li>
  <li>Do some other stuff</li>
  <li platform="Linux">Do a special thing for Linux</li>
 </ul>
</p>

Traitement des attributs de métadonnée

Lors du traitement, on spécifie les valeurs que l'on veut exclure et celles que l'on veut marquer en utilisant un profil de traitement conditionnel (décrit dans la spécification du langage DITA). Par exemple, un éditeur produisant de l'information pour un public mélangé en utilisant le produit de base (« basicprod ») pourrait choisir de marquer les informations qui concernent les administrateurs et d'exclure les informations qui s'appliquent au produit étendu (« extendedprod »), et exprimer ces choix dans un profil de traitement conditionnel tel que celui-ci :

<prop att="audience" val="administrator" action="flag" >
  <startflag>ADMIN</startflag>
</prop>
<prop att="product"  val="extendedprod"  action="exclude"/>

Lors de la sortie, le paragraphe est marqué et le premier élément de la liste est exclu (puisqu'il s'applique au produit étendu), mais le deuxième élément de liste est encore inclus (bien qu'il s'applique à « extendedprod », il s'applique aussi à « basicprod » qui n'est pas exclu).

Le résultat devrait ressembler à ceci :

ADMIN Set the configuration options:

Logique du filtrage

Pour la décision d'exclure ou non un élément particulier, le processus devrait évaluer chaque attribut puis évaluer l'ensemble des attributs :

Par exemple, si un paragraphe s'applique à trois produits et que l'éditeur a choisi de tous les exclure, le processus devrait exclure le paragraphe ; même si le paragraphe s'applique à un public ou une plateforme que l'on n'exclut pas. Mais si le paragraphe s'applique à un autre produit qui n'a pas été exclu, son contenu est encore pertinent pour la sortie attendue et devrait alors être préservé.

Logique du marquage

Pour la décision de marquer ou non un élément particulier, le processus devrait évaluer chaque valeur. À chaque fois qu'une valeur qui aura été fixée comme marquée apparaît dans son attribut (par exemple, audience="ADMIN"), le processus devrait ajouter la marque (flag). Lorsque plusieurs marques s'appliquent à un seul élément, des marques multiples devraient se trouver en sortie, typiquement dans l'ordre où celles-ci sont rencontrées.

Le marquage peut être réalisé avec le texte (par exemple, du texte en gras sur un fond coloré) ou avec des images. Lorsque le même élément est évalué à la fois comme marqué et filtré (par exemple, marqué à cause d'une valeur d'attribut audience et filtré à cause de ses valeurs d'attribut product), l'élément devrait être filtré.