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:

CODE:
  1. logEvent:    Oz-Ware Purchase Invoice
  2. date:        2007-08-06
  3. customer:
  4.     given:   Dorothy
  5.     family:  Gale
  6.    
  7. items:
  8.     - part_no:   A4786
  9.       descrip:   Water Bucket (Filled)
  10.       price:     1.47
  11.       quantity:  4
  12.  
  13.     - part_no:   E1628
  14.       descrip:   High Heeled "Ruby" Slippers
  15.       price:     100.27
  16.       quantity:  1
  17.  
  18. bill-to:  &id001
  19.     street: |
  20.             123 Tornado Alley
  21.             Suite 16
  22.     city:   East Westville
  23.     state:  KS
  24.  
  25. ship-to:  *id001   
  26.  
  27. specialDelivery: >
  28.     Follow the Yellow Brick
  29.     Road to the Emerald City.
  30.     Pay no attention to the
  31.     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.

6 Responses to “YAML - alternatywa dla XML”

  1. pomysł rewelacyjny, ale jak YALM sprawdza się w praktyce?

    November 8th, 2007 | 17:28
  2. 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.

    November 8th, 2007 | 21:18
  3. markac

    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.

    October 29th, 2008 | 12:47
  4. 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.

    October 29th, 2008 | 12:54
  5. theo

    Pudło!
    Już w 2002 istniała implementacja Yaml dla Perla … gdy RoR jeszcze nie istniało :)

    February 23rd, 2009 | 21:07
  6. Dawid

    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

    March 25th, 2009 | 09:54

Leave a Reply

You must be logged in to post a comment.