Mateusz Papiernik Blog - Maticomp

application/xhtml+xml - zło, dobro, mniejsze zło

0 poziom | 03 czerwca 2007, 14:28:06
kategoria: Ogólne

Wreszcie wziąłem się za dopracowanie kilku szczegółów na swojej stronie domowej. Od tej pory wysyłana jest prawidłowym application/xhtml+xml, a JS został zastąpiony prawidłową wersją opartą o DOM i jQuery. Jednocześnie kwestia DOCTYPE i mime type zaczęła mnie nękać.

Od dłuższego czasu robię strony używając XHTML 1.0 Strict bądź Transitional. Ale przecież wysyłanie ich jako text/html to strzelanie w stopę. XHTML wysyłany w ten sposób nie wnosi do specyfikacji HTML 4.01 (Strict) nic nowego, poza slashami na końcu tagów, które... przy interpretowaniu strony jako zupy są nieprawidłowe. O ile chwalenie się zgodnością ze standardami przy prawidłowym HTML 4.01 (layout z CSS!) jest na miejscu, bo zgodność faktycznie jest, o tyle XHTML 1.0 Strict wysłany jako text/html to pic na wodę fotomontaż.

Czasem dopilnowanie, aby XHTML Strict miał 100% prawidłowe drzewo dokumentu, co przy wysyłaniu jako application/xhtml+xml jest obligatoryjne, jest niemożliwe lub bardzo utrudnione. Choćby wtedy, gdy klienci oczekują edytorów WYSIWYG do przeklejania tekstów z Worda. Co wtedy robić i co jest mniejszym złem? Robić XHTML 1.0 Transitional, który wyświetla się prawidłowo wysyłany jako text/html, ale tak naprawdę jest niepoprawny? Niby W3C pisze should not be w kwestii wysyłania jako text/html, a nie jawnie zabrania, ale jednak. Może jednak wysyłać HTML 4.01 bez fancy slashes przed zamknięciami tagów i być pewnym faktycznej, a nie pozornej zgodności ze specyfikacją?

Sam do końca nie wiem. Oczywiście, najlepiej byłoby pilnować drzewa dokumentu i wysyłać XHTML Strict. Choć z drugiej strony, specyfikacja HTML5 opartego na SGMLu powstaje i na pewno będzie mieć się dobrze. XHTMLe to alternatywa, a nie następstwo HTMLa - mająca swoje zalety, ale i wiele wad i utrudnień.

Do napisania tej notki skłoniła mnie strona http://pornel.net/xhtml oraz to, że nawet joggerowy adwokat diab^H^H^H^H standardów - Riddle - wysyła swój jog jako text/html

Komentarze

wzs | dnia 03 czerwca 2007, o godzinie 15:07:50

Oczywiście, że w takim przypadku jak Ty opisałeś lepij stosować html 4.01 strict.
xhtml wcale nie jest "bardziej" poprawny nież html, a są z nim, jak na moje oko tylko problemy (najbardziej kuriozalne jest dla mnie to, że dla xhtml potrzebny jest nagłówek xml`a- a to z koleiji włacza Internetexplorerowe dziwactwa).
A tak od strony praktycznej- pisząc zgodnie z wersją strict html 4.01 jedyna różnica w porównaniu do xhtml` to właśnie fancy slashes ;)

Mateusz Papiernik | dnia 03 czerwca 2007, o godzinie 15:34:01

Kwestia prologu XML to nie problem - content negotiation i obok różnych nagłówków - także różne kawałki pliku. ;) Tam, gdzie nie mam kontroli nad poprawnością drzewa XML na pewno lepszy jest HTML 4.01. Co jednak z sytuacją, gdzie drzewo jest poprawne, ale content wysyłany jest jako text/html? No właśnie... j.w., przecież sam mogę wysłać inne nagłówki.

D4rky | dnia 03 czerwca 2007, o godzinie 16:14:40

najprościej elementy tekstu, które potem będą zmieniane przez klienta robić poprzez PHP, wrzucić w edycję tinymce (zwraca xhtml i ma wygląd prostego edytora a'la wordpad czy msword), a potem kod przelatywać dodatkowo tidy, dzięki czemu 100% pewności, że się nie wysypie. do tego sprawdzanie po UA jaki naglowek wyslac i gotowe ;)

Mateusz Papiernik | dnia 03 czerwca 2007, o godzinie 16:16:12

Tiny wcale nie zwraca ladnego kodu XHTML - tylko TinyMCE uzywam. Jest wzglednie akceptowalny przy zestawie regul czysczenia, ktore mu zrobilem, ale tez bez idealu. Z domyslnym zestawem regul "XHTML" dziala ladnie, dopoki w nim sie pisze - a jak ktos wkopiuje kawalki z Worda to ladujemy z sieczka :) ale puszczanie tego przez Tidy potem to jest wyjscie, racja - dzieki! Bede musial sie temu przyjrzec.

D4rky | dnia 03 czerwca 2007, o godzinie 16:18:18

Tidy ma jedną, dużą wadę -> wymaga załadowania modułu do PHP, na co nie każdy serwer się ofc zgodzi :(

Riddle | dnia 06 czerwca 2007, o godzinie 10:44:23

Nie będę wysyłał jako @application@, bo:

* Jogger czasem ucina końcówkę szablonu gdy go wysłać przez upload
* Ilość znaków w moich wpisach przekracza prawie zawsze kilkanaście tysięcy, nie walnąć się gdzieś to cud
* Dewelopowany jest HTML5, który jest dowodem że do XML w sieci jeszcze nie dojrzeliśmy
* Korzystam z lekkich bibliotek, które część operacji opierają na .innerHTML (no bo jak inaczej jQuery.append("<div></div>") działa?)

Mógłbym korzystać z HTML 4.01 Strict, ale wolę mieć kod zgodny ze składnią XML, aby później w razie czego wykonać prosty upgrade. ;-)

Mateusz Papiernik | dnia 06 czerwca 2007, o godzinie 12:02:58

Riddle: dzięki za obfity elaborat :) Do ucinania końcówek jeszcze nie doszedłem, bo szablon się buduje - dobrze wiedzieć. O HTML5 tak jak wspomniałem, pewnie on stanie się szeroko zakorzenionym standardem mimo wszystko, a XHTML zostanie na uboczu. JQuery natomiast mnie zdziwiło - liczyłem poważnie, że jest całkowicie DOM-friendly, a tu kicha, ostatnio się natknąłem właśnie na to o czym piszesz :)

Btw, czy upgrade do HTML5 nie byłby prostszy ze starannego i ładnego HTML 4.01 Strict niż z XHTMLa? ;) Teraz wszystkie slashe z końca będziesz musiał wyciąć ;)

Dot | dnia 28 czerwca 2007, o godzinie 23:27:50

Hmm... / na końcu tagu jest niedozwolony w HTML 4.01? A to mnie zaskoczyłeś. W/g tego, co pokazuje validator W3C to problem występuje tylko w tagach meta (przykład: dot.jogger.pl przestawiony ręcznie w validatorze jako html 4.01 strict - nie czepia się licznie występujących <hr /> i tym podobnych).

Co do samego rozwiązania - osobiście jak tylko mogę, to stosuję XHTML 1.1. Na zasadzie "dlaczego nie?". Jeśli gdzieś za duży wpływ na treść mają osoby trzecie i występuje za duża szansa, że coś się wykrzaczy - wówczas schodzę na niższe standardy. A że XHTML 1.0 Strict może być wysyłany jako text/html, to korzystam z tej możliwości. A że IE się wygłupia - no trudno, IE dostaje gorszą wersję strony - jako text/html oraz bez prologu XML.

Mateusz Papiernik | dnia 28 czerwca 2007, o godzinie 23:44:19

Niedozwolony raczej nie:

Z wiki:
* In HTML, the trailing slash used for the empty element syntax is a parse error for non-void elements (see below), but is ignored in all cases.

Z jednego z FAQow o HTML5
* However, due to the widespread attempts to use XHTML 1.0, there are a significant number of pages using the trailing slash. Because of this, the syntax has been permitted (though it is not recommended) in order to ease migration from XHTML 1.0 to HTML5.

Tymniemniej używanie trailing slasha jest pozbawione sensu w HTMLu. Validator sie bardzo wielu rzeczy nie czepia :) nie czepia sie np. wysylania XHTML jako text/html.

XHTML 1.0 Strict moze byc wysylany jako text/html, ale wtedy nie ma nic wspolnego z XHTMLem. Sek wtym, ze tak wyslany dokument jest przelatany przez przegladarki parserem SGML (HTML), a nie parserem XML/DOM. Czyli sprowadza sie jednak do tagzupy, mimo, ze rekomendacja teoretycznie dozwala.

Ja tam gdzie moge stosuje negocjacje MIME i wysylam prawidlowego XHTMLa przegladarkom ktore sobie z tym radza, a IE zupe bez prologu - ale czasem, tak jak Ty, trzeba sie zwrocic do nizszych standardow.

Dodaj swój komentarz

Dodaj komentarz

O mnie

Mateusz Papiernik

Mateusz Papiernik
Freelance web developer i miłośnik standardów sieciowych.

Kontakt

mati (at) maticomp.net
GG#: 1815766
XMPP: maticomp@gmail.com

Kategorie

Starsze wpisy

Przyjaciele

Własne

Współpracuję