DCQL — Digital Credentials Query Language
DCQL —Digital Credentials Query Language— es la evolución del lenguaje para que los verificadores especifiquen qué credenciales necesitan en una presentation request. Diseñado para reemplazar a Presentation Exchange (PE) en OID4VP draft 22+, DCQL ofrece sintaxis más limpia y mejor expresividad para casos complejos.
A 2026 está en proceso de adopción. Las wallets serias soportarán DCQL para futuras versiones de OID4VP.
Por qué DCQL en vez de Presentation Exchange
Tres limitaciones de Presentation Exchange motivaron DCQL:
Verbosidad
PE requiere mucho JSON para queries simples. DCQL es más compacto.
Multi-formato fragmentado
PE necesita lógica distinta para SD-JWT VC, mDoc, etc. DCQL unifica la query syntax.
Constraints limitados
PE solo permite filtros básicos (igual, mayor, menor). DCQL soporta filtros más complejos sobre arrays, objetos anidados.
DCQL no obsoleta PE inmediatamente. Coexistirán por años.
La estructura básica de una query DCQL
{
"credentials": [
{
"id": "licencia",
"format": "vc+sd-jwt",
"meta": {
"vct_values": ["LicenciaConducir"]
},
"claims": [
{ "path": ["tipo"], "values": ["B1"] },
{ "path": ["validUntil"] }
]
},
{
"id": "identidad",
"format": "mso_mdoc",
"meta": {
"doctype_value": "org.iso.18013.5.1.mDL"
},
"claims": [
{ "path": ["family_name"] },
{ "path": ["age_over_21"] }
]
}
],
"credential_sets": [
{
"options": _"licencia", "identidad"_,
"purpose": "Confirmar habilitación de conducir + identidad"
}
]
}
Esto dice: "Quiero una credencial de licencia (formato SD-JWT VC) Y una credencial de identidad (formato mDoc). Tengo que recibir ambas para validar habilitación de conducir + identidad."
Las primitivas DCQL
credentials define qué credenciales individuales acepta la query. Cada una tiene:
id(interno a la query, para referencia).format(vc+sd-jwt, mso_mdoc, etc.).meta(metadata específica del formato).claims(qué campos pide).
credential_sets combina credenciales en condiciones lógicas (AND, OR). Permite expresar "una de estas dos" o "ambas obligatorias".
La ventaja en multi-formato
DCQL soporta nativamente queries cross-formato. En la misma query, una credencial puede ser SD-JWT VC y otra puede ser mDoc — la wallet sabe cómo procesar cada una basándose en format.
{
"credentials": [
{
"id": "school_diploma",
"format": "vc+sd-jwt",
"meta": { "vct_values": ["UniversityDegree"] }
},
{
"id": "drivers_license",
"format": "mso_mdoc",
"meta": { "doctype_value": "org.iso.18013.5.1.mDL" }
}
]
}
PE necesitaba dos input_descriptors con lógica específica por formato. DCQL unifica.
Selectores avanzados
DCQL permite expresar selectores complejos:
{
"claims": [
{
"path": ["address", "country"],
"values": ["AR", "BR", "MX"]
},
{
"path": ["age"],
"values": null,
"purpose": "Necesario para verificar mayoría de edad"
}
]
}
- El primer claim pide país, debe ser uno de AR/BR/MX.
- El segundo pide age sin restringir valor (acepta cualquier valor).
purposedocumenta para el usuario por qué se pide ese dato.
Estado de adopción
| Componente | Estado |
|---|---|
| OID4VP Draft 22 | DCQL en spec |
| eIDAS 2.0 | DCQL para wallets futuras |
| Sovra | En roadmap |
| Microsoft Entra | Adoptado |
| Wallets ciudadanas | Adopción gradual |
A 2026, los proyectos nuevos deberían soportar ambos (PE y DCQL) por compatibilidad. A 2027+, DCQL probablemente sea el default.
Migración PE → DCQL
Si un sistema tiene Presentation Exchange en producción y quiere migrar a DCQL:
- 1Fase 1: Implementar DCQL en paralelo a PE. Aceptar requests en ambos formatos.
- 2Fase 2: Marcar PE como deprecado en la API. Solo aceptar para verificadores legacy.
- 3Fase 3: Cutover total a DCQL.
La fase intermedia puede durar 6-12 meses para dar tiempo a verificadores a migrar.
Referencias
Relacionados
- OID4VP — protocolo de presentación de credenciales — el contexto donde DCQL opera
- DIF — Decentralized Identity Foundation — el organismo

