2010-04-07 14 views
18

Estoy trabajando en uno de esos proyectos donde hay un millón de mejores formas de lograr lo que necesito, pero no tengo otra opción y tengo que hacerlo de esta manera. Aquí está:Necesito un formato de documento legible por humanos, pero analizable

Hay un formulario web, cuando el usuario lo rellena y realiza un envío, se crea un archivo de texto legible mediante los datos del formulario. Se ve así:

field_1: value for field one 

field_2: value for field two 
more data for field two (field two has a newline in it!) 

field3: some more data 

Mi problema es el siguiente: necesito para analizar este archivo de texto nuevo en el formulario web para que el usuario pueda editarlo.

¿Cómo podría, de una manera infalible, lograr esto? Una base de datos no es una opción, tengo que usar estos archivos de texto.

Mis preguntas:

  • ¿Hay una manera infalible para hacer esto utilizando el formato en el ejemplo anterior?
  • Lo que el formato legible humano funcionaría mejor (en otras palabras, puedo cambiar el formato)
  • legible por humanos significa que un programador no podría leerlo y saber qué es qué.

Este proyecto utiliza PHP.

ACTUALIZACIÓN

Por legible por humanos que significa que cualquiera puede leer el texto y no ser abrumado por ella, incluyendo su abuela.

+1

Eso es más o menos lo que XML es ... humano legible, pero puede ser fácilmente analizado. Dicho esto, XML sin formato no es el más bonito. Sugiero usar XML para el archivo de datos, luego vincularlo a un archivo XSLT para formatearlo para la vista legible por humanos. –

+2

@DA Por legible para los humanos, quiero decir que mi madre podía leerlo y no confundirse ni sentirse abrumada. – macinjosh

+0

@macinjosh: me encanta tu nic. Cuando tenía 12 años quería comenzar una empresa llamada "The Mac & Josh" :-) – Josh

Respuesta

21

I Need a humanamente legible, sin embargo Parse-poder Document Format

Esto es lo que YAML fue diseñado para ser. Puede leer más sobre esto en su sitio o en Wikipedia.

Para citar Wikipedia: sintaxis

YAML fue diseñado para ser fácilmente asignada a tipos de datos comunes a la mayoría de los lenguajes de alto nivel : lista, hachís, y escalar.Su familiarizado con sangría esquema y apariencia delgada hace que sea especialmente adecuado para tareas en las seres humanos son propensos a ver o editar datos estructuras, tales como configuración archivos, el vertido durante la depuración, y cabeceras de documentos

La ventaja sobre XML es que no usa etiquetas que puedan confundir a los usuarios. Y creo que es más limpio que INI (que también se mencionó) porque simplemente usa dos puntos en lugar de signos iguales, punto y coma y comillas.

YAML la muestra se ve así:

invoice: 34843 
date : 2001-01-23 
bill-to: &id001 
    given : Chris 
    family : Dumars 
    address: 
     lines: | 
      458 Walkman Dr. 
      Suite #292 
     city : Royal Oak 
     state : MI 
     postal : 48046 
ship-to: *id001 
product: 
    - sku   : BL394D 
     quantity : 4 
     description : Basketball 
     price  : 450.00 
    - sku   : BL4438H 
     quantity : 1 
     description : Super Hoop 
     price  : 2392.00 
tax : 251.42 
total: 4443.52 
comments: > 
    Late afternoon is best. 
    Backup contact is Nancy 
    Billsmer @ 338-4338. 
+0

Ah, y hay al menos dos bibliotecas PHP para leer/escribir YAML – Josh

+0

http://stackoverflow.com/questions/294355/php-yaml-parsers – Josh

+0

Gran respuesta para una gran pregunta. No sabía sobre YAML. –

0

Sólo voy a decir que una cadena INI es bastante legible:

Pet_Name = "Fred" 

embargo, siempre se puede rodar su propio formato. Algo así como:

Key: ValueValueValueValueValueValue 
Key: ValueValue 

Básicamente, se explotaría la cadena por saltos de línea, buscar cadenas de texto en frente de dos puntos y usar eso como la clave y los datos después de los dos puntos y antes de la nueva línea es el valor.

+0

Eso es lo que estoy haciendo ahora, pero me encontré con algunos problemas de análisis donde los datos incluían texto que arruinaba la convención como una nueva línea seguida de una palabra y dos puntos. No es lo suficientemente infalible. – macinjosh

1

XML es una opción.

+4

¿No era uno de los requisitos legible para el hombre? –

5

Es posible que desee ver en YAML

http://www.yaml.org/

Estoy de acuerdo con la respuesta de Pablo Fernández. Creo que JSON podría ser una buena opción también.

11

diría que sea para uso

o casi cualquier lightweight markup language considere oportuno.

+0

Argumentaría que los lenguajes de marcado ligeros mencionados, aparte de ini y yaml no son relevantes para la publicación original, ya que están orientados hacia el texto estructurado frente a los datos estructurados. –

Cuestiones relacionadas