Przyjrzałem się XSLT do przekształcania jednego pliku XML w inny (HTML itp.). Teraz, gdy widzę, że XSLT ma zalety (będąc znormalizowanym i używanym narzędziem), jestem niechętny z kilku powodów
- Procesory XSLT wydają się być dość duże / wymagają dużych zasobów
- XML jest złym zapisem do programowania i na tym właśnie polega XSLT.
Nie chcę tutaj trollować XSLT, ale chcę tylko wskazać, czego nie lubię, aby dać ci wyobrażenie o tym, czego oczekiwałbym od alternatywy.
Mając trochę doświadczenia w Lispie, zastanawiam się, czy istnieją lepsze sposoby transformacji struktury drzewa w oparciu o pewne seplenienie. Widziałem odniesienia do DSSSL, niestety większość linków o DSSSL jest martwa, więc zobaczenie kodu, który to ilustruje, jest już trudne. Czy DSSSL jest nadal w użyciu? Pamiętam, że raz zainstalowałem openjade podczas sprawdzania dokumentacji docbook.
Post na blogu Jeffa Atwooda sugeruje używanie Ruby zamiast XSLT.
Czy są jakieś rozsądne sposoby wykonywania transformacji XML podobnych do XSLT w języku programowania innym niż XML? Byłbym otwarty na wejście
- Przydatne biblioteki dla języków skryptowych, które ułatwiają transformacje XML
- zwłaszcza (ale nie wyłącznie) języki transformacji podobne do seplenienia, Ruby itp.
Kilka rzeczy, które do tej pory znalazłem:
- Kilka miejsc w sieci wskazało Linq jako możliwą alternatywę. Ogólnie rzecz biorąc, mam jakąkolwiek klasyfikację, również od tych, którzy mieli najlepsze doświadczenie XSLT.
- W przypadku schematu http://cs.brown.edu/~sk/Publications/Papers/Published/kk-sxslt/ i http://www.okmij.org/ftp/Scheme/xml.html
Odpowiedzi:
Trudno jest oceniać technologie, jeśli nie masz do nich głębokiego doświadczenia, ale oczywiście to właśnie wtedy musisz podejmować decyzje, więc nie ma prostej odpowiedzi na ten dylemat.
Przytaczasz dwie obawy: wydajność i użyteczność. Spróbuję rozwiązać oba poniżej.
Po pierwsze, wydajność. Wydajność kursu zależy nie tylko od języka, ale także od implementacji, a także od wiedzy użytkowników. Różne procesory XSLT mogą się znacznie różnić pod względem wydajności, a ten sam procesor może się bardzo różnić w zależności od tego, w jaki sposób jest używany (na przykład w Saksonii ludzie, którzy mają problemy z wydajnością, bardzo często używają go z DOM, co jest złym połączeniem , a wydajność może wzrosnąć dziesięciokrotnie, jeśli zamiast tego użyjesz natywnego modelu drzewa w Saksonii). Pierwszą radą jest, aby nie brać udziału w pogłosie, mierzyć; a druga rada to upewnienie się, że osoba dokonująca pomiaru ma wystarczające doświadczenie, aby nie popełniać głupich błędów. Łatwiej powiedzieć niż zrobić.
Z grubsza można podzielić zadania transformacji na dwie kategorie: proste i złożone. W przypadku prostych transformacji przy dobrym procesorze XSLT cały czas jest analizowany i serializowany, a czas przetwarzania XSLT prawie nie pojawia się na zdjęciu. Ponieważ każda inna technologia będzie wiązać się z takimi samymi kosztami analizy i serializacji, wybór technologii transformacji nie zrobi dużej różnicy (z wyjątkiem być może bardzo bardzo niskiego poziomu kodowania za pomocą przesyłania strumieniowego, ale niewiele osób może sobie pozwolić na programowanie czas i umiejętności potrzebne do wdrożenia tego). W przypadku złożonych transformacji dużych dokumentów zaczynają się pojawiać te same problemy, co w przypadku programowania SQL: osiągnięcie dobrej wydajności wymaga dobrej interakcji między umiejętnościami i wiedzą programisty a możliwościami optymalizatora. Podobnie jak w przypadku SQL, to „ w tak wysokim języku bardzo łatwo jest napisać kilka prostych instrukcji, które powodują, że procesor musi wykonać bardzo dużo pracy. Ale tak jak w przypadku SQL, programiści, którzy wiedzą, co robią, zrobią znacznie lepiej niż nowicjusze.
Po drugie, użyteczność. Oparta na XML składnia XSLT jest bardzo odrażająca dla wielu osób, które po raz pierwszy zetknęły się z tym językiem. Ale istnieją dobre powody i realne korzyści z robienia tego w ten sposób: istnieje argument „szablon”, że duża część kodu składa się z XML, który ma zostać zapisany w dokumencie wynikowym, a najlepszym sposobem na zapisanie XML jest XML. I jest argument „refleksji”; w dużych złożonych systemach bardzo często można znaleźć arkusze stylów, które generują arkusze stylów. Następnie jest argument „narzędzia”; jeśli jesteś w sklepie XML, prawdopodobnie masz dużo narzędzi XML, takich jak edytory sterowane składnią, i dobrze jest móc korzystać z tych samych narzędzi do obsługi programów i danych. Wady okazują się dość kosmetyczne w porównaniu: tam ” s liczba naciśnięć klawiszy związanych z edycją (łatwa do naprawienia za pomocą dobrego narzędzia do edycji) i istnieje szczegółowość kodu (zmniejszająca jego czytelność). Szczegółowość jest znacznie zmniejszona w XSLT 2.0 dzięki wprowadzeniu takich funkcji, jak wyrażenia regularne i funkcje arkuszy stylów: wiele arkuszy stylów jest zmniejszonych do połowy lub jednej trzeciej, gdy w pełni korzystają z XSLT 2.0.
Twoja wzmianka o DSSSL wywołuje u mnie cierpki uśmiech. Nigdy nie korzystałem z DSSSL, ale historie, które słyszałem, były niepotrzebne, ponieważ jego składnia była tajemna i niezwiązana ze składnią danych (SGML). Zastosowanie składni XML dla XSLT było silnie motywowane doświadczeniem z DSSSL.
Są ludzie, którzy kochają XSLT i są ludzie, którzy go nienawidzą. Nic dziwnego, że ci, którzy często go używają, należą do pierwszej kategorii. Ci, którzy go nie lubią, to na ogół ci, którzy nie nauczyli się „myśleć w sposób XSLT”. Można argumentować, że język programowania nie powinien wpływać na twój sposób myślenia, ale tak jest: pisanie w języku opartym na regułach ma inny sposób myślenia niż pisanie w języku imperatywnym. Pierwszą reakcją wielu programistów jest to, że czują się mniej pod kontrolą (opisując problem, zamiast mówić komputerowi, co robić krok po kroku). Jest to bardzo podobne do reakcji, którą obserwowałeś, kiedy ludzie po raz pierwszy zostali zapoznani z SQL. W dzisiejszych czasach ludzie uczą się SQL wcześniej w swojej karierze, więc wymagana jest mniejsza korekta mentalna.
Ostatecznie powinieneś wybrać technologię opartą na obiektywnych, mierzalnych kryteriach, a nie na reakcjach miłości / nienawiści. Te pomiary są trudne. Ale wiele osób używa XSLT bardzo intensywnie i bardzo skutecznie, więc nie ma wątpliwości, że można to zrobić.
źródło
Bez dodatkowych informacji o kontekście trudno jest odpowiedzieć.
Nadal nie rozumiem, dlaczego nie chcesz używać XSLT. To odpowiednie narzędzie do pracy i potężne. Odbywa się to w celu przekształcenia jednego pliku XML w inny.
Czy masz twarde dane, aby to wesprzeć? Czy wdrożyłeś rozwiązanie przy użyciu XSLT i odkryłeś, że XSLT stanowi wąskie gardło, które uniemożliwia dostarczenie produktu przy spełnieniu wszystkich niefunkcjonalnych wymagań związanych z wydajnością?
Bez danych statystycznych i profilowania nie można racjonalnie stwierdzić, że dane rozwiązanie nie będzie działać. Czy wymagania niefunkcjonalne są wystarczająco uzasadnione? Czy wolisz marnować, powiedzmy, dziesięć dni pracy programistów, aby zyskać kilkaset milisekund, zastępując XSLT inną alternatywą? Czy warto
Więc chcesz przekształcić jeden XML w inny, ale nie chcesz używać XSLT, ponieważ „XML to zły zapis”?
Jeśli fakt, że używasz XML jako pewnego rodzaju języka programowania, który cię tak denerwuje, nie postrzegaj go jako programowania, ale raczej jako zbiór reguł transformacji.
Nie musisz nawet pisać XSLT ręcznie. Istnieje wiele edytorów ETL, które umożliwiają graficzne odwzorowanie jednego pliku XML na inny: żadne programowanie nie jest wymagane. Niektóre z nich używają XSLT jako danych wyjściowych.
źródło
XSLT file
nieXSLT Transformations
samymiJeśli używasz XSLT do generowania XML na podstawie surowego XSLT i niektórych parametrów, które przekazujesz do silnika XSLT, wówczas stosowanie XML szablonów jest znacznie łatwiejsze do zrozumienia i utrzymania.
Byłem przy projekcie, w którym Wąsy został użyty do zastąpienia XSLT, w wyniku czego powstały znacznie prostsze podstawowe pliki XML, które każdy mógł edytować i dostosowywać, a nie prace nad projektem przekazywane jednej lub dwóm dzielnym duszom, które siedziały w całkowitej ciszy z kroplami potu spływającymi ...
Podejście szablonowe nie nadaje się do użycia, gdy podstawowy XML jest również osobnymi ważnymi danymi, a XSLT służy do zapewnienia alternatywnej reprezentacji lub wyciągu ze źródłowego XML.
źródło
XML nie jest językiem programowania
XML to sposób na transfer / transport danych.
to, co robi instrukcja XSLT, to użycie Xpath do zapytania danych w określony sposób i umieszczenia ich w innym obiekcie / dokumencie transportu danych.
I / LUB
XSLT może przekształcić plik XML w HTML, który jest innym sposobem wyświetlania / transportu danych zawartych w dokumencie XML.
jeśli chcesz zmienić XML lub utworzyć dokument XML, możesz użyć dowolnej liczby języków: C #, VB, Ruby itp.
zwykle kiedy używasz pliku XSLT do transformacji dokumentu XML, nadal masz oryginalny dokument XML, tak naprawdę nie zmieniasz oryginalnego dokumentu, naprawdę tworzysz nowy.
źródło
xsl:for-each
xsl:apply-templates
,xsl:if
xsl:call-template
xsl:value-of
aby zdefiniować reguły transformacji.Pracowałem nad wieloma systemami przetwarzania XML, które łączą biblioteki XSLT z Javą lub C ++ dla części, w których XSLT nie jest tak dobry. Istnieją biblioteki, które osiągają bardzo dobrą wydajność XSLT nawet w przypadku plików XML 20 MB, jednak XSLT ma pewne ograniczenia dotyczące kontekstu, zmiennych i naprawdę złożonych wzorców ciągów. Każdy system, nad którym pracowałem, miał kilka rzeczy do zrobienia w Javie / C ++, ponieważ kontekst był ważny lub pomocne było pewne złożone wyrażenie regularne. Moja na wynos jest to, że XSLT plus dodatkowy kod w wybranym języku to dobry sposób na transformację XML.
źródło