# Feature: CLI
El CLI `xdoc` es una herramienta auxiliar para inspeccionar XML desde terminal.
Sirve durante desarrollo para probar parser, writer, query, schema y
canonicalizacion sin escribir un programa Rust para cada chequeo.
## Que aprenderas aqui
- [ ] Ejecutar el CLI desde el workspace.
- [ ] Formatear y compactar XML.
- [ ] Validar que un XML este bien formado.
- [ ] Ejecutar queries.
- [ ] Validar contratos simples.
- [ ] Canonicalizar XML para inspeccion.
## Archivo
- [ ] `crates/xdoc-cli/src/main.rs`
## Ejecutar localmente
Desde el root del repo:
```bash
cargo run -p xdoc-cli -- --help
```
El package es `xdoc-cli`, pero el binario instalado se llama `xdoc`.
## Formatear XML
```bash
cargo run -p xdoc-cli -- format tests/fixtures/xml/simple.xml
```
Usa el writer pretty del motor.
## Compactar XML
```bash
cargo run -p xdoc-cli -- compact tests/fixtures/xml/simple.xml
```
Esto es util para comparar salida deterministica.
## Validar well-formed XML
```bash
cargo run -p xdoc-cli -- validate-wellformed tests/fixtures/xml/simple.xml
```
Alias disponible:
```bash
cargo run -p xdoc-cli -- parse tests/fixtures/xml/simple.xml
```
Ambos usan el parser seguro del motor.
## Ejecutar query
```bash
cargo run -p xdoc-cli -- query \
tests/fixtures/xml/simple.xml \
"/Root/Item[@code='B']/text()"
```
La expresion usa el subset documentado en [query.md](query.md).
## Validar contrato simple
```bash
cargo run -p xdoc-cli -- validate \
tests/fixtures/xml/simple.xml \
tests/fixtures/contracts/simple-list.toml
```
El TOML de contratos del CLI es minimo y manual. Sirve para inspeccion y demos,
no para reemplazar un formato completo de contratos productivos.
## Canonicalizar
```bash
cargo run -p xdoc-cli -- canonicalize tests/fixtures/xml/simple.xml
```
Algoritmo explicito:
```bash
cargo run -p xdoc-cli -- canonicalize \
tests/fixtures/xml/simple.xml \
--algorithm c14n10
```
Valores actuales:
- [ ] `c14n11`
- [ ] `c14n10`
## Exit codes
- [ ] `0`: comando exitoso.
- [ ] `1`: error de runtime, XML invalido, validacion fallida u operacion no
soportada.
- [ ] `2`: uso incorrecto del CLI.
## Cuando usar el CLI
Usalo para:
- [ ] Revisar rapidamente si un XML parsea.
- [ ] Ver como writer formatea un documento.
- [ ] Probar una query antes de llevarla a codigo.
- [ ] Revisar canonicalizacion.
- [ ] Validar contratos simples en fixtures.
No lo uses como:
- [ ] Validador XML universal.
- [ ] Administrador de certificados.
- [ ] Cliente productivo de firma.
- [ ] Herramienta de dominio.
## Errores comunes
- [ ] Olvidar `--` despues de `cargo run -p xdoc-cli`.
- [ ] Usar queries no soportadas por el subset.
- [ ] Esperar que `validate` lea XSD.
- [ ] Esperar que `canonicalize` firme el documento; solo canonicaliza.
## Siguiente lectura
- [ ] [parser.md](parser.md) para entender `parse` y `validate-wellformed`.
- [ ] [query.md](query.md) para expresiones.
- [ ] [schema.md](schema.md) para contratos.
- [ ] [signature.md](signature.md) para canonicalizacion.
[Volver al indice](features.md).