W nazwiązaniu do poprzedniego wpisu. W dokumencie o XPath pojawia się taki oto fragment:
[predykat]*]]>
Co ma oznaczać, że wyrażenie ścieżkowe XPath składa się z osi
i testu oraz opcjonalnego predykatu, który może być powtórzony
wielokrotnie (stąd *
).
Teraz standardowo szablony
XSL Docbook (aka XSLDB) zamieniają ww. fragment XML na coś takiego:
oś::test[[predykat]*]
Niezręczność polega na tym, że nawiasy kwadratowe raz są używane do
oznaczania części opcjonalnej a raz oznaczają, że należy je wstawić
literalnie. W XSLDB znaki wstawiane wokół
elementu optional
są sparametryzowane -- są to mianowicie:
arg.choice.opt.open.str
oraz
arg.choice.opt.close.str
.
Zamiast `[' i `]' zdecydowałem
się na U+27E8
(Mathematical left angle bracket) oraz U+27E9
(Mathematical right angle bracket) Teraz próba uruchomienia:
xsltproc --stringparam arg.choice.opt.open.str "⟨" \ --stringparam arg.choice.opt.close.str" select="⟩" ...
Kończy się błędem basha... Ciekawe czemu? Można podać ww. znaki binarnie -- wtedy wszystko działa. Ale UTF-8 w Makefile? Miałem opory, dodałem więc do arkusza uruchamiającego transformację XML → XHTML:
<xsl:param name="arg.choice.opt.open.str" select="'⟨'" /> <xsl:param name="arg.choice.opt.close.str" select="'⟩'" />
Teraz omawiany fragment wygląda mniej dwuznacznie:
oś::test⟨[predykat]*⟩
BTW w trybie nxml wpisanie ⟨
powoduje, że automagicznie
kształt znaku pojawia się za średnikiem (ale nie jest wstawiany do tekstu --
po prostu jest to podpowiedź Emacsa, jak wygląda kształt znaku.)
Dodatkowo po
najechaniu myszą na encję wyświetlana jest nazwa znaku (w oknie podpowiedzi zwanym tooltip).
Te ułatwienia są fajne w środowisku jednobajtowym--a ja póki co
używam jako domyślnego kodowania ISO-8859-2.
Przy okazji użyteczne zestawienie
znaków Unicode -- odpowiedników różnych TeXowych symboli matematycznych. Wystarczy zaznaczyć myszą
i wkleić do Emacsa a następnie C-x =
(what-cursor-position
)
wyświetli co zacz, w tym numer znaku.