Selektory#
Uchwyty API#
Aby ułatwić pisanie specyfikacji używających koncepcji Selektorów najnowszy moduł definiuje kilka uchwytów API (API hooks), które mogą być wywoływane z poziomu innych specyfikacji.
Parsowanie selektora#
Algorytm określa w jaki sposób parsować selektor # (parse a selector) z łańcucha znakowego source. Zwracanym wynikiem będzie lista selektorów kompleksowych lub błąd.
- Niech selektor będzie wynikiem parsowania source względem gramatyki
complex_selector_list
. Jeśli gramatyka nie zostanie zachowana to zwróć błąd. - W przeciwnym razie, jeśli jakieś selektory proste w selector nie są rozpoznawane przez aplikację kliencką, lub selector jest nieprawidłowy w jakiś inny sposób (np. zawiera niezadeklarowany prefiks przestrzeni nazw), to zwróć błąd.
- W przeciwnym razie zwróć selector.
Parsowanie selektora relatywnego#
Algorytm określa w jaki sposób parsować selektor relatywny # (parse a relative selector) z łańcucha znakowego source, w oparciu o zestaw elementów referencyjnych refs. Zestaw elementów referencyjnych musi zawierać zero lub więcej elementów, lub pojedynczy wirtualny korzeń zawężający, jak np. obiekt typu Document
lub DocumentFragment
. Zwracanym wynikiem będzie lista selektorów kompleksowych lub błąd.
- Niech selektor będzie wynikiem parsowania source względem gramatyki
complex_selector_list
. Jeśli gramatyka nie zostanie zachowana to zwróć błąd. - W przeciwnym razie, jeśli jakieś selektory proste w selector nie są rozpoznawane przez aplikację kliencką, lub selector jest nieprawidłowy w jakiś inny sposób (np. zawiera niezadeklarowany prefiks przestrzeni nazw), to zwróć błąd.
- W przeciwnym razie absolutyzuj selektor z zestawem elementów referencyjnych w postaci refs.
- W przeciwnym razie zwróć selector.
Dopasowanie selektora#
Algorytm określa w jaki sposób dopasować selektor # (match a selector) selector względem drzewa węzłów nodes. Opcjonalnie może być przekazany korzeń zawężający i metoda zawężenia (obejmujące zawężenie lub filtrujące zawężenie). Opcjonalnie może być przekazany wyraźny zestaw elementów referencyjnych element set (również pusty). Zwracanym wynikiem będzie lista z zerem lub większą liczbą elementów.
Jeśli wyraźny zestaw elementów referencyjnych został przekazany, to poniższy algorytm może zostać wywołany bez parametru drzewa węzłów. Drzewo węzłów będzie ustalane w oparciu o każdy element w zestawie; dzięki temu łatwiej wywołać algorytm dla selektora relatywnego.
- Jeśli wyraźny zestaw elementów referencyjnych nie został przekazany, to zwróć wynik dopasowywania selector względem node, z korzeniem zawężającym i metodą zawężającą, jeśli zostały przekazane.
- W przeciwnym razie niech result będzie pustą listą.
Dla każdego (for each) elementu reference element w element set:
- Jeśli nodes nie został przekazany, to niech nodes będzie wszystkimi węzłami z tego samego drzewa, co reference element.
- Niech single result będzie wynikiem dopasowywania selector względem nodes, z korzeniem zawężającym i metodą zawężającą, jeśli zostały przekazane, oraz zestawem elementów referencyjnych jako reference element.
- Dodaj każdy element z single result do result, chyba że element jest już obecny w result.
- Zwróć result.