STxT: El Libro

Un lenguaje para la web

Capítulo 3: STxT, Tutorial

Si tuvieras que leer sólo un capítulo de este libro, éste sería el capítulo. Te explicamos lo que es STxT directamente, sin más preámbulos. Y además te damos las nociones suficientes para que puedas leer cualquier otro capítulo.

Un ejemplo... ¡ya!

Éste es el primer lenguaje que conozco dónde se puede empezar con un ejemplo y todo el mundo lo puede llega a entender.

El ejemplo será una receta de cocina. La iremos retocando, para que cada vez se parezca más a un texto STxT, pero no tenéis por qué preocuparos. Os prometo que será fácil, poco traumático, y os va a gustar :-D

Sin más preámbulos... ¡Buñuelos de Girona!

Buñuelos de Girona

Esta es una receta para hacer buñuelos en la época de Cuaresma. 
Son conocidos también como Buñuelos del Empordà. Normalmente 
son servidos como postre, y hay cantidad suficiente hasta 
para 12 personas. Es una receta fácil de hacer.

1Kg harina
8 huevos
la ralladura de 1-2 limones
150 gramos de azúcar
100 gramos mantequilla
1/4 litro de leche
1 vaso de grassolis (mezcla de moscatel, anís, cointreau)
75 gramos de levadura (de panadería)
matalauva (anís)
una pizca de sal
un poquito de canela molida

En un recipiente pondremos la harina y el resto de ingredientes.
La mantequilla se funde con un poco de leche, al igual que la levadura. 
La leche para deshacer la levadura sólo tiene que estar ligeramente 
templada, ya que de lo contrario perdería seguramente su efecto.
Se mezcla todo muy bien, y se deja reposar tapado por espacio 
de 3-5 horas (hasta que sube la masa).
Con una cuchara o cucharadita según se quieran de tamaño, se fríen en 
abundante aceite hasta coger color. Conforme se van sacando se 
espolvorean con un poco de la mezcla del grassolis, y se pasan 
por azúcar.

De momento es sólo texto, no puede considerarse todavía un STxT válido. Pero lo iremos retocando y poco a poco obtendremos un perfecto STxT ;-)

Lo primero, es identificar las partes y pensar en una estructura jerárquica. Una estructura posible sería de 5 partes. Todo el documento es una receta (1ª parte), y se puede desglosar en 4: Título, Descripción, Ingredientes y Preparación.

******
Receta
******

------
Título
------
Buñuelos de Girona

-----------
Descripción
-----------
Esta es una receta para hacer buñuelos en la época de Cuaresma. 
Son conocidos también como Buñuelos del Empordà. Normalmente son 
servidos como postre, y hay cantidad suficiente hasta para 12 personas.
Es una receta fácil de hacer.

------------
Ingredientes
------------
1Kg harina
8 huevos
la ralladura de 1-2 limones
150 gramos de azúcar
100 gramos mantequilla
1/4 litro de leche
1 vaso de grassolis (mezcla de moscatel, anís, cointreau)
75 gramos de levadura (de panadería)
matalauva (anís)
una pizca de sal
un poquito de canela molida
    
-----------
Preparación
-----------
En un recipiente pondremos la harina y el resto de ingredientes.
La mantequilla se funde con un poco de leche, al igual que la levadura. 
La leche para deshacer la levadura sólo tiene que estar ligeramente 
templada,ya que de lo contrario perdería seguramente su efecto.
Se mezcla todo muy bien, y se deja reposar tapado por espacio 
de 3-5 horas (hasta que sube la masa).
Con una cuchara o cucharadita según se quieran de tamaño, se fríen en 
abundante aceite hasta coger color. Conforme se van sacando se 
espolvorean con un poco de la mezcla del grassolis, y se pasan 
por azúcar.

Esta estructura es muy natural, y es la base para obtener el documento final STxT.

TODO en Namespaces (ns)

Vamos a perder el miedo ahora mismo a los namespaces en STxT; en homenaje a todos los usuarios traumatizados de xml que no los pueden soportar ;-)

Si sabemos algo de xml y ns lo vamos a olvidar momentáneamente.

Ahora prestad atención.

Un documento STxT consiste en un conjunto de nodos anidados, y TODOS los nodos deben pertenecer a algún namespace (no tiene por qué ser el mismo).

Un namespace (ns) es un documento (STxT!!) dónde se especifica cuáles son sus nodos, su forma y qué pueden contener.

Al contrario de otros lenguajes (como xml) este documento DEBE EXISTIR y debe ser accesible vía web. Lo normal es que los programas y parseadores lo guarden localmente, pero es un requisito que el documento exista y sea accesible por Internet. STxT se ha hecho para el acceso libre de la información y es básico que todo el mundo pueda encontrar las definiciones.

Vamos a ver como sería el namespace de ejemplo (el documento STxT real no es así, lo veremos más adelante, pero la información que contendrá sí será ésta):

Namespace: www.cooking.demo/recipe.stxt

Si no fuera inventado sería accesible vía web mediante la url: 
http://www.cooking.demo/recipe.stxt

Definimos 5 nodos:

* Receta
* Título
* Descripción
* Ingredientes
* Preparación

Receta será a su vez de tipo nodo, y contendrá nodos del tipo 'Título', 
'Descripción', 'Ingredientes' y 'Preparación' (todos del mismo namespace). 
Título, Descripción, Ingredientes y Preparación serán a su vez nodos 
de tipo texto.

De forma esquemática se podría representar:

* Receta: Tipo Nodo, y contiene:
** Título: Tipo Texto
** Descripción: Tipo Texto
** Ingredientes: Tipo Texto
** Preparación: Tipo Texto
    
Este documento también tendrá otras restricciones, como que sólo puede
haber un título, o que la descripción es opcional, pero esto también se
verá más adelante.

Y ahora reescribimos la receta con los anteriores nodos y namespaces. Hay que tener en cuenta que sólo hay que especificar el namespace del primer nodo, los otros namespaces se deducen automáticamente de su definición.

¡Increíble! ¡Por fin un poco de coherencia y facilidad de uso en los ns! :-)

Receta(www.cooking.demo/recipe.stxt):

Título: Buñuelos de Girona
    
Descripción: 
    Esta es una receta para hacer buñuelos en la época 
    de Cuaresma. Son conocidos también como Buñuelos del Empordà.
    Normalmente son servidos como postre, y hay cantidad suficiente
    hasta para 12 personas. Es una receta fácil de hacer.
    
Ingredientes:
    1Kg harina
    8 huevos
    la ralladura de 1-2 limones
    150 gramos de azúcar
    100 gramos mantequilla
    1/4 litro de leche
    1 vaso de grassolis (mezcla de moscatel, anís, cointreau)
    75 gramos de levadura (de panadería)
    matalauva (anís)
    una pizca de sal
    un poquito de canela molida
        
Preparación:
    En un recipiente pondremos la harina y el resto de ingredientes.
    La mantequilla se funde con un poco de leche, al igual que la
    levadura. La leche para deshacer la levadura sólo tiene que 
    estar ligeramente templada, ya que de lo contrario perdería
    seguramente su efecto. Se mezcla todo muy bien, y se deja reposar
    tapado por espacio de 3-5 horas (hasta que sube la masa).
    Con una cuchara o cucharadita según se quieran de tamaño, 
    se fríen en abundante aceite hasta coger color. Conforme se van
    sacando se espolvorean con un poco de la mezcla del grassolis, y se 
    pasan por azúcar.

¡Y ya está! ¡Nuestro primer documento STxT! :-) Míralo bien. No es necesario nada más.

Leed este apartado tantas veces como queráis, es imprescindible. Lo es todo. Si entendéis esto, ya está. Sabréis STxT.

Por favor, no continúes. Vuelve a leer este apartado al menos otra vez. Después continua. O mejor: descansa, lo vuelves a leer y pasas al próximo apartado :-)

Nodos e identación

Antes hemos dicho que un documento STxT es un conjunto de nodos anidados. Pero no hemos dicho cuáles son las reglas de anidación, ni como se hace. Pero todo es muy intuitivo y visual:

Se hace según la identación del nodo.

Mejor un ejemplo, es más fácil verlo que explicarlo:

Nodo 1(x):
    Nodo 2:
        Nodo 3: Texto nodo 3
        Nodo 4: Texto nodo 4
    Nodo 5:
        Nodo 6: Texto nodo 6
        Nodo 7: Texto nodo 7

En este ejemplo tenemos un nodo principal Nodo 1, que a su vez contiene 2 nodos: Nodo 2 y Nodo 5. A su vez Nodo 2 contiene a Nodo 3 y Nodo 4, y Nodo 5 contiene Nodo 6 y Nodo 7.

Esta estructura es muy visual (realmente la explicación ha sido más complicada), y fácilmente deducible de la identación de cada nodo. Con sólo cambiar la identación, cambiamos esta estructura.

Por ejemplo, el siguiente documento es igual, pero con una identación distinta:

Nodo 1(...):
    Nodo 2:
        Nodo 3: Texto nodo 3
        Nodo 4: Texto nodo 4
        Nodo 5:
            Nodo 6: Texto nodo 6
    Nodo 7: Texto nodo 7

Ahora toda la estructura ha cambiado:

Vemos que la estructura jerárquica ha cambiado completamente.

En nuestra receta de ejemplo, la estructura era:

Receta(...):
    Titulo:
    Descripción:
    Ingredientes:
    Preparación:

Teníamos un nodo Receta que contenía todos los otros nodos.

Vemos que la identación es la clave, y la identación se obtiene mediante caracteres de tabulación. También es posible mediante espacios, aunque los tabuladores siempre han sido un estándar en textos, por lo que es la forma recomendada en STxT (además de ahorrar espacio).

Regla: Un documento STxT sólo puede tener un nodo principal

Esta regla tiene que cumplirse siempre, lo que permite una simplificación en la estructuración de los documentos. Por ello, los nodos de 2º nivel no es necesario que estén alineados.

En nuestro ejemplo anterior, podríamos tener la siguiente estructura, con el mismo significado:

Receta(...):
Titulo:
Descripción:
Ingredientes:
Preparación:

Gracias a la estructura, el primer nodo encontrado es el principal, y todos los demás se consideran sus hijos. De la misma forma tendríamos que el siguiente texto

Nodo 1(...):
    Nodo 2:
        Nodo 3: Texto nodo 3
        Nodo 4: Texto nodo 4
    Nodo 5:
        Nodo 6: Texto nodo 6
        Nodo 7: Texto nodo 7

es equivalente a

Nodo 1(...):

Nodo 2:
    Nodo 3: Texto nodo 3
    Nodo 4: Texto nodo 4
Nodo 5:
    Nodo 6: Texto nodo 6
    Nodo 7: Texto nodo 7

Nodo y Texto

Los tipos de nodo más habituales en los documentos STxT son NODO y TEXTO. El tipo nodo es un contenedor para otros nodos, mientras que el tipo texto permite la inserción de un texto, sin restricciones.

La alineación es lo único que importa

Ésta es la regla básica para todos los nodos. Anteriormente hemos visto cómo la alineación cambiaba la jerarquía de nodos. En los nodos de texto la alineación permite incluir cualquier tipo de contenido SIN TENER NECESIDAD DE UTILIZAR CARACTERES DE ESCAPE. La única restricción es que debe estar alineado un nivel más que el nodo texto.

Un ejemplo, por favor:

Nodo(...):
    Nodo Texto: Aquí empieza el contenido del nodo texto. 
        Todas las líneas tienen que estar con una alineación superior 
        a "Nodo Texto:". Vemos que no es necesario caracteres de escape.
        Por la alineación sabemos qué forma parte de "Nodo Texto".

Ahora más diversión... y si introducimos xml en el texto? Veremos que no hay problema alguno. Podemos insertar contenido texto sin tener que escapar ningún carácter. ¡Por Fin!

Nodo(...):
    Nodo Texto: Vamos a poner un ejemplo de xml; 
        de como se hacían las cosas antes de STxT:
        <nodo>
            <nodo1>Esto es un ejemplo</nodo1>
            <nodo2>Esto es un ejemplo de escape: &lt; </nodo2>
        </nodo>

Comentarios

Todos los informáticos saben qué son los comentarios en cualquier lenguaje. Por si hay algún neófito explicaré que los comentarios son texto que sólo están ahí para comentar o añadir alguna observación, pero no influyen en el documento en sí.

En STxT son comentarios todas las líneas que empiezan por el carácter #

Volvemos a nuestro ejemplo. Imaginemos que queremos añadir información a nuestra receta, pero esta información es sólo a título de curiosidad, o incluso para aumentar la legibilidad del documento. Pues bien, esta información la añadiríamos como un comentario.

# -----------------------------------------------------
# Autor = Joan Costa Mombiela
# Fecha creación = 05-04-2013
# Esta receta es originaria del Empordà. Nos fue dada
# a través de unos familiares muy queridos.
# En agradecimiento, la hemos publicado como la 1ª
# receta de este libro.
# -----------------------------------------------------

Receta(www.kocinando.com/receta.stxt):

Título: Buñuelos de Girona

Descripción: Esta es una receta para hacer buñuelos en la época de Cuaresma.
    Son conocidos
        ...
    
Ingredientes:
    1Kg harina
    ...
        
Preparación:
    En un recipiente pondremos la harina y el resto de ingredientes.
    ...

Los comentarios no tienen que tener ningún tipo de formato, es texto libre que el autor del documento puede incluir. Además, no tiene que estar situado en ningún sitio concreto del documento. Cualquier línea que empiece por # será tratada como comentario, y no será tenida en cuenta ni en programas ni en comunicaciones.

Por fin, la gramática

Y aquí está la gramática. O la definición de nodos del namespace. En el próximo capítulo la veremos en más profundidad, pero es bastante explicativa por sí misma; como todos los documentos STxT ;-)

Namespace Definition(www.semantictext.info/namespace.stxt):

Node Definition:
    Type:NODE
    Name:Receta
    Child:
        Node:Título
        Num:1
    Child:
        Node:Descripción
        Num:?
    Child:
        Node:Ingredientes
        Num:1
    Child:
        Node:Preparación
        Num:1
        
Node Definition:
    Type:TEXT
    Name:Título
    
Node Definition:
    Type:TEXT
    Name:Descripción
    
Node Definition:
    Type:TEXT
    Name:Ingredientes
    
Node Definition:
    Type:TEXT
    Name:Preparación

La información que contiene es la que ya habíamos visto anteriormente:

A título de información, hay 11 tipos de nodo, aunque el de nodo y texto son los más habituales:

NODE, TEXT, URL, NATURAL, INTEGER, RATIONAL, NUMBER, BINARY, HEXADECIMAL, BASE64, BOOLEAN

Por lo que hace a Num tenemos las siguientes posibilidades: número, ?, +, * Todos ellos son muy intuitivos para quien está acostumbrado a trabajar con expresiones regulares.

Resumen

Usamos cookies para mejorar su experiencia de uso y ofrecer contenidos adaptados a sus intereses Entendido! Más información