Firma separa o envuelta
Los ejemplos siguientes ilustran cómo se usan las firmas incrustadas envueltas y separadas.
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 temporall 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 de la barra de herramientas Guardar todos los resultados generados .
Firma envuelta
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, la firma XML se puede crear en un archivo externo con la opción Separada (véase punto anterior).
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 XML Signatures. 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>