El esquema XML de definición de lotes de firmas es el siguiente:
 <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="signbatch">
     <xs:complexType>
       <xs:sequence>
         <xs:element name="singlesign" maxOccurs="unbounded" minOccurs="1">
           <xs:complexType>
             <xs:sequence>
               <xs:element type="xs:string" name="datasource"/>
               <xs:element name="format">
                 <xs:simpleType>
                   <xs:restriction base="xs:string">
                     <xs:enumeration value="XAdES"/>
                     <xs:enumeration value="CAdES"/>
                     <xs:enumeration value="PAdES"/>
                   </xs:restriction>
                 </xs:simpleType>
               </xs:element>
               <xs:element name="suboperation">
                 <xs:simpleType>
                   <xs:restriction base="xs:string">
                     <xs:enumeration value="sign"/>
                     <xs:enumeration value="cosign"/>
                   </xs:restriction>
                 </xs:simpleType>
               </xs:element>
               <xs:element name="extraparams">
                 <xs:simpleType>
                  <xs:restriction  base="xs:base64Binary" />
                 </xs:simpleType>
               </xs:element>
               <xs:element name="signsaver">
                 <xs:complexType>
                   <xs:sequence>
                     <xs:element type="xs:string" name="class"/>
                     <xs:element name="config">
                       <xs:simpleType>
                         <xs:restriction  base="xs:base64Binary" />
                       </xs:simpleType>
                     </xs:element>
                   </xs:sequence>
                 </xs:complexType>
               </xs:element>
             </xs:sequence>
             <xs:attribute type="xs:string" name="Id" use="required"/>
           </xs:complexType>
         </xs:element>
       </xs:sequence>
       <xs:attribute type="xs:integer" name="concurrenttimeout" use="optional"/>
       <xs:attribute name="stoponerror" use="optional">
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:enumeration value="true"/>
             <xs:enumeration value="false"/>
           </xs:restriction>
         </xs:simpleType>
       <xs:attribute name="algorithm" use="required">
         <xs:simpleType>
           <xs:restriction base="xs:string">
             <xs:enumeration value="SHA1withRSA"/>
             <xs:enumeration value="SHA256withRSA"/>
             <xs:enumeration value="SHA384withRSA"/>
             <xs:enumeration value="SHA512withRSA"/>
           </xs:restriction>
         </xs:simpleType>
       <xs:attribute>
     </xs:complexType>
   </xs:element>
 </xs:schema>
 
Un ejemplo de definición XML de lote de firmas podría ser este (ejemplo con dos firmas en el lote):
 <?xml version="1.0" encoding="UTF-8" ?>
 <signbatch stoponerror="true" algorithm="SHA512withRSA" concurrenttimeout="9223372036854775807">
  <singlesign Id="f8526f7b-d30a-4720-9e35-fe3494217944">
   <datasource>http://google.com</datasource>
   <format>XAdES</format>
   <suboperation>sign</suboperation>
   <extraparams>Iw0KI1RodSBBdW[...]QNCg==</extraparams>
   <signsaver>
    <class>es.gob.afirma.signers.batch.SignSaverFile</class>
    <config>Iw0KI1RodSBBdWcgMT[...]wNCg==</config>
   </signsaver>
  </singlesign>
  <singlesign Id="0e9cc5de-63ee-45ee-ae02-4a6591ab9a46">
   <datasource>SG9sYSBNdW5kbw==</datasource>
   <format>CAdES</format>
   <suboperation>sign</suboperation>
   <extraparams>Iw0KI1RodSBBdWc[...]NCg==</extraparams>
   <signsaver>
    <class>es.gob.afirma.signers.batch.SignSaverFile</class>
    <config>Iw0KI1RodSBBdWcgMTM[...]Cg==</config>
   </signsaver>
  </singlesign>
 </signbatch>
 
En este se distinguen los siguientes elementos:

Cabecera de definición de lote

En el ejemplo, es la línea <signbatch stoponerror="false">, que contiene dos atributos configurables por el integrador:

stoponerror

Cuando se establece a false se indica que el proceso debe continuar incluso si alguna de las firmas del lote no puede completarse, y cuando se establece a true el proceso se para en el momento en el que se produce el primer error.

algorithm

Algoritmo de firma a usar en todo el lote.
Se admiten los siguientes algoritmos:

  1. SHA1withRSA (no se recomienda por obsoleto)
  2. SHA256withRSA
  3. SHA384withRSA
  4. SHA512withRSA

Definición de cada firma dentro del lote

Dentro del elemento de definición de lote debemos incluir uno o varios elementos de tipo singlesign, que es obligatorio cuenten en origen con un identificados único (en el ejemplo se observa la primera cabecera de definición de firma <singlesign id="7725374e-728d-4a33-9db9-3a4efea4cead">, que indica que es una firma dentro del lote identificada por la cadena 7725374e-728d-4a33-9db9-3a4efea4cead.

Configuración de cada firma dentro del lote

Cada una de las firmas dentro del lote puede ser configurada individualmente con los siguientes parámetros:
Origen de los datos a firmar

El origen de los datos debe indicarse dentro del elemento datasource del XML, por ejemplo: <datasource>http://google.com</datasource>

El origen de los datos a firmar puede indicarse:
  1. Con una URL (se admite HTTP y HTTPS). En este caso el servidor (nunca el cliente) descargará directamente los datos a firmar.
  2. Indicando directamente los datos a firmar codificados en Base64. En este caso el servidor descodificará el Base64 para obtener los datos a firmar.
Formato de firma

El formato de firma a utilizar debe indicarse dentro del elemento format del XML, por ejemplo <format>XAdES</format>.

Se admiten los siguientes formatos:
  1. XAdES
  2. CAdES
  3. PAdES (válido únicamente para documentos PDF)
Operación de firma

La operación concreta de firma a realizar debe indicarse dentro del elemento suboperation del XML, por ejemplo <suboperation>sign</suboperation>.

Se admiten las siguientes operaciones:
  1. sign (firma)
  2. cosign (cofirma)
Parámetros adicionales para la firma

Los parámetros adicionales para el formato y la operación concreta de firma (tal y como se describe en la documentación del MiniApplet) deben indicarse dentro del elemento extraparams del XML, por ejemplo <extraparams>bW9kZT1pbXBsaWNpdA0Kc2lnbmF0dXJlUHJvZHVjdGlvbkNpdHk9TWFkcmlk</extraparams>.

Estos parámetros adicionales deben indicarse codificando su representación textual como Base64.
Así, las siguientes propiedades (indicando cada parámetro en una línea de texto con el formato nombre_parĂ¡metro=valor):

mode=implicit
signatureProductionCity=Madrid

Quedarían codificadas en Base64 como:

bW9kZT1pbXBsaWNpdA0Kc2lnbmF0dXJlUHJvZHVjdGlvbkNpdHk9TWFkcmlk

Si no se desea establecer parámetros adicionales debe dejarse el nodo vacío.
 
Configuración del guardado de la firma

El guardado de la firma una vez esta se finaliza es una tarea que realiza igualmente el servidor, utilizando para ello clases especiales de guardado que el integrador debe codificar según sus necesidades.
Estas clases deben implementar el interfaz SignSaver.

La forma de indicar qué clase de guardado a usar y con qué configuración es mediante el nodo signsavercode>, que contiene a su vez dos nodos:

  1. class, con el nombre cualificado de la clase a usar.
  2. config, con las propiedades de configuración codificadas en Base64.

Así, en el ejemplo tenemos el siguiente nodo:

      <signsaver>
        <class>es.gob.afirma.signers.batch.SignSaverFile</class>
        <config>
          Iw0KI1RodSBBdWcgMjAgMTI6MTM6NDEgQ0VTVCAyMDE1DQpGaWxlTmFtZT1DXDpcXFVzZXJzXFx0b21hc1xcQXBwRGF0YVxcTG9jYWxcXFRlbXBcXEZJUk1BMi54bWwNCg==
        </config>
      </signsaver>
     

Este indica que debe usarse la clase de guardado es.gob.afirma.signers.batch.SignSaverFile con la configuración Iw0KI1RodSBBdWcgMjAgMTI6MTM6NDEgQ0VTVCAyMDE1DQpGaWxlTmFtZT1DXDpcXFVzZXJzXFx0b21hc1xcQXBwRGF0YVxcTG9jYWxcXFRlbXBcXEZJUk1BMi54bWwNCg==, que si la descodificamos vemos que contiene:

FileName=C\:\\Users\\tomas\\AppData\\Local\\Temp\\FIRMA2.xml

Que es la configuración que necesita para guardar la firma (esta clase simplemente guarda la firma en el fichero que se le indique en la configuración).