| Metadato | Valor |
|---|---|
| Versión / Version | v1 |
| Estado / Status | Vigente desde la fase 06.4 para todo AIP nuevo |
| URI del perfil / Profile URI | https://docs.docuten.com/earchiving/sip-aip-inventory-rules/v1 |
| Dónde se cita / Where it is cited | El eventDetail del evento PREMIS VALIDATION del paso 7 (forStepObject(sipId, 7, "inventory")) y el campo rulesUri del informe sip-aip-inventory de ingest_validation_reports (step_number = 7) |
| Implementación / Implementation | SipAipInventoryRules (catálogo), SipAipInventory (comparador), InventoryResult (resultado e informe), en earchiving-ingest/.../ingest/inventory/ |
| Decisiones / Decisions | D-07, D-08, D-09a, D-12, D-17 (06.4-CONTEXT.md) |
| Fecha / Date | 2026-10-28 |
Este documento define la lista blanca cerrada y versionada de reglas con las que el paso 7 de la ingesta compara el inventario del SIP recibido con el del AIP construido en el paso 6. Un peritaje que disponga del SIP, del AIP y de este documento puede reproducir la comparación y llegar al mismo resultado que cita el evento sellado. Es el documento que la URI de la tabla anterior identifica.
La URI es un identificador, no una URL que deba resolverse. No se dereferencia en tiempo de ingesta, sellado ni verificación.
This document defines the closed, versioned allow-list of rules that ingest step 7 uses to compare the inventory of the received SIP with the inventory of the AIP built by step 6. An expert witness holding the SIP, the AIP and this document can reproduce the comparison and reach the result cited by the sealed event. The URI is an identifier, not a URL to be dereferenced.
Qué se compara. La comparación es bidireccional (D-07): se aplican las reglas al lado SIP para derivar el AIP esperado y se compara con el AIP real. Por cada objeto se compara:
{aipId}/);dmdSec, amdSec, fileSec, structMap), como multiconjunto
de tokens (INV-R09).Una discrepancia es un objeto que falta en el AIP, un objeto que sobra en el AIP, una huella distinta
o una sección METS ausente o de más. Lo que ninguna regla explica es un bug de transformación del
servicio: el paso 7 termina en FAILED con el código INVENTORY_DISCREPANCY (D-10).
Qué no se compara. Los bytes de los METS (METS.xml y representations/<r>/METS.xml): el paso
6 los reconstruye y sus bytes difieren siempre de los del SIP. De los METS solo se comparan sus
secciones (INV-R09).
Compared: package-relative path, SHA-256 when the governing rule compares digests, and the METS sections present. Not compared: the METS bytes, which step 6 rebuilds.
<r> es el id de representación y <f> un nombre de fichero. Huella indica si la regla exige el
mismo SHA-256 en origen y destino. Multiplicidad es el número de copias que la regla añade en el
AIP por cada objeto de origen que gobierna.
| ID | Origen en el SIP | Destino en el AIP | Huella | Multiplicidad | Transitoria |
|---|---|---|---|---|---|
| INV-R01 | representations/<r>/data/** |
misma ruta | sí | 1 | no |
| INV-R02 | metadata/descriptive/<f> |
misma ruta | sí | 1 | no |
| INV-R03 | metadata/preservation/<f> (raíz) |
metadata/preservation/producer/<f> |
sí | 1 | no |
| INV-R04 | metadata/other/<f> (raíz) |
metadata/other/producer/<f> |
sí | 1 | no |
| INV-R05 | metadata/other/<f> (raíz) |
metadata/other/<f> (copia declarada por el dmdSec MDTYPE=OTHER) |
sí | 1 (total 2 junto a INV-R04) | sí |
| INV-R06 | representations/<r>/metadata/{preservation,descriptive,technical,source,rights}/<f> |
misma ruta | sí | 1 | no |
| INV-R07 | — (sin origen en el SIP) | METS.xml, representations/<r>/METS.xml, documentation/package-profile.xml y schemas/<f> del servicio |
no | 1 | no |
| INV-R08 | schemas/<f> (los 4 XSD del estándar) |
— (no se propagan) | no | 0 | no |
| INV-R09 | secciones METS dmdSec, amdSec, fileSec, structMap |
secciones del AIP según §6, más las de servicio | no | 1 por token | no |
Notas por regla / Notes per rule.
sip_files.producer/, separada de la del servicio. Esta regla
cierra DI-06.3-09 en el inventario.representationMetadata_measured_arrivesByteForByte):
los cinco tipos de metadata de representación llegan al AIP byte a byte, así que la regla compara
huella en los cinco. La metadata «other» de representación no entra: el paso 2 la rechaza (§7).schemas/<f> del servicio son los cuatro
del estándar (DILCISExtensionMETS.xsd, DILCISExtensionSIPMETS.xsd, mets1_12.xsd, xlink.xsd),
package-profile-v1.xsd y los cinco recursos Dublin Core (oai_dc.xsd, simpledc20021212.xsd,
xml.xsd, XMLSchema.dtd, datatypes.dtd). Los METS no comparan huella porque se reconstruyen.schemas/ del SIP lo rechaza el paso 2 con
SIP_CONTENT_NOT_ARCHIVABLE y nunca llega al inventario.metadata/other/<f> de la raíz del SIP produce 2 copias en el AIP: una por INV-R04
(metadata/other/producer/<f>) y otra por INV-R05 (metadata/other/<f>). Las dos deben tener la
huella del original.Multiplicities of the rules governing the same source add up: a root metadata/other/<f> yields 2
AIP copies (INV-R04 + INV-R05). Any object present more times than its rules allow is a discrepancy.
Por qué existe. El bucle descriptivo del paso 6 (D-24 de 05.1.1) declara el «other» de la raíz
también como dmdSec MDTYPE=OTHER con href=metadata/descriptive/../other/<f>, y commons-ip2
materializa esa referencia como una segunda copia en metadata/other/<f> (DI-06.3-03). Es un
comportamiento medido del servicio, no un error del productor, así que el inventario lo declara para
no fallar todo AIP con «other».
Lo que NO hace. La regla declara la copia esperada; NO legitima el href con .. de esa
referencia. La amenaza de esa referencia sigue enrutada a /gsd-secure-phase.
Condición de retirada. Cuando se corrija en origen el bucle descriptivo y desaparezca el href con
.., la copia doble deja de existir y INV-R05 se retira. Retirarla es una versión nueva de este
documento con URI nueva (§10); la v1 no se edita.
INV-R05 declares the measured second copy of a root other file caused by the descriptive loop; it
does NOT legitimise the .. href. It is withdrawn in a new version once the loop is fixed at source.
Las secciones se extraen como tokens del METS.xml raíz y de cada representations/<r>/METS.xml,
en el SIP y en el AIP. Traducción medida (06.4-RESEARCH, «Secciones METS presentes»):
| Sección (token) | En el SIP | En el AIP |
|---|---|---|
dmdSec[MDTYPE=DC] |
1 por fichero descriptivo | 1 por fichero descriptivo (INV-R02) |
dmdSec[MDTYPE=OTHER] |
1 por metadata/other/<f> |
2 por metadata/other/<f>: metadata/other/producer/<f> (INV-R04) y metadata/descriptive/../other/<f> (INV-R05) |
amdSec/digiprovMD[MDTYPE=PREMIS] del productor |
1 por metadata/preservation/<f> |
1 por fichero, hacia metadata/preservation/producer/<f> (INV-R03) |
amdSec/digiprovMD de servicio |
— | digiprov-1 (premis.xml), digiprov-2 (origin-attestation.xml), digiprov-4 (aip-timestamp.tst) y, si el paso 5 declaró informe DSS, digiprov-3 (dss-validation-report.xml) |
fileGrp[USE=Representations/<r>] |
1 por representación | 1 por representación |
fileGrp[USE=Schemas] |
los 4 XSD del estándar (INV-R08) | los schemas/<f> del servicio (INV-R07) |
fileGrp[USE=Documentation] |
— (el paso 2 rechaza documentation/) |
documentation/package-profile.xml (INV-R07) |
structMap[LABEL=CSIP], div de primer nivel |
Metadata, Metadata/Other, Schemas, Documentation, Representations/<r> según contenido |
los mismos, más los que añaden los añadidos de servicio |
Secciones de servicio con mdRef todavía sin fichero. En el paso 7 el METS del AIP ya declara
los digiprovMD de servicio, pero sus ficheros los añade el paso 10 (medido en 06.4-01, A3: el METS
del paso 6 declara dss-validation-report.xml y el ZIP no lo contiene). Son secciones de servicio de
esta regla: ni objeto que falta ni sección de más.
Precisiones de la tokenización (aprobadas en el checkpoint de 06.4-09).
digiprovMD del servicio se tokenizan por ID, no por MDTYPE. Las cuatro referencias
de servicio que escribe el paso 6 llevan un ID fijo (digiprov-1 a digiprov-4) y producen el
token digiprovMD[ID=digiprov-<n>]. No se tokenizan por MDTYPE porque ese atributo no las
distingue de las del productor: medido, digiprov-4 (aip-timestamp.tst) es MDTYPE=OTHER. El
resto de hijos de amdSec se tokeniza por MDTYPE.div envolvente del structMap no se tokeniza. El paso 6 cambia su OBJID, así que
solo se tokenizan sus hijas, las divisiones de contenido de primer nivel
(structMap[LABEL=<l>]/div[LABEL=<d>]).Limitación conocida, aceptada. Un digiprovMD del productor cuyo ID tenga la forma
digiprov-<n> se tokeniza como si fuera de servicio y produce un falso positivo que falla cerrado con INVENTORY_DISCREPANCY: el paso 7 termina en FAILED y no se emite sello alguno. Es un fallo
seguro —nunca deja pasar una discrepancia real— y se acepta en la v1.
Precisions: service digiprovMD sections are tokenised by ID (digiprov-1..4), not by MDTYPE
(digiprov-4 is MDTYPE=OTHER); the wrapping structMap div is not tokenised (step 6 changes its
OBJID), only its children. Known, accepted limitation: a producer digiprovMD with an ID of the form
digiprov-<n> yields a false positive that fails closed with INVENTORY_DISCREPANCY.
El paso 2 rechaza con SIP_CONTENT_NOT_ARCHIVABLE (REJECTED, D-09a) el contenido que el servicio no
archiva. Ese contenido nunca llega al inventario, y por eso no tiene regla:
technical/source/rights con MDTYPE=OTHER y las raíz PREMIS:OBJECT/PREMIS:RIGHTS;representations/<r>/metadata/other/**);documentation/ de paquete y documentation/ de representación;schemas/ de representación;schemas/ de la raíz, todo XSD que no sea uno de los 4 del estándar (por nombre y huella, INV-R08);DI-06.3-04).premis.xml / Relation to premis.xmlLos ficheros de metadata/preservation/producer/ y metadata/other/producer/ no se inventarían como objetos file de premis.xml (D-12).
Ya tienen SHA-256 nativo en el METS y entran en el leaf set del sello #1 (06.3 D-04), y los cubre este
inventario (INV-R03, INV-R04). premis.xml no cambia por este motivo. La regla vive en el inventario,
no en el PREMIS.
Files under producer/ are not inventoried as PREMIS file objects; they carry native SHA-256 in
the METS, are leaves of seal #1 and are covered by INV-R03/INV-R04. premis.xml is unchanged.
El inventario parte de lo declarado en el METS del SIP (D-17). Los ficheros del ZIP que el METS no declara no se inventarían: commons-ip2 los ignora y no llegan al AIP, así que contarlos daría un falso «bug nuestro». Vigilar ficheros no declarados del ZIP es una regla de seguridad del paso 2, fuera de esta versión.
The inventory starts from what the SIP METS declares. Undeclared ZIP entries are not inventoried; watching for them is a step-2 security rule outside this version.
VALIDATION del paso 7,
así que la v1 no se edita; un cambio es la v2 con URI nueva..../sip-aip-inventory-rules/v2) y documento nuevo. La lista no se
amplía en tiempo de ejecución ni por configuración.SipAipInventoryRulesDocTest comprueba que este documento y SipAipInventoryRules coinciden en IDs,
multiplicidad, transitoriedad, huella, versión y URI, y fija la forma de las nueve reglas con un
snapshot literal (RULES_V1_SNAPSHOT) que tampoco se edita.validation del vocabulario eventType de la
Library of Congress (https://id.loc.gov/vocabulary/preservation/eventType/val.html, código val).
Lo comprobó manualmente el responsable el 2026-10-28 en
https://id.loc.gov/vocabulary/preservation/eventType.html.In force since phase 06.4 for every new AIP: v1 is never edited; any change is v2 with a new URI.