Sebastian Backstone'; // translator(s) and their affiliation - a elements allowed, but use double quotes for attributes $enVersion = '2007-08-29 12:27'; // date of the English original on which the translation is based (see last substantive change date at bottom of file) $additionalLinks = ''; ?> W3C I18N FAQ: Obsługa bidi - style CSS czy znaczniki?

FAQ: Obsługa bidi - style CSS czy znaczniki?

Czy w językach HTML i opartych na składni XML do poprawnego formatowania tekstu w algorytmie dwukierunkowym (bidi) Unicode należy stosować style CSS czy znaczniki?

W tekstach pisanych po arabsku lub hebrajsku zapis czytany jest przeważnie od prawej do lewej (RTL), pozostałe sposoby zapisu są odzyczytywane od lewej do prawej (LTR). Większość pracy algorytm Unicode bidi poświęca odpowiedniemu ukierunkowaniu tekstu, w oparciu o właściwości zastosowanych znaków. Niemniej musi też istnieć możliwość zaznaczenia:

Prezentujemy przykłady użycia tekstu w zapisie od prawej do lewej oraz jednocześnie w zapisie ASCII (agielski tekst zapisany jest małymi literami, a arabaski i hebrajski dużymi). Kolejność i pozycja znaków odwierciedla kolejność i pozycje oryginału.

Przykład:

Aby lepiej objaśnić trzeci punkt poniższy przykład przedstawia wynik, jaki można otrzymać opierając się wyłącznie na algorytmie dwukierunkowym. Wynik ten jest niepoprawny. Ponieważ cały cytat jest po hebrajsku, więc czyta się go od prawej do lewej, to tekst "W3C" oraz przecinek powinny pojawić się po lewej stronie (tzn. na końcu) tekstu hebrajskiego.

Tytuł po hebrajsku "פעילות הבינאום, W3C".

Wersja ASCII:
Tytuł po hebrajsku "YTIVITCA NOITAZILANOITANRETNI, w3c"

Poprawny rezultat powinien po wyświetleniu wyglądać tak:

Tytuł po hebrajsku "פעילות הבינאום, W3C".

Wersja ASCII:
Tytuł po hebrajsku "w3c ,YTIVITCA NOITAZILANOITANRETNI".

Język XHTML/HTML posiada znaczniki, które można stosować w takich przypadkach. Są to:

Znacznik Działania
dir atrybut Ustawia kierunek zapisu dla elementu, do którego jest dołączony oraz dalszch elementów. Możliwe wartości atrybutu to: rtl oraz ltr.
bdo element Umożliwia obejście ukierunkowania tekstu określonego przez algorytm bidi Unicode.

Możliwości obsługi ukierunkowania tekstu w CSS:

Właściwość Wartości Działanie
unicode-bidi embed Tekst przyjmie ukierunkowanie określone przez właściwość direction.
bidi-override W tekście nastąpi obejście algorytmu bidi Unicode zgodnie z wartością wskazaną przez właściwość direction.
direction ltr Kierunek tekstu określanego przez właściwość unicode-bidi ustawiony zostaje na LTR.
rtl Kierunek tekstu określanego przez właściwość unicode-bidi ustawiony zostaje na RTL.

Należy zadać sobie pytanie czy powinno się stosować znaczniki lub style CSS do określania kierunku tekstu w języku HTML oraz w językach opartych na składni XML.

Jeżeli tylko jest to możliwe, w opisie zawartości należy stosować dedykowane znaczniki bidi. Style CSS mogą, choć nie muszą, być wtedy wymagane do opisania znacznika. Wszystko zależy od tego, czy pracuje się nad zawartością obsługiwaną przez agenta użytkownika taką jak kod HTML lub XML. (Uwaga: XHTML może być obsługiwany jako obydwa!)

Zawsze należy pamiętać, że ani znaczniki ani style CSS nie powinne być stosowane bez powodu. Zadane wcześniej pytanie odnosi się do sytuacji, w których algorytm bidi Unicode jest niewystarczający, lub ukierunkowania nie można ustawić za pomocą właściwości ‎ i ‏.

Przyjżyjmy się temu problemowi dokładniej.

Stosowanie dedykowanych znaczników

Ponieważ kierunek tekstu stanowi integralny element struktury dokumentu, do określenia kierunku tekstu w całym dokumencie lub jego fragmencie, a także do identyfikacji miejsc w tekście, w których dwukierunkowy algorytm Unicode jest niewystarczający do uzyskania oczekiwanych rezultatów należy stosować znaczniki.

Niektórzy ludzie, aby uzyskać oczekiwany kierunek tekstu z prawej do lewej lub jego dwukierunkowość, stosują po prostu style CSS do każdego akapitu lub wcięcia tekstu zawierających dany tekst. Jednak style określone przez CSS nie są stałe. Można je obejść, wyłączyć, zmienić/zamienić w różnych kontekstach, a nawet mogą zostać całkowicie nierozpoznane. Chociaż znaczniki bidi wymagane są tylko przy wyświetlaniu graficznym tekstu, to nie pełnią one jedynie funkcji dekoracyjnej. Znaczniki pozostają na stałe zintegrowane z zawartością dokumentu. Dodatkowo stosowanie dedykowanych znaczników bidi pozwala na uzyskanie większej czytelności zawartości.

Należy zatem stosować dedykowane znaczniki bidi tam, gdzie jest to możliwe. Błedem jest uzyskiwanie oczekiwanych rezultatów poprzez zwykłe przypisanie stylów CSS do wybranych elementów.

Warto zauważyć, że zakładamy tu, iż dokumenty napisane w językach znacznikowych zawsze odwołują się do znaczników dedykowanych specjalnie do obslugi tekstu w zmiennych kierunkach zapisu. Osoby stosujące DTD lub Schema mogą śmiało dodawać elementy i atrybuty z tym związane.

HTML lub XHTML obsługiwane jako text/html

Należy stosować wyłącnie znaczniki. Rekomendacja CSS2 zaleca użycie znaczników do formatowania tekstu bidi w dokumentach HTML. W rzeczywistości można nawet powiedzieć, że zgodny ze standardami agent użytkownika HTML może zignorować właściwości bidi stylów CSS. Dzieje się tak, ponieważ specyfikacja HTML wyraźnie określa oczekiwane zachowania agenta użytkownika związane ze znacznikami bidi.

XHTML obsługiwany jakoapplication/xhtml+xml

XHTML 1.0 obsługiwany jako application/xhtml+xml powinien wykorzystywać tą samą semantykę co HTML. Sensowne jest więc stosowanie wyłącznie znaczników i nie używanie stylów CSS.

Ogólna składnie XML i XHTML obsługiwana jako application/xml lub text/xml

Zazwyczaj agent użytkownika nie będzie w stanie automatycznie rozpoznać ani przetworzyć jakiegokolwiek znacznika bidi użytego w dokumentach XML. Do określenia oczekiwanego formatowania tekstu w dokumencie należy więc zastosować właściwości stylów CSS.

Style CSS powinny jednak zawsze być połączone z dedykowanymi znacznikami bidi w tekście.

XHTML obsługiwany jako application/xml lub text/xml jest przez agenta użytkownika traktowany jako XML a nie HTML.

Poniższy przykład pokazuje dlaczego style CSS powinno się wykorzystać przy zbiorze znaczników dostępnych w XHTML:

*[dir="ltr"] { direction: ltr; unicode-bidi: embed }

*[dir="rtl"] { direction: rtl; unicode-bidi: embed }

bdo[dir="ltr"] { direction: ltr; unicode-bidi: bidi-override }

bdo[dir="rtl"] { direction: rtl; unicode-bidi: bidi-override }

W językach XHTML/HTML i zapewne innych językach opartych na składni XML mogą zdarzyć się sytuacje, w których tekst pojawia się w obrębie atrybutu lub elementu obsługującego wyłącznie dane w postaci znaków. Do modyfikowania kierunku tekstu atrybutu lub lub części tekstu w elemencie obsługującym wyłącznie dane w postaci znaków nie można wykorzystywać ani znaczników ani stylów CSS. W takich przypadkach należy zastosować kody kierunkowego foramtowanie Unicode. (Patrz FAQ (X)HTML & bidi formatting codes vs. markup)

W językach opartych na składni XML style bidi powinny być zdefiniowane w oddzielnym arkuszy stylów, a sam arkusz należy dołączycdo innych arkuszy stylów w dokumencie. Upraszcza to późniejsze prace nad arkuszami i podkreśla różnicę pomiędzy bidi a innymi stylami. Dobrze jest myśleć o arkuszu stylów bidi jako o części schematu informacji, który definiuje znaczenie konkretnych znaczników bidi, a nie pełni tylko funkcję dekoracji, które mogą istnieć w wielu różnych wariantach.