DICT

El Protocolo de red de diccionario (inglés: DICTionary Network Protocol, o DICT para abreviar) es un protocolo transaccional de comando-respuesta sobre TCP que permite a un cliente acceder a definiciones de palabras en un diccionario, por medio de bases de datos de idiomas humanos.

Introducción

El protocolo DICT fue creado por el Grupo de desarrollo de DICT (DICT Development Group), y está descrito en el RFC 2229 (Solicitud de comentarios 2229). Su meta es sobrepasar el protocolo Webster y permitir a los clientes acceder a más diccionarios al mismo tiempo. Habitualmente los servidores DICT escuchan conexiones en el puerto TCP 2628.

Tokens utilizados

Los comandos (órdenes) y las respuestas están compuestos por caracteres del UCS ISO 10646 utilizando la codificación UTF-8 RFC 2044. Más concretamente, usando las convenciones gramaticales de RFC 822:

(Extraído del RFC 2229)

                                             ; (  Octal, Decimal.)
  CHAR        =  <any UTF-8 character (1 to 6 octets)>
  CTL         =  <any ASCII control          ; (  0- 37,  0.- 31.)
                  character and DEL>         ; (    177,     127.)
  CR          =  <ASCII CR, carriage return> ; (     15,      13.)
  LF          =  <ASCII LF, linefeed>        ; (     12,      10.)
  SPACE       =  <ASCII SP, space>           ; (     40,      32.)
  HTAB        =  <ASCII HT, horizontal-tab>  ; (     11,       9.)
  <">         =  <ASCII quote mark>          ; (     42,      34.)
  <'>         =  <ASCII single quote mark>   ; (     47,      39.)
  CRLF        =  CR LF
  WS          =  1*(SPACE / HTAB)
  dqstring    =  <"> *(dqtext/quoted-pair) <">
  dqtext      =  <any CHAR except <">, "\", and CTLs>
  sqstring    =  <'> *(dqtext/quoted-pair) <'>
  sqtext      =  <any CHAR except <'>, "\", and CTLs>
  quoted-pair =  "\" CHAR
  atom        =  1*<any CHAR except SPACE, CTLs, <'>, <">, and "\">
  string      =  *<dqstring / sqstring / quoted-pair>
  word        =  *<atom / string>
  description =  *<word / WS>
  text        =  *<word / WS>

Comandos

La forma de ejecutar los comandos es la siguiente:

La gramática para los comandos es la siguiente:

            command     = cmd-word *<WS cmd-param>
            cmd-word    = atom
            cmd-param   = database / strategy / word
            database    = atom
            strategy    = atom

Comandos definidos en la RFC 2229

Respuestas

Hay dos tipos de respuesta a los comandos anteriormente mencionados, a saber: respuestas de estado y respuestas de texto.

Respuestas de estado

Las respuestas de estado indica la respuesta del servidor al último comando recibido del cliente. Las líneas de respuesta de estado comienzan con un código de 3 dígitos, el cual es suficiente para distinguir todas las respuestas. El primer dígito de la respuesta indica el éxito, fracaso o proceso del anterior comando (basado generalmente en las RFC 640 y RFC 821):

      1yz - Respuesta positiva preliminar
      2yz - Respuesta positiva completa
      3yz - Respuesta positiva intermedia
      4yz - Respuesta negativa completa (transitoria)
      5yz - Respuesta negativa completa (permanente)

El siguiente dígito en el código indica la categoría de la respuesta:

      x0z - Sintaxis
      x1z - Información (p. ej., el texto de ayuda)
      x2z - Conexiones
      x3z - Autenticación
      x4z - No especificados
      x5z - Estado del sistema DICT (estas respuestas indican el estado del sistema DICT del receptor con respecto a la transferencia solicitada u otras acciones de sistema DICT).
      x8z - Extensiones privadas no estandarizadas

Las respuestas esperadas para cada comando está detallada en la propia especificación del comando. Algunas respuestas de estado pueden contener parámetros, como números o cadenas de caracteres.

Respuestas de texto

Antes del texto, se envía una línea de respuesta de estado preliminar (usando un código 1yz) para indicar que un cuerpo de texto sigue a continuación. El texto se envía como una serie de líneas sucesivas de texto, cada una terminada con una secuencia CRLF. Para indicar el final del texto, se envía una línea con el carácter "." (decimal 46). Si una línea de texto original inicia con este carácter, el servidor lo envía dos veces. Después de una respuesta de texto, se envía otra respuesta de estado de código 2yz (positiva completa) o 3yz (positiva intermedia). Las líneas todavía no deben exceder los 1024 caracteres, contando espacios, separadores, etc., como se apuntó anteriormente.

Ejemplo de un cliente DICT

Buscando la palabra widget.

Buscando la palabra Widget

Más información

Se puede consultar la RFC 2229 (en inglés).

Enlaces externos

Sitio Web del Grupo de desarrollo DICT: http://www.dict.org/bin/Dict

Bases de datos de diccionarios: https://web.archive.org/web/20070126105751/http://freedict.org/en/