Détaché vs Enveloppé
Les exemples ci-dessous illustrent l’utilisation des signatures détachées et intégrées.
Signatures détachées
Pour le mappage ci-dessous, l’option Signature détachée a été sélectionnée. Pour cette raison, deux fichiers séparés ont été générés : (i) le fichier de sortie de mappage appelé MarketingExpenses.xml et (ii) un fichier de signature numérique temporaire appelé MarketingExpenses.xml.xsig (voir la capture d’écran ci-dessous). Le mappage MarketingExpenses_DetachedSignature.mfd est disponible dans le dossier MapForceExamples.
Pour générer les fichiers .xml et .xsig dans le répertoire de sortie, cliquez le bouton de la barre d’outils Enregistrer toutes les sorties générées .
Signatures enveloppées
Si vous sélectionnez l’option Signature enveloppée, l’élément <xsig:Signature> sera intégré dans le fichier de sortie après l’élément <expense-item> (voir la cpature d’écran ci-dessus). Cette fonction est illustrée dans MapForceExamples\MarketingExpenses_EnvelopedSignature.mfd.
Validité du document XML
Si une signature XML est intégrée dans le document XML, un élément Signature dans l'espace de noms http://www.w3.org/2000/09/xmldsig# est ajouté au document XML. Pour que le document reste valide, conformément à un schéma, le schéma doit contenir les déclarations d'élément appropriées. Si vous ne souhaitez pas modifier le schéma du document XML, utilisez l’option Détaché (voir ci-dessus).
Les listes de codes ci-dessous montrent comment l’élément Signature d’une signature enveloppée peut être autorisée. Dans la première des deux listes, le schéma de signature XML est importé dans le schéma de l'utilisateur (en surbrillance jaune).
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsig="http://www.w3.org/2000/09/xmldsig#"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<xs:import namespace="http://www.w3.org/2000/09/xmldsig#"
schemaLocation="http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd"/>
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element ref="FirstChildOfRoot"/>
<xs:element ref="SecondChildOfRoot" minOccurs="0"/>
<xs:element ref="xsig:Signature" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
...
</xs:schema>
Une seconde option est d'ajouter un élément de caractère générique général qui fait correspondre tout élément depuis d'autres espaces de noms (en surbrillance jaune) La configuration de l'attribut processContents sur lax fait passer le validateur sur cet élément, parce qu'aucune déclaration de l'élément correspondant n'a été trouvée. Par conséquent, l'utilisateur n'a pas besoin de référencer le schéma de signatures XML. L'inconvénient de cette option est toutefois que tout élément (et pas uniquement l'élément Signature) peut être ajouté à l'emplacement spécifié dans le document XML sans invalider le document XML.
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element ref="selection"/>
<xs:element ref="newsitems" minOccurs="0"/>
<xs:element ref="team" minOccurs="0"/>
<xs:any namespace="##other" minOccurs="0" processContents="lax"/>
</xs:sequence>
</xs:complexType>
</xs:element>