xdoc-rs 0.1.1

Declarative XML engine for Rust
Documentation
# 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.