xdoc-rs 0.1.1

Declarative XML engine for Rust
Documentation
# 009 - Query Engine

## Context

`src/query/` implementa un subset tipo XPath. No se debe intentar XQuery completo en esta etapa.

Fuente: `plan_libreria_xml_generica_rust.md`, secciones "`xdoc-query`", "MVP de query", "Arquitectura del query engine" y "Fase 6 - Query Engine MVP". Adaptacion local: implementar en `src/query/`.

## Dependencies

[x] 004 - Core Document Tree.

## Instructions

[x] Crear `src/query/`.
[x] Implementar lexer.
[x] Implementar parser.
[x] Definir AST de path.
[x] Compilar query a representacion interna.
[x] Evaluar query sobre `Document`.
[x] Soportar `/`.
[x] Soportar `//`.
[x] Soportar `@attr`.
[x] Soportar `text()`.
[x] Soportar predicados simples.
[x] Soportar aliases de namespace.

## Checklist

[x] `Query::parse("/Root/Child")` existe.
[x] `DocumentQueryExt` o API equivalente existe.
[x] Seleccion absoluta funciona.
[x] Seleccion descendiente `//` funciona.
[x] Seleccion de atributo funciona.
[x] Seleccion de texto funciona.
[x] Predicado por atributo funciona.
[x] Namespace alias funciona.
[x] Errores de query tienen posicion.
[x] Query compilada se puede reutilizar.

## Verification

Ejecutar:

```bash
cargo test query
cargo test lexer
cargo test parser
cargo test evaluator
cargo test namespaces
```

Criterio medible:

[x] Tests cubren minimo 10 queries validas.
[x] Tests cubren minimo 5 queries invalidas.
[x] Test obtiene exactamente un texto por path.
[x] Test obtiene multiples nodos con `//`.
[x] Test filtra por atributo.
[x] Test usa namespace alias.

## Acceptance Criteria

[x] Query no implementa XQuery completo.
[x] Query no modifica el documento.
[x] Query tiene errores estructurados.
[x] `src/query/` no depende de transform, schema, signature ni dominios.

## Worklog

[x] Completado el 2026-06-11. Se implemento subset XPath con lexer/parser, AST interno, queries reutilizables, evaluador, aliases de namespace, predicados por atributo y limite de pasos desde `QuerySecurityConfig`.