Мне нужен удобочитаемый, но пригодный для синтаксического анализа формат документа

Я работаю над одним из тех проектов, где есть миллион лучших способов добиться того, что мне нужно, но у меня нет выбора, и я должен сделать это таким образом. Вот:

Существует веб-форма, когда пользователь заполняет ее и нажимает кнопку отправки, создается удобочитаемый текстовый файл с использованием данных формы. Это выглядит так:

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

Моя проблема заключается в следующем: мне нужно преобразовать этот текстовый файл обратно в веб-форму, чтобы пользователь мог его редактировать.

Как я мог сделать это надежным способом? База данных не вариант, я должен использовать эти текстовые файлы.

Мои вопросы:

  • Есть ли надежный способ сделать это, используя формат в приведенном выше примере?
  • Какой удобочитаемый формат будет работать лучше (другими словами, я могу изменить формат)
  • Читаемый человеком означает, что непрограммист может прочитать его и понять, что к чему.

Этот проект использует PHP.

ОБНОВЛЕНИЕ

Под удобочитаемостью я подразумеваю, что любой может прочитать текст и не быть перегруженным им, включая вашу бабушку.


person macinjosh    schedule 07.04.2010    source источник
comment
Это в значительной степени то, чем является XML... удобочитаемый для человека, но может быть легко проанализирован. Тем не менее, необработанный XML не самый красивый. Я бы предложил использовать XML для файла данных, а затем создать ссылку на файл XSLT, чтобы отформатировать его для удобочитаемого представления.   -  person DA.    schedule 08.04.2010
comment
@DA Под удобочитаемым я подразумеваю, что моя мама могла прочитать это и не смутиться и не перегрузиться.   -  person macinjosh    schedule 08.04.2010
comment
@macinjosh: Мне нравится твой ник. Когда мне было 12, я хотел основать компанию под названием The Mac & Josh :-)   -  person Josh    schedule 08.04.2010
comment
@ Джош ха, спасибо. Вам повезло, что ваше имя стало вашим никнеймом!   -  person macinjosh    schedule 08.04.2010
comment
@macinjosh: Это потому, что мой openid — josh.gitlin.name. Я видел здесь как минимум еще одного Джоша, так что, видимо, имена не обязательно должны быть уникальными :-)   -  person Josh    schedule 08.04.2010
comment
@macinjosh, следовательно, часть XSLT. Сделайте так, чтобы это выглядело так, как вы хотите для своей мамы.   -  person DA.    schedule 08.04.2010
comment
Из любопытства, если пользователи могут видеть данные в своей форме, почему бабушка не может? Просто дайте ей представление формы (возможно, с отключенными элементами формы)   -  person DA.    schedule 08.04.2010
comment
@DA XSLT - хорошее предложение, к сожалению, у этого клиента есть учетная запись общего хостинга, и у меня нет доступа к программе XSLT. А что касается предложения вида формы, документ необходимо загрузить и передать.   -  person macinjosh    schedule 08.04.2010
comment
@macinjosh обратите внимание, что вам не нужна программа XSLT, если у них относительно новый веб-браузер. Более новые браузеры будут загружать XML-файл, и если есть связанный файл XSLT, он будет правильно анализировать. Однако для этого потребуется подключение к Интернету (чтобы получить файл XSLT), что, возможно, затруднит передачу.   -  person DA.    schedule 08.04.2010


Ответы (5)


Мне нужен удобочитаемый, но пригодный для синтаксического анализа формат документа

Именно для этого был разработан YAML. Подробнее об этом можно прочитать на их сайте или в Википедии.

Цитирую Википедию:

Синтаксис YAML был разработан таким образом, чтобы его можно было легко сопоставить с типами данных, общими для большинства языков высокого уровня: списком, хэшем и скаляром. Его знакомый контур с отступом и компактный внешний вид делают его особенно подходящим для задач, в которых люди могут просматривать или редактировать структуры данных, такие как файлы конфигурации, дамп во время отладки и заголовки документов.

Преимущество по сравнению с XML заключается в том, что он не использует теги, которые могут запутать пользователей. И я думаю, что это чище, чем INI (который также упоминался), потому что он просто использует двоеточия вместо знаков равенства, точек с запятой и кавычек.

Пример YAML выглядит так:

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.
person Josh    schedule 07.04.2010
comment
О, и есть по крайней мере две PHP-библиотеки для чтения/записи YAML - person Josh; 08.04.2010
comment
Отличный ответ на отличный вопрос. Я не знал о YAML. - person Leniel Maccaferri; 08.04.2010
comment
Я позвонила по этому поводу бабушке. С ней все в порядке. - person webbiedave; 08.04.2010
comment
Забавно... бабушка сказала ЯМ-Что? ;-) - person Josh; 08.04.2010

Я бы сказал либо использовать

или почти любой облегченный язык разметки, который вы считаете подходящим.

person Gordon    schedule 07.04.2010
comment
Я бы сказал, что упомянутые легкие языки разметки, кроме ini и yaml, не имеют отношения к исходному сообщению, поскольку они ориентированы на структурированный текст и структурированные данные. - person JJ Rohrer; 29.01.2014

Возможно, вы захотите изучить YAML

http://www.yaml.org/

Я согласен с ответом Пабло Фернандеса. Я думаю, что JSON также может быть хорошим выбором.

person Frank Hale    schedule 07.04.2010

XML является опцией.

person Leniel Maccaferri    schedule 07.04.2010

Я просто скажу, что строка INI довольно читабельна:

Pet_Name = "Fred"

Но вы всегда можете свернуть свой собственный формат. Что-то типа:

Key: ValueValueValueValueValueValue
Key: ValueValue

По сути, вы бы разбили строку на новые строки, искали текстовые строки перед двоеточиями и использовали их в качестве ключа, а данные после двоеточия и до новой строки были значением.

person Tyler Carter    schedule 07.04.2010
comment
Это то, что я делаю сейчас, но я столкнулся с некоторыми проблемами синтаксического анализа, когда данные включали текст, который нарушал соглашение, например, новая строка, за которой следует слово и двоеточие. Недостаточно надежный. - person macinjosh; 08.04.2010