# 003 - Core Names Namespaces And Errors
## Context
El core debe ser namespace-first. Los nombres XML no se modelan como strings simples, sino como `QName` con prefijo, nombre local y namespace URI.
Fuente: `plan_libreria_xml_generica_rust.md`, secciones "Namespace-first", "`xdoc-core`" y "Estructura de errores". Adaptacion local: implementar en `src/core/`.
## Dependencies
[x] 002 - Workspace Scaffold.
## Instructions
[x] Implementar `QName`.
[x] Implementar `NamespaceUri`.
[x] Implementar `NamespacePrefix`.
[x] Implementar `NamespaceDeclaration`.
[x] Implementar `NamespaceTable`.
[x] Implementar validacion basica de nombres XML.
[x] Implementar `XmlError`.
[x] Implementar `ErrorKind`.
[x] Implementar `Span`.
[x] Implementar conversiones y constructors ergonomicos.
## Checklist
[x] `QName::new(local)` crea nombre sin prefijo.
[x] `QName::qualified(prefix, local, uri)` crea nombre calificado.
[x] `QName` rechaza nombre local vacio.
[x] `QName` rechaza prefijo vacio cuando se usa `Some`.
[x] `NamespaceTable` registra prefijos.
[x] `NamespaceTable` resuelve prefijo a URI.
[x] `NamespaceTable` resuelve namespace por defecto.
[x] `XmlError` incluye kind y mensaje.
[x] `XmlError` puede incluir `Span`.
[x] `Span` representa linea y columna cuando existan.
## Verification
Ejecutar:
```bash
cargo test qname
cargo test namespace
cargo test error
cargo test core
```
Criterio medible:
[x] Hay tests unitarios para nombres validos.
[x] Hay tests unitarios para nombres invalidos.
[x] Hay tests unitarios para resolucion de namespaces.
[x] Hay tests unitarios para errores con y sin `Span`.
## Acceptance Criteria
[x] Ninguna API publica del core acepta nombres XML ambiguos si debe aceptar `QName`.
[x] Los errores no son strings sueltos.
[x] `src/core/` no depende de parser, writer, builder, query, schema, signature ni dominios.
## Worklog
[x] Completado el 2026-06-10. Verificado con los comandos de la tarea y la verificacion minima global.