Firma separada o envuelta
Los ejemplos que figuran a continuación ilustran el uso de las firmas separadas e incrustadas.
Firma separada
En la asignación de ejemplo siguiente hemos seleccionado la opción Firma separada. Esto quiere decir que se generan dos archivos distintos: (1) el archivo de salida de la asignación, MarketingExpenses.xml, y (ii) un archivo de firma digital temporal llamado MarketingExpenses.xml.xsig (imágenes siguientes). Puede encontrar la asignación MarketingExpenses_DetachedSignature.mfd en la carpeta MapForceExamples.


Para generar los archivos .xml y .xsig en el directorio de salida, haga clic en el botón Guardar todos los resultados generados
de la barra de herramientas.
Firmas envueltas
Si selecciona la opción Firma envuelta, el elemento <xsig:Signature> se integra en el archivo de salida después de <expense-item> (imágenes anteriores). Puede ver una asignación con esta opción en MapForceExamples\MarketingExpenses_EnvelopedSignature.mfd.
Validez del documento XML
Si la firma XML está incrustada en el documento XML, se añade al documento un elemento Signature en el espacio de nombres http://www.w3.org/2000/09/xmldsig#. Para que el documento siga siendo válido según el esquema, éste debe contener las declaraciones de elemento adecuadas. Si no desea modificar el esquema del documento XML, utilice la opción Separada (ver más arriba).
A continuación puede ver dos fragmentos de esquemas XML que muestran cómo se permite el elemento Signature de una firma envuelta. En el primer esquema XML, se importó el esquema XML Signatura al esquema del usuario (resaltado en amarillo).
<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>
En el segundo esquema XML se agregó un elemento comodín genérico que coincide con cualquier elemento de otros espacios de nombres (resaltado en amarillo). Al darle el valor lax al atributo processContents, el validador ignorará este elemento (porque no se encontró ninguna declaración de elemento coincidente). Por tanto, el usuario no necesita hacer referencia al esquema de la firma XML. El inconveniente de esta opción, sin embargo, es que cualquier elemento (no solo el elemento Signature) puede agregarse en la ubicación especificada del documento XML sin que ello provoque la invalidez del documento 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>