30
Projektując aplikację internetową dość często korzysta się z plików konfiguracyjnych zawierających chociażby dane do połączenia z bazą. Sposób zapisu tych danych jest zależny od formatu pliku z konfiguracją. Dość często formatem tym jest XML ze względu na możliwość uzyskiwania praktycznie dowolnej struktury pliku. Niestety wadą formatu XML jest często przerost formy nad treścią czego wynikiem jest spory narzut informacji o strukturze pliku w porównaniu do samych danych, które mają być wykorzystane.
Istnieją rozwiązania alternatywne takie jak np. format INI znany z plików konfiguracyjnych aplikacji pracujących w systemie MS Windows. Format ten ma zdecydowanie mniejszy narzut jednak posiada on płaską strukturę czyli nie pozwala tworzyć struktur drzewiastych co może powodować spore problemy przy odczycie. Podobny problem dotyczy formatu plików conifguracyjnych spotykanych w systemach linuksowych.
Jest jednak pewne rozwiązanie które niejako łączy zalety powyższych pozbawiając ich przy tym głównych wad. Format o którym mowa to YAML, którego strona domowa znajduje się pod adresem http://yaml.org. Format ten przypomina pliki INI jednak jest bardziej czytelny i pozwala na tworzenie skomplikowanych struktur danych minimalizując przy tym narzut struktury nad zawartością.
Format ten powstał w 2001 roku a skrót początkowo oznaczał Yet Another Markup Language. Z czasem nazwa została zmieniona na YAML Ain't Markup Language by lepiej oddać zastosowanie języka. Przykład pliku konfiguracyjnego w formacie YAML:
-
logEvent: Oz-Ware Purchase Invoice
-
date: 2007-08-06
-
customer:
-
given: Dorothy
-
family: Gale
-
-
items:
-
- part_no: A4786
-
descrip: Water Bucket (Filled)
-
price: 1.47
-
quantity: 4
-
-
- part_no: E1628
-
descrip: High Heeled "Ruby" Slippers
-
price: 100.27
-
quantity: 1
-
-
bill-to: &id001
-
street: |
-
123 Tornado Alley
-
Suite 16
-
city: East Westville
-
state: KS
-
-
ship-to: *id001
-
-
specialDelivery: >
-
Follow the Yellow Brick
-
Road to the Emerald City.
-
Pay no attention to the
-
man behind the curtain.
Format YAML umożliwia przechowywanie prostych ciągów znaków, liczb i bardziej skomplikowanych danych takich jak tablice asocjacyjne czy dane binarne. Ich zapis jest bardzo czytelny i wydaje się być dość naturalny dlatego znakomicie nadaje się do przechowywania danych konfiguracyjnych. Pełna specyfikacja znajduje się na stronie http://yaml.org/spec/current.html. W wielu językach istnieją biblioteki ułatwiające odczyt danych z formatu YAML i dostępne są na stronie: http://en.wikipedia.org/wiki/YAML#Implementations. Dla PHP dostępny jest moduł z repozytorium PECL Syck oraz biblioteka Spyc.
pomysł rewelacyjny, ale jak YALM sprawdza się w praktyce?
Wg mnie doskonale. Używam go do większości plików konfiguracyjnych i z moich testów wynika, że szybkość przetwarzania do postaci tablicy jest podobna jak w przypadku formatu XML, czytelność zdecydowanie wyższa i znacznie łatwiejsza edycja.
Dajcie spokój. Moda na ten cały YAML wynika tylko z tego, że format ten został zastosowany w poważnym Frameworku Symfony. Interpretacja tego formatu na pewno nie jest szybsza od XML, a już na pewno od INI. Ja popieram ten ostatni. Zwarty, prosty, szybki i uniwersalny.
W zasadzie to pojawił się on najpierw w RoR a później został przejęty przez jego klony w PHP i nie tylko. Wg mnie jest on czytelniejszy od XML, łatwiejszy do interpretacji (szczególnie w przypadku zagnieżdżeń) i nie ma takiego narzutu formatu nad treścią. Mnie osobiście denerwuje pakowanie każdej konfiguracji do XML’a. Co do INI to masz rację ale jego wada polega na tym, że ma on płaską strukturę (tylko sekcje i wpisy) a YAML umożliwia znacznie więcej.
Pudło!
Już w 2002 istniała implementacja Yaml dla Perla … gdy RoR jeszcze nie istniało
A ja wole XML-a, nie muszę się matrwić czy przez przypadek nigdzie nie rzuciłem taba zamiast spacji- a to strasznie deenrwuje… i XML jest dla mnie czytelniejszy jednak:P