Di D i se s e ño ñ o de d e un u na a g g ra r am m á á t t ic i c a a i i nf n fo or rm má át t i i ca c a p p a a ra r a el e l si s i st s te em m a a de d e GL G LN N m m ul u l t t il i l i i ng n g üe ü e TU T UR RI IG GE EN N
[BFF2003-04616MCYT/TI-DT-2006-3]
José Luis Caro Herrero Gloria Corpas Pastor Antonio Trujillo Pérez
Antonio Guevara Plaza Andrés Aguayo Maldonado
(UMA)
XGTLING
1.- Antecedentes de XGTLING y objetivos del editor 1.1.- Antecedentes de XGTLING
1.2.- Objetivos del editor
2.- Interlengua XGTLING 2.1.- Etiqueta contract 2.2.- Etiqueta author 2.3.- Etiqueta var 2.4.- Etiqueta clause 2.5.- Etiqueta block 2.6.- Etiqueta nb 2.7.- Etiqueta concept 2.8.- Etiqueta tf 2.9.- Etiqueta select
3.- Editor XGTLING
3.1.- Estructura principal
3.2.- author
3.3.- var
3.4.- clause
3.5.- block
3.6.- nb
3.7.- concept
3.8.- tf
3.9.- select
4.- Ejemplo del proceso completo
1.- Antecedentes de XGTLING y objetivos
1.1.- Antecedentes de XGTLING
La posibilidad de generar automáticamente contratos en distintos idiomas hizo necesaria una forma de expresar computacionalmente dichos contratos. Para ello se ideó la interlengua GTLING, que se basa en una gramática con la que puede ser analizado un contrato o cualquier documento que se adapate a dicha interlengua.
GTLING está basada en una estructura de tags o etiquetas con la siguiente estructura general:
'<' <etiqueta> <lista_atributos> '>'
<contenido_de_bloque_etiqueta>
'</' <etiqueta> '>'
Un contrato descrito con GTLING se divide en una serie de etiquetas, teniendo cada etiqueta una serie de atributos.
XGTLING es la adaptación de GTLING a XML y sigue estando basada en la misma estructura de tags. Esta adaptación trajo el siguiente inconveniente:
• Tanto para GTLING como para XGTLING se ha de definir una gramática donde aparezcan las reglas de producción de dicha gramática. Pues bien, como en XML el orden de los atributos no importa, el número de reglas de producción de la interlengua XGTLING se disparó notablemente, ya existe la posibilidad de que los atributos aparezcan el cualquier orden.
1.2.- Objetivos del editor
Crear directamente en un editor de texto un contrato descrito en XGTLING puede resultar bastante tedioso, además de ser necesario un dominio absoluto de dicha interlengua. Para facilitar esta tarea surge la necesidad de crear un editor, en el que tan solo se le ha de indicar qué etiquetas se quiere insertar y el contenido de sus atributos. De esta forma cuando se quiera añadir una determinada etiqueta saldrá en la pantalla un formulario que recogerá los atributos de dicha etiqueta que el usuario ha de escribir.
Generar documentos en XGTLING es solo el primer paso para generar múltiples documentos en distintos idiomas simultáneamente, ya que una vez descritos dichos contratos se han de analizar, teniendo el usuario un papel muy importante, ya que es el encargado de decidir qué partes del contrato van a aparecer en los contratos finales, dar el valor a las variables,...
• Hay cláusulas que son optativas, y aparecerá solamente si el usuario así lo decide.
• También ocurre con los conceptos lo mismo que con las cláusulas.
• El usuario también es el encargado de asignarle valor a las variables.
Para esto se ha de diseñar un sistema que implemente un generador de lenguaje natural (GLN) basado en XGTLING, y que está compuesto por los siguientes componentes:
1. Interlengua XGTLING: como anteriormente se mencionó es la adaptación de GTLING a XML.
2. Contratos generatrices: Son los contratos que están descritos en XGTLING y serán los encargados de alimentar al GLN. Habrá un contrato base por cada lengua en la que se quiera obtener un contrato final. Es decir, si se quiere crear unos documentos en inglés y en francés se ha de disponer de dichos documentos descritos con la interlengua, y si no existen se han de crear.
3. Interfaz de usuario: orientada a interactuar con el usuario para que éste introduzca los datos necesarios (como el contenido de las variables del contrato) y las elecciones (posibilidad de elegir incluir o no las cláusulas optativas y los conceptos que también lo sean), ya que está conectada con las diferentes tablas de la base de datos. El eje central del sistema es la generación de contratos en diferentes lenguas, pero aparte de esto también se ofrecen otras opciones:
• Editor XGTLING: algo necesario para facilitar la tarea de crear contratos.
• Gestión del diccionario: algo necesario, ya que se trabaja con distintos idiomas y es necesario un sistema de traducción.
• Gestión de familias: los contratos están organizados en familias, por lo que se da la posibilidad de mostrar las familias existentes, crear nuevas familias y añadir contratos a familias existentes.
4. Bases de datos: Se diseñará la base de datos necesaria para almacenar los datos que el usuario introduzca mediante la interfaz gráfica y también para almacenar los contratos generatrices, ya que estos están tan bien estructurados y jerarquizados que cada tag equivale a una tabla. También habrá una tabla que tenga la por función la de diccionario, otra que contenga cada idioma con su código correspondiente, etc.
5. Generador textual basado en XGTLING: es el encargado de realizar la generación del contrato al/los idioma/s elegidos por el usuario. Se basa en un algoritmo de generación, y para ello tomará los contratos generatrices, los analizará para ver si están correctamente escritos, y si es así, los almacenará en la base de datos, y mediante las elecciones de los interfaces los irá recorriendo y se irán generando dichos contratos de salida al mismo tiempo.
El esquema básico de la aplicación se muestra a continuación:
En el algoritmo de generación se van recorriendo todas las cláusulas, los bloques que contienen dichas cláusulas,…. Y así hasta llegar a la etiqueta más interna, que son las formas textuales. Todas estas etiquetas se explican detalladamente en el siguiente apartado.Una aproximación en pseudocódigo al proceso general de generación es:
cl := seleccionar todas las cláusulas mover_principio (cl)
Mientras queden_clausulas(cl) Hacer{
Si es_obligatoria(cl) o aparecer(cl) Entonces{
bl := seleccionar todos los bloques(cl) mover_principio(bl)
Mientras queden_bloques(bl) Hacer{
nb := seleccionar todos los numbloques(bl) nb_sel := seleccionar_numbloque(nb)
cpt := seleccionar todos los conceptos(nb_sel) Mientras queden_conceptos(cpt) Hacer{
Si es_obligatorio(cpt) o aparecer(cpt) Entonces{
tf := seleccionar todas las formas textuales(cpt) Incluir_contratos_finales(Analizar(tf))
}mover_siguiente(cpt) }mover_siguiente(bl) }
}mover_siguiente(cl) }
Analizar(tf){
vble:= seleccionar todas las variables(tf) mover_principio(vble)
Mientras queden_vbles(vble) Hacer{
Si_tiene_valor(vble){ Sustituir(tf,vble,valor(vble)) } Sino{
Si(tipo(vble) = diccionario AND idioma_actual != idioma_guia)) Entonces{
Almacenar_dicc(Pedir_traducción(vble)) //Se pide el valor al usuario Almacenar_vbles(valor(vble))
}
Sino{ Almacenar_vbles(valor(vble)) //se pide el valor al usuario } Sustituir(tf,vble,valor(vble))
}
Mover_siguiente(vble) }
}
2.- Interlengua XGTLING
La estructura general de un documento descrito en XGTLING se muestra a continuación:
<contract id = "contrato_id" family = "contrato_familia" language = "num_idioma" >
<desc> descripción del contrato </desc>
<date> fecha del contrato </date>
<author_block>
Conjunto_de_autores </author_block>
<declaration>
Conjunto_de_variables </declaration>
<clauses>
Conjunto_de_cláusulas </clauses>
</contract>
2.1.- Etiqueta contract
Puede observarse que la etiqueta principal es contract. Esta etiqueta contiene los siguientes atributos:
• id: es el identificador del documento.
• family: indica la familia a la que pertenece el documento.
• language: se corresponde con el código (numérico) asignado al idioma en que va a estar escrito el documento.
• desc: indica una breve descripción del documento.
• date: indica la fecha de creación o edición del documento.
Esta etiqueta principal engloba al resto de etiquetas, que a continuación se describen:
• desc: se puede especificar una breve descripción del contenido del documento.
• date: el objetivo de esta etiqueta es almacenar la fecha de creación o modificación del documento.
• author_block: esta es la etiqueta del bloque de autores, estando destinada a albergar a todos los autores que han intervenido en la creación ó modificación del documento.
• declaration: esta etiqueta albergará todas las variables que pueden aparecer en un documento.
• clauses: esta etiqueta contendrá todas las cláusulas que pueden aparecer en el documento.
2.2.- Etiqueta author
Esta etiqueta no tiene ningún atributo, y contiene a un autor, siendo la estructura general de esta etiqueta la que se muestra:
<author>nombre del autor</author>
En el documento descrito con XGTLING aparecerán tantas etiquetas author como autores hayan intervenido en la creación o modificación.
2.3.- Etiqueta var
La etiqueta encargada de almacenar cada variable que puede aparecer en un documento es var. Habrá tantas de estas etiquetas dentro del bloque de declaración de variables (declaration) como variables sean necesarias. Esta etiqueta contiene los siguientes atributos:
• id: este es el atributo encargado de almacenar el nombre de las variables.
• d: con este otro mantiene una breve descripción de la variable.
• t: indica el tipo de la variable, que puede ser T (de tipo texto) ó N (numérica).
• g: este último atributo define el lugar donde la variable ha de tomar su valor, que tan solo puede tener tres posibles valores:
1. T: indica que se ha de tomar del diccionario.
2. N: indica que el valor de la variable lo debe introducir el usuario y esa variable tendrá el mismo valor en todos los documentos generados.
3. S: indica que el valor de la variable lo debe introducir el usuario y que será distinto en cada uno de los documentos.
Un ejemplo de este bloque de declaraciones de variables podría ser:
<declaration>
<var id = "D" d = "Día" t = "N" g = "N" />
<var id = "P" d = "Provincia" t = "T" g = "S" />
…
</declaration>
2.4.- Etiqueta clause
La etiqueta clause tiene la función de almacenar una cláusula, que es la subdivisión más amplia en la que se estructura un documento. Los atributos que definen a una cláusula son:
• id: identifica el nombre de la cláusula.
• t: este atributo define el tipo de la cláusula, y solamente puede valer O (en el caso de que se trate de una cláusula optativa ó N (en el caso de que la cláusula sea obligatoria).
• d: este atributo almacenará la descripción de la variable. Este atributo es optativo, es decir, que puede aparecer o no aparecer.
Un ejemplo de este bloque de declaraciones de cláusulas puede ser:
<clauses>
<clause id = "O1" t = "N" d = "Lugar y fecha">
Conjunto de bloques </clause>
<clause id = "O2" t = "O">
Conjunto de bloques
</clause>
</clauses>
2.5.- Etiqueta block
Con la etiqueta bloque (block) se definen las unidades que forman las cláusulas, de manera que cada cláusula está formada por un conjunto de bloques.
Cada bloque tiene los siguientes atributos:
• id: que define el identificador del bloque, siendo este atributo obligatorio. Dentro de cada cláusula, el identificador de bloque debe ser único, a excepción de los bloques que tiene como identificador “vacio”, ya que con este identificador se designan a los bloques que se incluirán sin tener mayores consideraciones.
• d: este atributo indica una breve descripción del bloque, y se trata de un atributo optativo.
Un ejemplo de una cláusula con varios bloques puede ser:
<clause id = "O2a" t = "O" d = "Partes">
<block id = "vacio">
Conjunto de numbloques </block>
<block id = "perFisicaV" d = "ambas personas son físicas">
Conjunto de numbloques </block>
<block id = "vacio">
Conjunto de numbloques </block>
<block id ="perFisicaC">
Conjunto de numbloques </block>
…
</clause>
2.6.- Etiqueta nb
Esta nueva etiqueta numbloque (nb) es la encargada de almacenar los numbloques, que son las estructuras que forman un bloque, estando un bloque compuesto de varios numbloques.
El atributo que define a esta etiqueta es:
• n: identifica el número del numbloque. Entre las comillas debe ir un número mayor ó igual a cero.
Un ejemplo que ilustra el uso de numbloques puede ser:
<block id = "perFisicaVC">
<nb n = "1">
Conjunto de conceptos
</nb>
<nb n = "2">
Conjunto de conceptos </nb>
…
</block>
2.7.- Etiqueta concept
Esta etiqueta concepto (concept) ha sido creada para albergar los conceptos, siendo estos los componentes de los numbloques.
Esta etiqueta tiene los siguientes atributos:
• id: es el identificador del documento, siendo este identificador único en cada numbloque.
• t: es el atributo encargado de identificar el tipo del concepto. Se trata de un atributo optativo y en caso de aparecer sólo puede tener los valores O (en el caso de que el concepto sea optativo) ó N (si el concepto es obligatorio). Si el concepto no aparece se tratará como si fuera obligatorio.
Un ejemplo de un numbloque con algún concepto puede ser:
<nb n = "0">
<concept id = "lugar">
Conjunto de formas textuales y select </concept>
<concept id = "fecha">
Conjunto de formas textuales y select </concept>
</nb>
2.8.- Etiqueta tf
La etiqueta forma textual (tf) es la etiqueta de más bajo nivel. Un concepto está compuesto de estas etiquetas y de etiquetas de selección (selects), que se mostrará en el siguiente punto.
Los atributos de esta etiqueta son:
• n: indica el número de la forma textual, y por lo tanto, entre las comillas debe ir un número.
• f: este atributo indica el formato de la forma textual, y se trata de un atributo optativo.
Si este atributo no aparece en la forma textual, ésta aparecerá sin ningún formato en el documento final. En caso de aparecer será una cadena de cuatro caracteres, donde el posible valor de cada carácter es S o N. De izquierda a derecha el significado de cada carácter es: centrada, negrita, subrayada y cursiva. Si un determinado carácter tiene el valor S significa que la forma textual aparecerá en negrita,… (Según donde se encuentre el carácter) y si tiene valor N significará que la forma textual no aparecerá en negrita,… (Según corresponda). Si este atributo no aparece se supondrá que el formato será "NNNN"
Un ejemplo donde se puede observar varias formas textuales es:
<nb n = "0">
<concept id = "lugar">
<tf n = "1" f = "NSSN">En %P, %L,</tf>
<tf n = "2">En la ciudad de %L,</tf>
<tf n = "3">En la localidad de %L,</tf>
</concept>
<concept id = "fecha">
<tf n = "1">a %D de %M, de %A.</tf>
</concept>
</nb>
2.9.- Etiqueta select
La etiqueta de selección (select) es la encargada de que aparezca determinada información en el documento final pero sólo si se ha seleccionado una determinada forma textual. Los conceptos además de estar formado por formas textuales también están formados por etiquetas de selección. Una etiqueta de selección estará formada por un conjunto de conceptos.
Los atributos de esta nueva etiqueta son:
• id: es el identificador de esta etiqueta, y debe tener el mismo valor que el identificador del concepto dentro del que se encuentra.
• lval: este atributo está formado una serie de números, que identifican a las formas textuales del concepto en el que se encuentra la etiqueta de selección, y lo que significa es que solo se va a analizar dicha etiqueta se ha seleccionado una de las formas textuales que aparecen en este atributo.
Un ejemplo del uso de esta etiqueta se observa a continuación:
<concept id = "refrep">
<tf n = "1">según poderes otorgados en el mismo acto de fundación</tf>
<tf n = "2">que tiene concedido poder por</tf>
<select id = "refrep" lval = "2">
<concept id = "sexnot">
<tf n = "1"> d. %not </tf>
<tf n = "2"> dña. %not</tf>
</concept>
</select>
<tf n = "3">con facultades bastantes para el presente acto según resulta</tf>
</concept>
Como se puede ver en el ejemplo, a partir del concepto id = "refRep" se accede a las formas textuales n = "1", n = "2" o n = "3". En el caso de que se escogiese la forma textual n = 2, entraría en el select, provocando que en el documento final se incluya el concepto id =
"sexNot". En este caso la etiqueta select sólo añade un concepto, pero se puede añadir tantos como se quieran.
3.- Editor XGTLING
El editor XGTLING es una herramienta que facilita la creación, modificación… de documentos que estén escritos en dicha interlengua.
El editor consta de un menú principal, a través del que se podrán realizar todas las operaciones usando la opción adecuada, siendo el aspecto de dicho menú el que se muestra a continuación:
Desde la opción archivo se accede a:
• Abrir bbdd: esta opción tomará un documento almacenado en la base de datos y lo cargará en el editor.
• Abrir documento: esta opción ha de ser elegida cuando se desea cargar un documento que está en un fichero.
• Borrar: borrará el contenido que haya en la zona de edición del editor.
• Guardar: como su propio nombre indica esta opción es la encarga de guardar en un fichero el documento que se esté creando en el editor.
• Nuevo: esta última opción da la oportunidad de crear un fichero desde cero, es decir, creando la estructura principal, añadiendo los autores, variables, etc…
author:
• Nuevo: añade un nuevo autor al documento que se esté creado.
• Borrar: borra un determinado autor.
var:
• Nuevo: añade una nueva variable al documento.
• Borrar: borrará la variable seleccionada.
clause:
• Nuevo: se procederá a añadir una nueva cláusula.
• Borrar: se usa para borrar una cláusula.
block:
• Nuevo: añadirá un nuevo bloque a la cláusula que esté seleccionada.
• Borrar: se ha de seleccionar el bloque que se quiere eliminar.
nb:
• Nuevo: se procederá a añadir una etiqueta numbloque al bloque seleccionado.
• Borrar: se borrará el numbloque que esté seleccionado.
concept:
• Nuevo: se ha de pulsar si se desea añadir un nuevo concepto al numbloque que esté seleccionado.
• Borrar: se procederá a la eliminación del concepto seleccionado tf:
• Nuevo: añadirá una nueva forma textual al concepto que esté seleccionado.
• Borrar: borrará la forma textual seleccionada.
select:
• Nuevo: añadirá una nueva etiqueta de selección al bloque seleccionado.
• Borrar: se borrará la etiqueta de selección que esté seleccionada.
Salir: si se pulsa esta opción se procederá a salir del editor.
3.1.- Estructura principal
Para crear un documento desde el principio, es decir, sin abrirlo directamente desde la base de datos o desde un fichero se ha de pulsar sobre la opción Archivo del menú y luego sobre la opción Nuevo, apareciendo tras este momento el siguiente cuadro de diálogo:
En el que puede observarse las casillas para rellenar los tres atributos de la etiqueta contract, y las casillas para rellenar el contenido de las etiquetas desc y date.
Si se pulsa sobre el botón Salir del asistente se cancelará el proceso de creación.
Una vez rellenados si se pulsa sobre el botón Aceptar se mostrará el esqueleto de un documento con los datos introducidos, como por ejemplo:
3.2.- author
Para añadir un nuevo autor al documento que se esté generando tan solo hay que pulsar en la opción author del menú, y a continuación pulsar sobre Nuevo, apareciendo a continuación el siguiente cuadro de diálogo para introducir el nombre del autor:
Tan solo hay que escribir el nombre del autor y pulsar sobre Aceptar. Si se pulsa sobre Salir del asistente se procederá a cancelar la inclusión del nuevo autor.
Para borrar un autor tan solo hay que seleccionarlo y seleccionar la opción author del menú, para pulsar posteriormente sobre la opción Borrar.
Para modificar un autor tan solo hay que seleccionar el autor deseado, pulsar con el ratón sobre él y editar el contenido, pero hay que tener cuidado con no modificar la estructura de la etiqueta.
3.3.- var
Para añadir una nueva variable al documento que se esté generando solamente hay que pulsar en la opción var del menú, y a continuación pulsar sobre Nuevo, apareciendo a continuación el siguiente cuadro de diálogo para introducir los datos de la variable:
Como puede observarse tan solo hay que escribir los correspondientes valores para el atributo id, para el atributo d y seleccionar el tipo correspondiente, para finalmente pulsar sobre el botón Aceptar. Si se desea cancelar la inclusión de la nueva variable tan solo hay que pulsar sobre el botón Salir del asistente.
Al igual que ocurría con los autores, para borrar una variable tan solo hay que seleccionarla y pulsar en la opción var y después sobre Borrar.
Para modificar una variable tan solo hay que seleccionarla, pulsar con el ratón sobre ella y editar el contenido, pero hay que tener cuidado con no modificar la estructura de la etiqueta.
3.4.- clause
Para añadir una nueva cláusula al documento que se está generando tan solo hay que pulsar en la opción clause del menú, para posteriormente pulsar sobre la opción Nuevo, tras lo cual aparece el siguiente cuadro de diálogo:
En este cuadro tan solo hay que introducir el nombre de la cláusula, seleccionar el tipo y si se desea que la cláusula tenga descripción tan solo hay que introducirla, y finalmente, solo hay que pulsar sobre el botón Aceptar, ya que si se pulsa sobre el botón Salir del asistente se cancelará la inclusión de dicha cláusula.
Tan solo hay que seleccionar la cabecera de la cláusula que se desea eliminar y pulsar en la opción clause del menú y después pulsar sobre la opción Borrar.
Para modificar una cláusula tan solo hay que seleccionar dicha cláusula, pulsar con el ratón sobre ella y editar el contenido, pero hay que tener cuidado con no modificar la estructura de la etiqueta.
3.5.- block
Para añadir un nuevo bloque primero hay que seleccionar la cabecera de la cláusula que albergará a dicho bloque y después tan solo hay que pulsar en el menú en la opción block, y posteriormente sobre la opción Nuevo, apareciendo a continuación el siguiente cuadro de diálogo, en el que se ha de introducir el identificador de bloque y la descripción (en caso de que se desee incluir):
Una vez introducido los correspondientes valores tan solo hay que pulsar el botón Aceptar para que se incluya dicho bloque en el documento. Por el contrario, si se pulsa el botón Salir del asistente se cancelará el proceso de incluir el bloque.
Para borrar un bloque lo único que hay que hacer es seleccionar la cabecera de dicho bloque y pulsar la opción block del menú y después pulsar sobre la opción Borrar.
Para modificar el contenido de un bloque tan solo hay que seleccionarlo, pulsar con el ratón sobre él y editar el contenido, pero hay que tener cuidado con no modificar la estructura de la etiqueta.
3.6.- nb
Para añadir un nuevo numboque se ha de seleccionar el bloque que lo contenga, y a continuación pulsar la nb para finalmente pulsar sobre la opción Nuevo, tras lo cual aparece un cuadro de diálogo para introducir el número del numbloque. El cuadro de diálogo antes mencionado es:
Si se pulsa el botón Aceptar se incluirá el numbloque en el documento, mientras que si se pulsa el botón Salir del asistente se cancelará el proceso y no se incluirá.
Para borrar un numbloque tan solo hay que seleccionarlo, pulsar sobre el botón block y, por último pulsar la opción Borrar.
Para modificar el contenido de un numbloque tan solo hay que seleccionarlo, pulsar con el ratón sobre él y editar el contenido, pero hay que tener cuidado con no modificar la estructura de la etiqueta.
3.7.- concept
Para añadir un nuevo concepto basta con seleccionar el numbloque que lo ha de contener, pulsar en el menú en la opción concept y luego en la opción Nuevo, tras lo cual aparece un cuadro de diálogo en el que se ha de introducir los datos correspondientes, teniendo el diálogo la imagen que se muestra a continuación:
Puede verse el cuadro de edición para introducir el identificador del concepto, y también un botón por si se desea incluir el tipo o no. En caso de que si se quiera incluir cuando se pulsa sobre el botón de incluir tipo aparece una lista para seleccionar el tipo. Cuando se ha completado la información del concepto tan solo hay que pulsar el botón Aceptar. Si se desea cancelar la inclusión del concepto se ha de pulsar sobre el botón Salir del asistente.
Para esto solamente hay que seleccionar el concepto que se desea borrar, pulsar en la opción de concept y luego sobre la opción Borrar.
Para modificar el contenido de un concepto tan solo hay que seleccionar dicho concepto, pulsar con el ratón sobre él y editar el contenido, pero hay que tener cuidado con no modificar la estructura de la etiqueta.
3.8.- tf
Para añadir una forma textual tan solo hay que seleccionar el concepto que lo ha de contener, pulsar la opción tf del menú y finalmente pulsar sobre la opción Nuevo, tras lo cual aparece un cuadro de diálogo en el que hay que introducir el valor de los correspondientes atributos de la forma textual que se quiera añadir, teniendo el cuadro de diálogo anterior el siguiente aspecto:
Puede observarse el hueco para introducir el número de la forma textual, el contenido de la forma textual (el texto que aparecerá en el documento final una vez que se hayan sustituido las variables que en dicha forma textual aparecen) y un botón por si se desea incluir el formato, y en caso de que sí se desea incluir se habrá que seleccionar dicho formato de la lista que aparece a la izquierda.
Para borrar una forma textual tan solo se ha de seleccionar la forma textual deseada, pulsar sobre la opción tf del menú y luego sobre la opción Borrar.
Para modificar el contenido de una forma textual tan solo hay que seleccionar dicha etiqueta, pulsar con el ratón sobre ella y editar el contenido, pero hay que tener cuidado con no modificar la estructura de la etiqueta.
3.9.- select
Para añadir una etiqueta de selección se ha de seleccionar el concepto que la contendrá, después se ha de seleccionar del menú la opción select y luego la opción Nuevo, apareciendo el siguiente cuadro de diálogo para introducir el identificador de la etiqueta (que ha de ser igual que el concepto en el que se encuentra) y las formas textuales que harán posible tal elección (números separados por espacios):
Una vez introducido los correspondientes valores se ha de pulsar sobre el botón Aceptar. Pero si se desea cancelar la inclusión de esta etiqueta tan solo hay que pulsar sobre el botón Salir del asistente.
Para borrar una etiqueta de selección solamente hay que seleccionar la etiqueta en cuestión, pulsar la opción select del menú y por último pulsar sobre la opción Borrar.
Para modificar el contenido de una etiqueta de selección solo hay que seleccionarla, pulsar con el ratón sobre ella y editar el contenido, pero hay que tener cuidado con no modificar la estructura de la etiqueta.
4.- Ejemplo del proceso completo
Como se comentó en la Introducción, crear documentos escritos en la interlengua XGTLING es solo el primer paso para la creación simultánea y automática de contratos en varios idiomas. Con el editor se pueden crear documentos en el que tan solo hay que incluir las etiquetas (autores, variables, cláusulas, bloques, numbloques, formas textuales y etiquetas de selección) que se estimen oportunas. Como ejemplo para iniciar el proceso de generación de un documento en inglés y en español se crean los correspondientes documentos con el editor, que tendrán un aspecto como el siguiente:
El siguiente paso será introducir una serie de información necesaria para cada uno de los idiomas en los que se quiera generar el documento, siendo esta información:
• Ruta del documento de entrada.
• Ruta donde se quiere almacenar el documento.
• Identificador que se le va a dar al documento para almacenarlo en la base de datos.
Esta información puede recogerse en un formulario como se muestra a continuación:
Una vez que se ha indicado la información necesaria se pasa cada documento de entrada por un analizador para asegurarse que el documento está bien escrito (en la interlengua), está escrito en el idioma que el usuario ha indicado, y que todos los documentos pertenecen a la misma familia. El analizador está formado por un analizador léxico y un analizador sintáctico, siendo sus funciones:
• Analizador léxico: dividir el documento de entrada en estructuras de mínima información. Estas estructuras se denominan formalmente tokens.
• Analizador sintáctico: ver que los tokens que recibe del analizador léxico siguen la gramática que se describe mediante la interlengua.
Una vez que se han analizado todos los documentos y se ha comprobado que son correctos se procede a almacenar en la base de datos toda la información de cada documento: autores, variables, cláusulas,…Y cuando está todo almacenado en la base de datos puede comenzar el proceso de generación propiamente dicho. Para ello, mediante el algoritmo de generación y con las elecciones del usuario se va eligiendo la estructura final que deben tener los documentos de salida. A modo de ejemplo, los documentos anteriores escritos en inglés1 y en español con el editor pueden generar los siguientes documentos de salida:
1 La salida en inglés constituye un borrador con errores léxicos y sintácticos no imputables al programa en si, sino a los documentos de muestra elegidos en una primera versión.