STXT - Semantic Text
Built for humans. Reliable for machines.

STXT Resolución de Schemas y Templates

1. Introducción
2. Terminología
3. El directorio `.stxt`
4. La cadena de resolución
5. Precedencia
6. La variable de entorno `STXT_PATH`
7. Resolución por documento
8. Errores de resolución
9. Conformidad
10. Consideraciones de Seguridad
11. Fin del Documento

1. Introducción

Este documento define STXT Discovery: el mecanismo por el que una herramienta localiza, en el sistema de ficheros, los documentos @stxt.schema y @stxt.template aplicables a un documento STXT.

Las especificaciones STXT-SCHEMA-SPEC y STXT-TEMPLATE-SPEC definen cómo se escriben las definiciones y cómo validan; deliberadamente no dicen dónde viven. Esta especificación cubre ese hueco con un único objetivo: que un mismo documento se valide con las mismas definiciones en cualquier herramienta — un editor, una línea de comandos, un proceso de integración continua. Si cada herramienta buscara las definiciones a su manera, el resultado de validar dependería de quién valida.

La resolución es idéntica para schemas y para templates: ambos se descubren por el mismo procedimiento y compiten por los mismos namespaces.

En el resto de especificaciones, este documento se referencia como STXT-DISCOVERY-SPEC.

2. Terminología

Las palabras clave "DEBE", "NO DEBE", "DEBERÍA", "NO DEBERÍA", y "PUEDE" deben interpretarse según RFC 2119.

Términos como nodo, namespace, schema y template mantienen su significado en STXT-SPEC, STXT-SCHEMA-SPEC y STXT-TEMPLATE-SPEC.

Definiciones adicionales:

3. El directorio `.stxt`

Un directorio de resolución es un directorio llamado exactamente .stxt.

4. La cadena de resolución

Para un documento dado, la cadena de resolución se construye en este orden, de mayor a menor precedencia:

  1. Nivel de proyecto: los directorios .stxt encontrados subiendo desde el directorio del documento hasta la raíz del sistema de ficheros, del más cercano al más lejano.
  2. Nivel de usuario: el directorio .stxt de la carpeta personal del usuario.
  3. Nivel de sistema: el directorio de definiciones global de la máquina.

4.1 Nivel de proyecto

Partiendo del directorio que contiene el documento, la herramienta DEBE examinar ese directorio y cada uno de sus ancestros, en orden ascendente, y añadir a la cadena cada directorio .stxt que exista.

4.2 Nivel de usuario y nivel de sistema

Nivel Linux, macOS y otros Unix Windows
Usuario $HOME/.stxt %USERPROFILE%\.stxt
Sistema /etc/stxt %ProgramData%\stxt

5. Precedencia

Cargados todos los niveles de la cadena, la precedencia se aplica por namespace objetivo, no por directorios en bloque:

Esta regla concreta, para el ámbito de esta especificación, el criterio de priorización entre schema y template que STXT-TEMPLATE-SPEC deja abierto a la implementación: la fuente semántica efectiva de un namespace es su definición activa.

5.1 Ejemplo completo

/home/ana/
├── .stxt/                       (nivel de usuario)
│   └── notas.stxt               define org.ana.notas
└── proyectos/monorepo/
    ├── .stxt/                   (nivel de proyecto, 2º)
    │   ├── comun.stxt           define com.acme.comun
    │   └── web-viejo.stxt       define com.acme.web
    └── web/
        ├── .stxt/               (nivel de proyecto, 1º)
        │   └── web.stxt         define com.acme.web
        └── index.stxt           documento a validar

La cadena de resolución de index.stxt es, por orden: web/.stxtmonorepo/.stxt/home/ana/.stxt/etc/stxt.

Resultado por namespace:

6. La variable de entorno `STXT_PATH`

Si la variable de entorno STXT_PATH está definida, sustituye por completo la cadena de resolución de la sección 4: no se busca nivel de proyecto, ni de usuario, ni de sistema.

STXT_PATH existe para los entornos donde la búsqueda implícita estorba: integración continua, tests de las propias herramientas, o entornos con el sistema de ficheros restringido.

7. Resolución por documento

La cadena de resolución se define por documento: es función de la ubicación del documento y del entorno, no de la herramienta ni del conjunto de documentos que se estén procesando.

Una herramienta que procese varios documentos a la vez (un editor con varios ficheros abiertos, una línea de comandos con varios argumentos) PUEDE compartir cargas y cachés como optimización, pero el resultado DEBE ser idéntico al de resolver cada documento por separado. En particular, si dos documentos de proyectos distintos ven definiciones distintas para el mismo namespace, cada uno DEBE validarse con la suya.

Una herramienta PUEDE ofrecer mecanismos explícitos para designar definiciones (una opción de línea de comandos, configuración del editor). Lo designado explícitamente DEBE tener prioridad sobre lo descubierto mediante esta especificación.

8. Errores de resolución

Una herramienta DEBE reportar como error de resolución:

  1. Dos definiciones para el mismo namespace objetivo en el mismo nivel.
  2. Un fichero bajo un directorio de resolución que no parsea como STXT.
  3. Un fichero cuyo nodo raíz no pertenece a @stxt.schema ni a @stxt.template.
  4. Una definición que no valida contra su meta-schema (STXT-SCHEMA-SPEC, STXT-TEMPLATE-SPEC).

Reglas:

9. Conformidad

10. Consideraciones de Seguridad

11. Fin del Documento