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

STXT-SCHEMA-SPEC-DRAFT

STXT (Semantic Text) — Schema Language Specification

Category: Standards Track

Status: Draft

Format: Markdown (RFC-style)


1. Introducción

Este documento define la especificación del lenguaje STXT Schema, un mecanismo para validar documentos STXT mediante reglas semánticas formales.

Un schema:


2. Terminología

Las palabras clave "MUST", "MUST NOT", "SHOULD", "SHOULD NOT", y "MAY" se interpretan según RFC 2119.

Términos como nodo, indentación, namespace, inline y bloque >> mantienen su significado en STXT-SPEC.


3. Relación entre STXT y Schema

La validación mediante schema ocurre después del parseo STXT:

  1. Parseo a estructura jerárquica STXT.
  2. Resolución del namespace lógico (herencia).
  3. Aplicación del schema correspondiente.

4. Estructura general de un Schema

Un schema es un documento cuyo nodo raíz es:

Schema (@stxt.schema): <namespace_objetivo>

Ejemplo:

Schema (@stxt.schema): com.example.docs
    Description: Schema for example documents
    Node: Document
        Type: EMPTY
        Childs>>
            (?) Metadata (@com.google.html)
            (*) Autor
            (?) Fecha
            (1) Content
    Node: Autor
        Type: TEXT INLINE
    Node: Fecha
        Type: DATE
    Node: Content
        Type: TEXT MULTILINE

5. Un schema por namespace

Para cada namespace lógico:


6. Definición de Nodos (Node:)

6.1 Forma básica

Node: NombreNodo
    Type: Tipo
    Childs>>
        (<card>) NombreHijo [(@namespace)]

Reglas:


7. Hijos (Childs>>) y namespaces cruzados

Cada entrada de Childs>>:

(<card>) NombreHijo [(@namespace)]

Donde:

7.1. REGLA NUEVA (estricta y obligatoria)

Todo nodo que aparezca en Childs>> debe tener una definición propia como Node: en su schema correspondiente.

Esto implica:

Así evitamos hijos “fantasma” y garantizamos que todos los nodos tienen semántica definida.


8. Cardinalidades

Formas permitidas:

Forma Significado
num Exactamente num.
* Cualquier número (0..∞).
+ Una o más (1..∞).
? Cero o una (0..1).
num+ num o más.
num- 0..num.
min,max Entre min y max.

Reglas:


9. Tipos

Los tipos definen:

  1. La forma del valor del nodo (inline, bloque >>, o ninguno).
  2. Si el nodo puede tener hijos.
  3. La validación del contenido.

9.1. Tabla oficial de tipos

Tipo Formas permitidas de valor Hijos permitidos Descripción / Validación
TEXT INLINE INLINE Texto inline. Tipo por defecto.
TEXT MULTILINE BLOCK NO Solo bloque >>.
TEXT INLINE or BLOCK NO Texto genérico. Puede ser inline o bloque >>, pero nunca tiene hijos.
BOOLEAN INLINE true / false.
NUMBER INLINE Número JSON.
DATE INLINE YYYY-MM-DD.
TIMESTAMP INLINE ISO 8601.
EMAIL INLINE Email válido.
URL INLINE URL válida.
UUID INLINE UUID estándar.
HEXADECIMAL INLINE [0-9A-Fa-f]+.
BINARY INLINE Cadena binaria.
BASE64 BLOCK NO Bloque Base64.
CODE[language] BLOCK NO Código en <language>.
EMPTY NONE Nodo estructural sin valor.

9.2. Reglas clave


10. Modos del validador: strict y non-strict

10.1. Modo strict (equivalente al “modo cerrado”) — por defecto

Un validador STXT Schema en modo strict:

10.2. Modo non-strict (modo abierto configurable)

Un validador MAY ofrecer un modo no-strict:

Importante: Incluso en modo non-strict, la regla 7.1 se mantiene:

Si un hijo aparece en Childs>> de un schema, ese hijo DEBE estar definido en su schema correspondiente.


11. Ejemplos Normativos

11.1. Schema con referencias cross-namespace

Schema (@stxt.schema): com.example.docs
    Node: Document
        Type: EMPTY
        Childs>>
            (?) Metadata (@com.google.html)
            (1) Content
    Node: Content
        Type: TEXT MULTILINE

Y en com.google.html:

Schema (@stxt.schema): com.google.html
    Node: Metadata
        Type: TEXT INLINE

11.2. Documento válido

Document (@com.example.docs):
    Metadata (@com.google.html): info
    Content>>
        Línea 1
        Línea 2

12. Errores de Schema

Un schema es inválido si:

  1. Define dos Node con el mismo nombre.
  2. Usa un Type desconocido.
  3. Usa formas (:, >>) incompatibles con el tipo.
  4. Define Childs>> en un Node cuyo tipo no permite hijos.
  5. La cardinalidad es inválida.
  6. Referencia un namespace inexistente sin aportar schema para dicho namespace.
  7. Aparece un hijo en Childs>> cuyo Node no está definido en su schema correspondiente.

13. Conformidad

Una implementación es conforme si:


14. Schema del Schema (@stxt.schema)

Esta sección define el schema oficial del propio sistema de schemas: el meta-schema que valida todos los documentos del namespace @stxt.schema.


14.1. Consideraciones


14.2. Meta-Schema completo

Schema (@stxt.schema): stxt.schema
    Description: Schema that defines the STXT Schema language

    # Nodo raíz del documento de schema
    Node: Schema
        Type: TEXT INLINE
        Childs>>
            (?)  Description
            (*)  Node

    # Define un nodo del namespace objetivo
    Node: Node
        Type: TEXT INLINE
        Childs>>
            (?)  Type
            (?)  Childs
            (?)  Description

    # Tipo declarado para un Node (opcional, por defecto TEXT)
    Node: Type
        Type: TEXT INLINE

    # Lista de hijos permitidos (bloque multiline)
    Node: Childs
        Type: TEXT MULTILINE

    # Descripción opcional (texto general, inline o bloque)
    Node: Description
        Type: TEXT

14.3. Lectura rápida


14.4. Ejemplo mínimo válido

Schema (@stxt.schema): com.example.docs
    Node: Document

Document se considera de tipo TEXT INLINE (por defecto).


14.5. Ejemplo completo

Schema (@stxt.schema): com.example.docs
    Description: Example schema
    Node: Document
        Type: EMPTY
        Childs>>
            (1) Title
            (*) Author
            (?) Metadata (@com.google.html)
    Node: Title
        Type: TEXT INLINE
    Node: Author
        Type: TEXT INLINE

15. Fin del Documento