XML-Signature XPath Filter 2.0

La version française de cette traduction est :

http://www.xml-expert.com/TR/xmldsig-filter2/

La version française peut contenir des erreurs.

La version anglaise de cette spécification est l’unique version normative. Version originale : http://www.w3.org/TR/xmldsig-filter2/

W3C

XML-Signature XPath Filter 2.0

Recommandation du W3C du 08 Novembre 2002

Cette version:
http://www.w3.org/TR/2002/REC-xmldsig-filter2-20021108/
Dernière version:
http://www.w3.org/TR/xmldsig-filter2/
Version précédente:
http://www.w3.org/TR/2002/PR-xmldsig-filter2-20020827/
Auteurs/Editeurs:
John Boyer, PureEdge Solutions Inc., <jboyer@PureEdge.com>
Merlin Hughes, Baltimore Technologies Ltd., <merlin@baltimore.ie>
Joseph Reagle, W3C, <reagle@w3.org>

Merci de consulter les erreurs de ce document, qui pourraient inclure des erreurs normatives. Voir aussi les traductions.


Résumé

XML Signature [XML-DSig] recommande un moyen standard pour spécifier les contenus d’information pour être signés numériquement et pour représenter les signatures numériques résultant en XML. Certaines applications nécessitent la possibilité de spécifier qu’un sous-ensemble d’un document XML donné doit avoir son contenu certifié. La spécification XML Signature répond à cette exigence avec la transformation XPath. Toutefois, cette transformation peut être difficile à mettre en œuvre efficacement avec les technologies existantes. Cette spécification définit une nouvelle signature XML Signature transformée pour faciliter l’élaboration efficace de sous-ensembles du document qui interagissent en vertu de profils de performances similaires.

Statut de ce document

Ce document est la Recommandation W3C XML Signature XPath-Filter 2.0.
Le présent document a été examiné par les membres du W3C et les autres parties intéressées et a été approuvé par le Directeur comme une recommandation W3C. C’est un document stable et il peut être utilisé comme matériau de référence ou cité comme référence normative par un autre document. Le rôle du W3C en produisant cette recommandation est d’attirer l’attention sur la spécificité de ce document et à promouvoir un large déploiement. Cela améliore la fonctionnalité et l’interopérabilité du Web.

Cette spécification a été produite par le groupe de travail signature IETF/W3C XML (W3C Fiche d’activité)
qui estime que la spécification est suffisante pour la création d’implémentations interopérables et indépendantes comme le démontre le Rapport d’interopérabilité.

Les informations relatives aux spécifications de ces brevets se trouve sur la page
Working Group’s patent disclosure, en conformité avec la politique du W3C, et la Page Propriété Intellectuelle de l’IETF, en conformité avec la politique de l’IETF. Au moment de la publication, il n’y a pas de déclarations spécifiques au présent document.

Merci de signaler les erreurs dans ce document à w3c-ietf-xmldsig@w3.org (archive).

La liste des erreurs connues dans ce document est disponible à http://www.w3.org/2002/11/xpath-filter2-errata.

La version anglaise de cette spécification est la seule version normative. Les informations relatives aux traductions de ce document (si elles existent) sont disponible à l’adresse suivante: http://www.w3.org/2005/11/Translations/Query?titleMatch=filter&lang=any&search1=Submit

Une liste à jour des rapports techniques du W3C est disponible à l’adresse suivante: http://www.w3.org/TR/.

Table des matières

  1. Introduction
    1. Remerciements
  2. Terminologie
  3. Spécification de la signature Filter Transform
    1. Algorithme Identificateur
    2. Syntaxe de la signature Filter Transform
    3. Contexte de l’évaluation et d’entrée de la signature Filter Transform
    4. Modèle de traitement de la signature Filter Transform
  4. Exemples de signature Filter Transform
  5. Références

1.1. Introduction

La recommandation XML [XML] spécifie la syntaxe d’une classe d’objets appelée documents XML.
Les espaces de nomination dans la Recommanation XML [XML-NS] précisent la syntaxe et la sémantique supplémentaires pour les documents XML.
La recommandation XML Signature [XML-DSig] définit les moyens standards pour définir les contenus d’information
devant être signés numériquement, y compris la possibilité de sélectionner une partie d’un document XML qui sera signé en utilisant une transformation XPath.

Cette spécification décrit une nouvelle transformation de filtre signature qui, tout comme
XPath
transform
[XML-DSig, section 6.6.3], fournit une méthode pour mettre en place une partie de ce document
pour être signé. Dans le souci de simplifier la création d’implantations efficaces, l’architecture de cette transformation
n’est pas fondée sur l’évaluation d’une expression [XPath]
pour chaque nœud de l’arbre syntaxique XML (tel que défini par le modèle de données [XPath]).
Une séquence d’expressions XPath est utilisée à la place pour sélectionner les racines des sous-dossiers –
définir l’emplacement, dans le langage [XPointer] – qui sont combinés avec la commande SET intersection,
soustraction et addition, et est ensuite utilisé pour filtrer le node-set.
Les principales différences de la transformation XPath sont les suivants:

  • Une séquence d’opération XPath peut être executé en une transformation simple, permettant à
    des filtres complexes d’être utilisés plus simplement et de manière optimale.
  • Les expressions XPath sont évaluées en fonction du document d’entrée résultant d’un ensemble de nœuds,
    au lieu d’être utilisé comme un test booléen contre chaque noeud de l’entrée node-set.
  • Pour accroître l’efficacité, la propagation d’un nœud donné à tous les nœuds
    ayant le nœud donné comme un ancien noeud est désormais implicite de telle manière
    que cette opération peut être réalisée par des moyens plus rapide que l’évaluation
    d’une expression XPath pour chaque nœud du document.
  • Le résultat de cette succession de noeuds peut être combiné en utilisant les trois
    opérations fondamentales (intersection, soustraction et l’union), puis appliqué comme
    un filtre vis à vis de la succession de noeuds, ce qui permet des opérations telles que
    la signature d’un document dans son intégralité, sauf pour une partie déterminée, qui
    devrait être exprimée plus clairement et de manière plus efficace.

Comme dans l’expression transormation XPath originale, le but principal de cette transformation est de veiller
à ce que seules les modifications définies dans le document XML soient autorisées après que la signature ait été apposée.
Cela peut se faire en excluant précisément les nœuds qui sont autorisés à être modifiés une fois que la signature est apposée,
et en incluant tous les autres noeuds dans le résultat. C’est la responsabilité de l’auteur du filtre de transformation de la
signature de veiller à ce que les nœuds ne soient pas exclus ce qui pourrait modifier le résultat de l’interprétation de la
transformation dans le contexte de l’application.

Considérez le scénario suivant où une application souhaite apposer
deux signatures à ce document;
document; toute autre modification à ce document doit créer une signature non valide.
Lorsque l’application crée la première signature cette signature est automatiquement supprimé de ses propres
calculs. Toutefois, il sera également nécessaire d’exclure la signature suivante (la deuxième) du calcul de la première signature.
Cette spécification peut être utilisée pour répondre efficacement à cette exigence en utilisant l’opération de soustraction.

Cette transformation prend en charge également la possibilité de spécifier un ensemble de nœuds qui seront
inclus dans une signature, sachant que tous les noeuds non-spécifiées seront exclus. Cette formulation
est utile pour isoler une partie d’un document, comme un chapitre d’un document, ou une charge dans un protocole,
et peut être exprimé en utilisant l’opération d’intersection.

Il est nécéssaire d’avoir une bonne compréhension de la première signature XPath Transform [XML-DSig, section 6.6.3].


1.1.
Remerciements (Informatif)

Les personnes suivantes ont fourni une précieuse relecture qui a amélioré la qualité de ce document:

  • Christian Geuer-Pollmann, Universität Siegen
  • Donald Eastlake, Motorola
  • Gregor Karlinger, IAIK TU Graz
  • Aleksey Sanin

2. Terminologie

Les mots clés “DOIT”, “NE DOIT PAS”, “REQUIS”, “DOIT”, “NE DOIT PAS», «DEVRAIT», «NE DEVRAIT PAS”, “RECOMMANDÉ”, “PEUT-ETRE”, et “FACULTATIF” dans ce document doivent être interprétés comme décrit dans le RFC 2119 [Mots-Cles].

La recommandation 1.0 du XPath [XPath] définit le terme groupe de noeuds comme
“(une collection non ordonnée de noeuds sans doublons)” et spécifie un modèle de données pour représenter un document XML en entrée comme un ensemble
de nœuds de différents types (élément, attribut, espace de noms , texte, commentaire, instruction de traitement et racine du document).

Un document d’entrée est le document qui contient tous les nœuds disponibles au traitement par cette transformation.
Un sous-document est une portion d’un document XML indiqué par un ensemble de nœuds XPath, qui peut ne pas inclure
tous les nœuds dans ce document. Par exemple, le groupe de noeuds d’entrée
est une collection de nœuds XPath du document d’entrée
qui est devenu un paramètre à cette transformation. Un sous-document
délimité par un nœud donné est un sous-ensemble du document contenant le nœud donné et chaque nœud ayant le nœud donné comme un ancien noeud.
L’expansion de la sous-arborescence est le processus
de l’expansion d’un ensemble de nœuds pour inclure tous les sous-arbres dont la racine est un noeud dans le groupe de noeuds.
Par exemple, l’expansion de la sous-arborescence d’un groupe de noeuds composé d’un seul nœud serait un ensemble de nœuds
contenant cet élément, ses nœuds d’attributs, les nœuds d’espace de noms, et tous ses descendants, y compris leurs nœuds
d’attributs et les noeuds des espaces de noms.

La recommandation XML Signature [XML-DSig]
définit une référence comme une séquence d’étapes réalisées pour
obtenir un flux d’octets d’être signé numériquement. Une transformation
est un algorithme pouvant être utilisée comme une étape dans le modèle de traitement de référence. Une transformation prend un flux
d’octets ou un groupe de nœuds XPath comme entrée, et il produit un flux d’octets ou nœud XPath comme sortie
(le modèle de traitement de référence convertit automatiquement la sortie définitive en un flux d’octets s’il s’agit
d’un ensemble de nœuds XPath).

3. Spécification de la signature Filter Transform

La transformation opère le calcul d’un ensemble de noeuds qui est utilisé pour filtrer le groupe de noeuds
d’entrée: le groupe de noeuds de sortie est constitué de ces nœuds à la fois dans le groupe de noeuds
d’entrée-set et le groupe de noeuds filtre. En d’autres termes, le groupe de noeuds de sortie est
l’intersection du groupe de noeuds d’entrée et le groupe de noeuds filtre calculé.

Le groupe de noeuds filtre est calculé par l’évaluation d’une séquence d’expressions XPath et en
combinant leurs résultats. Un ensemble de nœuds est d’abord calculé contenant tout le document.
Dans cette séquence, chaque expression XPath est ensuite évaluée, les sous-arbres sont étenduespuis
utilisé pour transformer le nœud du filtre fixé en fonction d’une opération spécifique; intersection, soustraction, ou une addition.
Après que tous les XPaths aient été appliqués, le groupe de nœuds résultant est utilisé comme groupe de nœuds filtre.

3.1 Algorithme d’Identification

La recommandation XML Signature [XML-DSig]
utilise un [URI] pour identifier chaque algorithme à exécuter lors de la création ou la
validation d’une signature. Le filtre à transformer la signature est identifiée comme suit:

Algorithme d’Identification
http://www.w3.org/2002/06/xmldsig-filter2

3.2 Syntaxe de la signature Filter Transform

Le filtre à transformer la signature doit être représenté par une séquence d’un ou plusieurs éléments nommés XPath.
Le contenu XPath
est une série de caractères contenant une expression XPath. XPath a un attribut nommé Filtre
dont les valeurs possibles sont
intersection, soustraction, et addition. L’attribut
Filtre indique que l’opération est effectué avec l’ensemble de nœuds résultant
lors du calcul du groupe de noeuds filtre. Ce qui suit est un exemple de balisage pour un
filtre de signature qui signe le nœud d’entrée complet fixée sauf pour les éléments avec comme identifiant
foo et bar (et tous les noeuds avec un de ces éléments comme ancien noeud):

   <XPath Filter="subtract"
    xmlns="http://www.w3.org/2002/06/xmldsig-filter2">
      id("foo bar")
   </XPath>
   Définition de schéma:  

   <?xml version="1.0" encoding="utf-8"?>
   <!DOCTYPE schema
    PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd"
   [
     <!ATTLIST schema
       xmlns:xf CDATA #FIXED 'http://www.w3.org/2002/06/xmldsig-filter2'>
     <!ENTITY xf 'http://www.w3.org/2002/06/xmldsig-filter2'>
     <!ENTITY % p ''>
     <!ENTITY % s ''>
    ]>

   <schema xmlns="http://www.w3.org/2001/XMLSchema"
           xmlns:xf="http://www.w3.org/2002/06/xmldsig-filter2"
           targetNamespace="http://www.w3.org/2002/06/xmldsig-filter2"
           version="0.1" elementFormDefault="qualified">

   <element name="XPath"
            type="xf:XPathType"/>

   <complexType name="XPathType">
    <simpleContent>
      <extension base="string">
        <attribute name="Filter">
           <simpleType>
             <restriction base="string">
               <enumeration value="intersect"/>
               <enumeration value="subtract"/>
               <enumeration value="union"/>
             </restriction>
           </simpleType>
        </attribute>
      </extension>
    </simpleContent>
   </complexType>

   </schema>
   DTD:
   <!ELEMENT XPath    (#PCDATA) >
   <!ATTLIST XPath
      Filter         (intersect|subtract|union) #REQUIRED >

3.3 Contexte de l’évaluation d’entrée et de la signature Filter Transform

L’apport requis par cette transformation est un ensemble de nœuds XPath sur le document d’entrée.
Si le document d’entrée est un flux d’octets, alors la demande DOIT convertir le flux d’octets à un
groupe de nœuds XPath qui contient tous les nœuds du document (y compris un commentaire de nœuds).
Le contexte d’évaluation pour les expressions XPath dans le filtre à transformer seront:

  • Un context noeud égal au nœud racine du document dont le groupe de noeuds
    a été fourni comme contribution à cette transformation. Le nœud racine est au-desus
    de l’élément document et tout autre commentaire et noeuds d’instruction de traitement situés
    en dehors de l’élément document.
  • Une position, initialisé à 1.
  • Une taille de contexte, initialisé à 1.
  • Une bibliothèque de fonctions égales à la fonction de jeu est défini dans [XPath]
    plus une fonction nommé
    ici().
  • Un ensemble de liens variable. Aucun moyen pour initialiser ces liens n’est définie.
    Ainsi, l’ensemble des associations de variables utilisées pour évaluer l’expression
    XPath est vide, et l’utilisation d’une variable de référence dans les résultats de
    l’expression XPath est une erreur.
  • L’ensemble des déclarations d’espace de noms dans le champ d’élément XPath.

La fonctionThe function here() est définie comme suit:

Function:
Groupe de noeuds here()

La fonction here() retourne un groupe de nœuds contenant l’attribut
ou un noeud d’instruction de traitement ou de l’élément au-dessus du nœud de texte qui porte directement
l’expression XPath. Dans cette transformation, ce sera l’élément XPath. Il en résulte une erreur
si l’expression XPath n’apparaît pas dans le même document XML par rapport à laquelle l’expression XPath est évaluée.

3.4 Traitement du modèle de signature Filter Transform

Utilisant le contexte d’évaluation précité, le filtre de la signature de transformation évalue
les expressions XPath figurant dans le contenu de caractères des éléments XPath et
les utilise pour calculer un groupe de nœuds de filtre groupe de noeuds F, qui est ensuite utilisé pour filtrer groupe de noeuds d’entrée
I qui par la suite donne un groupe de noeuds d’entrée O:

  • Initialiser le groupe de nœuds filtre F formé de tous les nœuds dans le document d’entrée.
  • Parcourir chaque expression XPath, X, dans l’ordre, et actualiser le groupe de nœuds filtre F comme suit:
    • Évaluer l’expression XPath X. Le résultat est un groupe de noeuds S.
    • Calculer l’ensemble S’ constitué de tous les nœuds dans le document d’entrée qui sont présents dans S
      ou ayant un ancien groupe dans S. Elle est égale à l’union de tout les sous-arbres du document imbriqué par un nœud dans S.
    • Si la valeur de l’attribut Filter est intersection,
      il faut alors calculer l’intersection des sous-arbres sélectionnés, S’,
      avec le groupe de nœuds filtre F. Le résultat comprendra uniquement les nœuds qui sont à la fois dans
      le groupe de nœuds filtre et les sous-arbres sélectionnés: F’ = F est à l’intersection de S’ (F INTERSECT S’).
    • Si la valeur de l’attribut Filter est soustraction,
      il faut alors calculer l’intersection des sous-arbres sélectionnés, S’,
      avec le groupe de nœuds filtre F. Le résultat comprendra uniquement les nœuds qui sont à la fois dans
      le groupe de nœuds filtre mais pas les sous-arbres sélectionnés: F’ = F – S’.
    • Sinon, si la valeur de l’attribut Filter est l’
      addition, il est nécéssaire de calculer ensuite l’addition des sous-arbres sélectionnées,
      S’, avec le groupe de nœuds Filtre F. Le résultats incluera tous les noeuds qui sont
      soit dans le groupe de noeuds filtre soit dans les sous-arbres sélectionnés, ou les deux: F’ = F UNION S’.
    • Mettre à jour le groupe de nœuds filtre F pour être le nouveau groupe de noeuds F’.
  • Enfin, après l’implémentation de toutes les expressions XPath, calculer le groupe de noeuds de sortie O
    pour être l’intersection du groupe de noeuds filtre, F, avec l’entrée du groupe de noeuds, I. S à l’intersection
    du nœud de filtre calculé-set, F, avec le noeud d’entrée-set, I.
    Le résultat comprendra tous les nœuds à partir du groupe de noeuds d’entrée, qui sont aussi
    dans le groupe de nœuds filtre: O = I INTERSECT F.
  • Un groupe de noeuds d’entrée vide entraînera toujours un noeud de sortie ensemble vide.

Dans ce modèle de traitement, la conversion d’une interprétation des sous-arborescences des expressions
XPath pour un ensemble de nœuds contenant tous les nœuds qui doivent être utilisés au cours de l’opération de
définition, de même que le rendement réel de l’opération de définition, est décrite explicitement. Les codeurs
devraient observer qu’il est possible de calculer le résultat effectif de cette opération en un seul passage dans
le document d’entrée sans effectuer d’expansion des sous-arbres, ou tout ensemble des opérations:

  • Pour chaque expression XPath X, dans l’ordre, calculer l’expression et sauver le groupe de noeuds résultants, S,
    avec le groupe d’opérations associés.
  • Préfixer un ensemble de noeuds composé uniquement du document, ainsi que l’opération addition.
  • Créer un nouveau groupe de nœuds de filtre vide.
  • Traiter chaque noeud dans le document du groupe de noeuds d’entrée, ajoutant chaque noeud pour le groupe
    de noeuds de sortie F si un drapeau
    Z est vrai. Le drapeau est calculé comme suit:

    • Z est vraie si et seulement si le noeud est présent dans toute addition d’un groupe de noeuds de sous-arbre-ouverts et
      toutes les groupe de noeuds de sous-arborescences ouvertes ultérieures d’une intersection de groupe de noeuds mais
      aucun groupe de noeuds de sous-arborescence ouverte ultérieure soustraite ensemble,
      sinon Z est faux. S’il n’y a pas d’intersection ultérieure
      ou de soustraction de groupe de noeuds,
      alors cette partie du test est automatiquement validée.
    • La présence dans une sous-arborescence ouverte d’un groupe de noeuds peut être déterminée de manière efficace sans
      élargir effectivement le groupe de nœuds, par le simple maintien d’une pile ou le nombre qui identifie si des nœuds
      de ce groupe de noeuds est un ancien noeud du noeud en cours de traitement.

Les éxecutants pourraient observer que, si cette transformation est suivie d’une opération de canonisation (par exemple, [XML-C14N]),
le calcul de filtre décrit peut être efficacement mélangés avec l’ordre du document de traitement de canonisation.

4. Exemples de signature Filter Transform/a>

L’exemple ci-dessous illustre une façon de créer une signature avec le filtre de transformation signature. La fonction here() identifie l’élé,ent XPath,
et le chemin de localisation qui donne l’ancienne Signature la plus proche. En raison de la soustraction de la valeur de l’Attribut Filtre,
la sortie du filtre de transformation de la signature est un groupe de nœuds contenant chaque nœud du groupe de nœuds d’entrée à l’exception des nœuds dans le sous-arbre imbriqué par l’élément Signature
contenant l’exemple de filtre de de transformation de signature ci-dessous

   <XPath Filter="subtract"
    xmlns="http://www.w3.org/2002/06/xmldsig-filter2"
    xmlns:dsig="http://www.w3.org/2000/09/xmldsig#">
      here()/ancestor::dsig:Signature[1]
   </XPath>

Une référence de signature URI appropriée à utiliser avec ce sous-filtre serait URI="" (tout le document signature, sans les commentaires),
URI="#xpointer(/)" (tout le document signature, avec les commentaires) ou tout autre document de même référence qui inclut la signature elle-même.

Un exemple d’un filtre d’intersection est une signature qui cosigne une autre signature. Dans cet exemple, un élément Signature identifié par
PrimaryBorrowSig doit être signée. L’expression XPath obtient le nœud d’élément, et la transformation élargit le groupe de noeud de sortie pour contenir
tous les nœuds à partir du groupe de noeuds d’entrée qui sont aussi dans le sous-arbre enraciné par l’élément nœud.

   <XPath Filter="intersect"
    xmlns="http://www.w3.org/2002/06/xmldsig-filter2">
      id("PrimaryBorrowerSig")
   </XPath>

Ce type de filtre d’interesection est utile pour signer de manière efficace les sous-ensembles d’un document, s’il s’agit du même document que la
signature ou un document externe. Par exemple, si la référence à la signature URI est
URI="document.xml", alors ce document sera automatiquement analysé et seul l’élément identifié et ses descendants seront signés.

Les filtres additions seuls ne sont d’aucune utilité particulière: le groupe de nœuds initial se compose de l’ensemble du document en entrée;
toute addition avec ce dernier n’aura aucun effet, donc, le résultat de la transformation sera identique à l’entrée. L’opération addition est destiné
à suivre une opération soustraction, afin de permettre une sous-arborescence d’être supprimé, à l’exception d’une sous-arborescence inférieure qui est
encore inclus dans le résultat.

Considérons le document suivant, qui contient un même document avec une signature incluant une référence et un filtre XPath contenant trois opérations XPath:

   <Document>
     <ToBeSigned>
       <!-- comment -->
       <Data />
       <NotToBeSigned>
         <ReallyToBeSigned>
           <!-- comment -->
           <Data />
         </ReallyToBeSigned>
       </NotToBeSigned>
     </ToBeSigned>
     <ToBeSigned>
       <Data />
       <NotToBeSigned>
         <Data />
       </NotToBeSigned>
     </ToBeSigned>
     <dsig:Signature
      xmlns:dsig="http://www.w3.org/2000/09/xmldsig#"
      xmlns:dsig-xpath="http://www.w3.org/2002/06/xmldsig-filter2">
       <dsig:SignedInfo>
         ...
         <dsig:Reference URI="">
           <dsig:Transforms>
             <dsig:Transform 
              Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
               <dsig-xpath:XPath Filter="intersect"> //ToBeSigned </dsig-xpath:XPath>
               <dsig-xpath:XPath Filter="subtract"> //NotToBeSigned </dsig-xpath:XPath>
               <dsig-xpath:XPath Filter="union"> //ReallyToBeSigned </dsig-xpath:XPath>
             </dsig:Transform>
           </dsig:Transforms>
           ...
         </dsig:Reference>
       </dsig:SignedInfo>
       ...
     </dsig:Signature>
   </Document>

L’opération d’intersection calcule l’intersection du sous-arbe XPath sélectionné avec le groupe de
nœuds filtre. Dans ce cas, le nœud du filtre-set contient initialement tout le document d’entrée,
et l’expression XPath est évaluée aux deux éléments ToBeSigned, ces éléments sont étendus pour inclure tous leurs
descendants et recoupé avec le groupe de nœuds filtre, ce qui entraîne le code suivant:

     <ToBeSigned>
       <!-- comment -->
       <Data />
       <NotToBeSigned>
         <ReallyToBeSigned>
           <!-- comment -->
           <Data />
         </ReallyToBeSigned>
       </NotToBeSigned>
     </ToBeSigned><ToBeSigned>
       <Data />
       <NotToBeSigned>
         <Data />
       </NotToBeSigned>
     </ToBeSigned>

Le filtre de soustraction calcule la soustraction des sous-documents XPath-sélectionnés du filtre node-set. Dans ce cas, l’expression XPath évalue deux éléments NotToBeSigned,
ces deux éléments sont étendues pour inclure tous leurs descendants et soustraite à partir du groupe de noeuds filtre:

   <ToBeSigned>
       <!-- comment -->
       <Data />
       
     </ToBeSigned><ToBeSigned>
       <Data />
      
   </ToBeSigned>

Ensuite, le filtre de l’union calcule l’union de l’expression des sous-arbres XPath sélectionné avec le groupe de noeuds filtre.
Dans ce cas, l’expression XPath est évaluée à l’élément ReallyToBeSigned, c’est alors appliqué pour inclure tous ses descendants et
ajouté au groupe de nœuds filtre:

   <ToBeSigned>
       <!-- comment -->
       <Data />
       <ReallyToBeSigned>
           <!-- comment -->
           <Data />
         </ReallyToBeSigned>
     </ToBeSigned><ToBeSigned>
       <Data />
      
   </ToBeSigned>

Enfin, ce groupe de noeuds filtre est utilisé pour transformer le groupe de noeuds d’entrée. Dans cet exemple, le
groupe de noeuds d’entrée est l’ensemble du document, avec les commentaires supprimés. Le groupe de noeud transformé
sera alors tous les nœuds du document d’entrée, moins les commentaires, qui sont aussi dans le groupe de nœuds filtre:

   <ToBeSigned>
       
       <Data />
       <ReallyToBeSigned>
           
           <Data />
         </ReallyToBeSigned>
     </ToBeSigned><ToBeSigned>
       <Data />
      
   </ToBeSigned>

Note that the result contains no nodes that were not in the input
node-set. Although the filter node-set included comments, these were not
present in the input node-set so they are not present in the output
node-set.

Notez que le résultat ne contient pas de nœuds qui n’étaient pas dans le groupe de noeuds d’entrée.
Bien que le groupe de nœuds filtre incluaient des commentaires, ils n’étaient pas présents dans le
groupe de noeuds d’entrée, de telle sorte qu’ils ne sont pas présents dans le noeud de sortie.

   <dsig:Reference URI="">
     <dsig:Transforms>
       <dsig:Transform 
        Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
         <dsig:XPath>
           (ancestor-or-self::ToBeSigned and
            not (ancestor-or-self::NotToBeSigned))
           or ancestor-or-self::ReallyToBeSigned
         </dsig:XPath>
       </dsig:Transform>
     </dsig:Transforms>
     ...
   </dsig:Reference>

L’avantage du filtre de signature à transformer sur la transformation XPath est que ce dernier exige
une évaluation d’une expression potentiellement complexe contre chaque noeud dans le système d’entrée, qui
a s’est révélée coûteuse dans la pratique pour de nombreuses opérations utiles. Cette spécification du filtre
est nécessaire pour l’évaluation des expressions XPath simple, puis l’exécution de certaines opérations de
configuration de base ou leur équivalent, qui peut être mis en œuvre de manière beaucoup plus efficace.

5. References

Keywords
RFC 2119: Key words for
use in RFCs to Indicate Requirement Levels.
S. Bradner. Best
Current Practice, March 1997.
http://www.ietf.org/rfc/rfc2119.txt
URI
RFC 2396: Uniform
Resource Identifiers (URI): Generic Syntax.
T. Berners-Lee, R.
Fielding, and L. Masinter. Standards Track, August 1998.
http://www.ietf.org/rfc/rfc2396.txt
XML
Extensible
Markup Language (XML) 1.0 (Second Edition).
T. Bray, E. Maler, J.
Paoli, and C. M. Sperberg-McQueen. W3C Recommendation, October
2000.
http://www.w3.org/TR/2000/REC-xml-20001006
.
XML-C14N
Canonical
XML.
J. Boyer. W3C Recommendation, March 2001.
http://www.w3.org/TR/2001/REC-xml-c14n-20010315
http://www.ietf.org/rfc/rfc3076.txt
XML DSig
XML-Signature
Syntax and Processing
. D. Eastlake, J. Reagle, and D. Solo. W3C
Recommendation, February 2002.
http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/
XML-NS
Namespaces in
XML
. T. Bray, D. Hollander, and A. Layman. W3C Recommendation,
January 1999.
http://www.w3.org/TR/1999/REC-xml-names-19990114/
XPath
XML Path
Language (XPath) Version 1.0
. J. Clark, and S. DeRose. W3C
Recommendation, November 1999.
http://www.w3.org/TR/1999/REC-xpath-19991116
XPointer
XML Pointer
Language (XPointer)
. S. DeRose, R. Daniel, and E. Maler. W3C
Candidate Recommendation, January 2001.
http://www.w3.org/TR/2001/CR-xptr-20010911/