Если вы читаете мой англоязычный блог, то вы уже в курсе и можете дальше не читать
Позанимаюсь немножко саморекламой :)
На этих выходных я переписал php-биндинг к библиотеке Syck, которая позволяет очень быстро и главное в соответствии со спецификацией парсить YAML-документы. Рост скорости по сравнению с реализацией написаной на PHP приблизительно в 1000 раз. Этот биндинг автоматически распознаётся фреймворком Symfony, так что если вы пишете на нём, то этот extension вам будет особенно полезен.
Изменения по сравнению со старой версией syck extension:
- Вместо падения в сегфолт на ошибках парсинга теперь кидается SyckException (наследуется от стандартного UnexpectedValueException -> RuntimeException)
- Исправлены проблемы с компиляцией, о которых я знал (теперь безболезненно собирается на MacOS-X и при включенном ZTS)
- В phpinfo() рапортуются версии библиотеки и биндинга
- Поддерживается PHP5+
Релиз с этими изменениями автор обещал сделать в течение месяца, а пока можно брать исходники из subversion
Что такое YAML и зачем он нужен
YAML — это кроссплатформенный формат сериализации массивов и хэшей произвольной вложенности (с поддержкой указателей на другие массивы описанные в этом же документе). Основной элемент форматирования: отступ в 2 пробела.
---
# Пример синтаксиса (это комментарий)
array:
- "element1" # это строка
- element2 # это тоже строка
- 0.5
- null # это null, а не строка
- true # а это булево значение
hash:
key: value # пара ключ-значение
key2: [ elt1, 100, elt3 ] # а тут в качестве значения используется inline-массив
key3: { a: b, c: d, e: "some other value" } # а это inline-хэш
texts: # а это вложенный хэш с двумя элементами
sometext: >
А это произвольный многострочный текст, в
котором переносы строк на выходе будут
заменены на пробелами
somesource: |
<?php
// А это тоже текст, но на этот раз переносы строк будут сохранены
$string = file_get_contents('test.yml');
$array = syck_load($string);
var_dump($array);
?>
Я использую YAML в основном для хранения файлов конфигурации, но на практике могут быть очень разные применения. Например Release-notes библиотеки Syck выполнены именно в виде YAML-файла. Читается на удивление легко, вы не находите? Сравните с XML :)
Материалы по теме:
- YAML Ain't Markup Language (официальный сайт)
- Мнение wikipedia
- YAML Cookbook (ruby)
March 5 2007, 09:52:55 UTC 5 years ago
Ну и вообще, ClearSilver весьма лёгок, хоть код и надо бы почистить :)
March 5 2007, 10:01:10 UTC 5 years ago
что-то не возникает у меня однозначного ощущения, что hdf мне нравится больше
по сути очень похоже, на самом деле :)
что не нравится: нет поддержки массивов (только хэши), обязательно использование скобок, нет типизации значений
March 5 2007, 10:23:20 UTC 5 years ago
А массив, понятное дело, имитируется хэшем по индексу, плюс сортировка с произвольной функцией сравнения.
5 years ago
5 years ago
March 5 2007, 10:19:26 UTC 5 years ago
March 5 2007, 10:24:18 UTC 5 years ago
March 5 2007, 11:40:29 UTC 5 years ago
March 5 2007, 11:51:57 UTC 5 years ago
http://ajaxian.com/archives/json-yaml-i
но по мне так YAML более выразителен
March 5 2007, 12:47:07 UTC 5 years ago
JSON содержит больше паразитных символов (например, закрывающие скобки литералов, запятые даже в многострочных перечислениях).
Ну и до кучи — вчера пробовал разобрать встроенной в php функцией простую казалось бы структуру… Очень много ограничений.
March 5 2007, 12:48:36 UTC 5 years ago
March 5 2007, 12:56:16 UTC 5 years ago
March 5 2007, 13:13:13 UTC 5 years ago
5 years ago
5 years ago
5 years ago
March 5 2007, 13:12:51 UTC 5 years ago
March 5 2007, 14:42:50 UTC 5 years ago
March 5 2007, 15:14:15 UTC 5 years ago
я его не только в рельсоподобных штуках использую :)
March 5 2007, 15:19:16 UTC 5 years ago
March 5 2007, 15:34:48 UTC 5 years ago
March 5 2007, 15:38:32 UTC 5 years ago
5 years ago
5 years ago
5 years ago
5 years ago
March 5 2007, 12:10:45 UTC 5 years ago
March 5 2007, 19:19:28 UTC 5 years ago
March 5 2007, 12:50:15 UTC 5 years ago
March 5 2007, 12:58:09 UTC 5 years ago
дописывать его точно не хочется (я его только выправил чтобы E_NOTICE не кидались в 5.2)
а переписать наверное можно, но как-то нет стимула
у меня все намечающиеся проекты предполагают свободное руление сервером и в таком случае неясно нафига, если есть Syck :)
March 6 2007, 10:41:26 UTC 5 years ago
Знакомо :-)
> а переписать наверное можно, но как-то нет стимула
> у меня все намечающиеся проекты предполагают свободное руление сервером и в таком случае неясно нафига, если есть Syck :)
Я спросил именно потому, что у меня далеко не все проекты работают в свободном окружении. Часть из них вообще на shared хостингах, представь…
Вот поэтому сижу, читаю спецификацию YAML, радуюсь.
May 20 2008, 10:26:23 UTC 4 years ago
Пока склоняюсь в сторону JSON.
http://code.google.com/p/cs-javaphp/
May 20 2008, 10:32:16 UTC 4 years ago
JSON всё интерпретирует как строку
YAML позволяет явно идентифицировать тип объекта (как простой: число/булево/дата, так и сложный: класс)
May 20 2008, 10:45:18 UTC 4 years ago
Прочитал http://ru.wikipedia.org/wiki/YAML - там ни слова о типах...???..
4 years ago
4 years ago
4 years ago