to za sve razlike je fazon sa prvim match-om u xslt fajlu. dobijaju se slično-različiti rezultati kada menjaš
<xslt:template match="/">
i
<xslt:template match="rootElement">
(ova dva načina različito postavljaju tekuće mesto u hijerarhiji u odnosu na koju se relativno računaju ostale putanje..)
takođe, neke implementacije (pogrešno) tretiraju
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
kao početni nod, tako da to zajebe sve ostale testove u tvom primeru.. ovo se lako vidi ako dodaš da ispiše rezultat same node() funkcije
<xslt:value-of select="node()" />
i menjaš prvi match između "/" i "rootElement".
ali sve implementacije su sasglasne da poslednji uslov
treba da vrati false. naime, to ipak jeste po specifikacij, samo nema ko da čita :-PpP
Citat:
If one object to be compared is a node-set and the other is a string, then the comparison will be true if and only if there is a node in the node-set such that the result of performing the comparison on the string-value of the node and the other string is true.
http://www.w3.org/TR/xpath#booleans
znači, fazon je što si u tvojim primerima poredio nodove (ili setove nodova) sa funkcijom node() koja sama vraća set nodova..
osim u poslednjem slučaju gde je vraćena vrednost atributa a ne sam nod atibuta.
primer ovog pravila možeš videti i ako recimo u <e11> tag dodaš neki text (pa to postane text node koji ima string reprezentaciju)
Code:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="test.xslt"?>
<rootElement>
<e1 attr1="1" attr2="2">
<e11>BLAH</e11>
</e1>
<e2 attr3="3" />
</rootElement>
i ako pokreneš ovaj dokument (sa istim onim styleshitom) dobićeš false za pretposlednji test...
(btw, znam da,
tehnički, node() nije funkcija nego node test, ali kada se koristi ovako u poređenju, onda mi se čini da se ponaša više kao funkcija...)
ako je ova poruka imala imalo smisla nekome, svaka čast. ja sam je sam napisao, i sad je čitam par puta, ali mi nije sve najjasnije ;)