Languages

Erudis - your road to knowledge
Problem z XML-em

Żaden inny standard przechowywania danych, oprócz SQL-a, nie jest tak popularny jak XML. Mimo tego konieczność obcowania z XML-em wcale nie jest przyjmowana z radością przez programistów. Czasem staramy się wręcz uniknąć użycia tego formatu na rzecz alternatyw takich, jak na przykład JSON (ang. JavaScript Object Notation).

Z czego wynika niechęć do posługiwania się formatem danych, który na pierwszy rzut oka jest bardzo prosty i elegancki? Nie spotkałem nikogo, kto po 15 minutach wyjaśnień nie zrozumiał na czym polega idea XML-a i wcale nie dotyczy to tylko osób ze ścisłym czy informatycznym wykształceniem.

Trudności z XML-em pojawiają się wtedy, gdy musimy wyciągać ze złożonego dokumentu określone informacje lub przetwarzać taki dokument na inny format. Zazwyczaj robimy to na potrzeby czy w ramach aplikacji, która pisana jest w jednym z dominujących języków programowania: Javie, C#, Visual Basicu czy C++. Wszystkie te języki są zorientowane obiektowo i ich składnia w żaden sposób nie ułatwia pracy z XML-em. Fragment dokumentu XML-owego jest łańcuchem znaków lub, gdy się porządnie namęczymy, w pocie czoła zbudowanym drzewem obiektów reprezentujących go.

Daje się tutaj we znaki niedostosowanie paradygmatu języka imperatywnego (wymienione wyżej języki zorientowane obiektowo są z nim zgodne) do przetwarzania drzewiastej struktury, jaką jest XML. Znacznie lepiej do tego celu nadają się języki funkcyjne. Nieprzypadkowo język XSLT, stworzony do przetwarzania dokumentów XML-owych, jest właśnie językiem funkcyjnym.

W efekcie programista tworzący aplikację w którymś z popularnych języków musi albo starać się samodzielnie przetworzyć dokument XML na zbiór obiektów, co nie jest ani łatwe ani przyjemne, albo tworzyć protezy napisane w XSLT. To drugie rozwiązanie też nie jest do końca satysfakcjonujące, gdyż powstaje w ten sposób trudna w rozbudowie i utrzymaniu aplikacja hybrydowa.

Przydałby się więc język programowania, który jest językiem obiektowym, ale jednocześnie pozwala na programowanie funkcyjne tam, gdzie jest to wygodne. Na dodatek chcielibyśmy, żeby kod napisany w tym języku można było łatwo łączyć z językiem, w którym jest utworzona znaczna część dotychczas napisanego oprogramowania.

Często rezygnujemy z użycia języka programowania, który by się najlepiej nadawał do pewnego zadania, tylko z tak prozaicznego powodu, że nie zintegrujemy napisanej w nim aplikacji z milionami linii istniejącego już kodu. Przekonamy się za chwilę, że opisane wyżej wymagania spełnia język Scala.