Nodo corrente e nodo Contesto in XSLT / XPath?

In XSLT, qual è la differenza tra “nodo corrente” e “nodo contesto”? Puoi trovare entrambi i termini usati qui: http://www.w3.org/TR/xslt .

Quando useresti l’una o l’altra? Come ti riferisci a ciascuno?

Il nodo corrente è qualunque sia il modello al momento operativo. Normalmente questo accade anche al nodo contesto, ma il nodo contesto ha un significato speciale all’interno di un’espressione XPath annidata (la parte tra parentesi quadre). Lì, si riferisce a qualsiasi nodo viene attualmente testato per una corrispondenza. Quindi, il nodo di contesto cambia all’interno dell’espressione XPath, ma non il nodo corrente.

Il nodo di contesto può essere abbreviato con un punto ( . ) O talvolta escluso completamente. Questo è probabilmente un po ‘di confusione, perché al di fuori di un’espressione annidata, un punto indica il nodo corrente. (In questo caso il nodo corrente sembra essere il nodo di contesto, quindi si potrebbe dire che è il nodo corrente solo in modo approssimato, ed è più propriamente chiamato il nodo di contesto. Ma anche la specifica lo chiama il nodo corrente qui.)

Dato che un punto fornisce il nodo di contesto, in un’espressione XPath nidificata l’utente ha bisogno di un modo per fare riferimento al nodo corrente, quello che viene elaborato dal modello corrente. Puoi farlo tramite la funzione current() .

Distinguere questi due è utile in alcuni casi. Ad esempio, supponiamo di avere un codice XML come questo:

   foo bar   baz aak   eep blech  Batteries not included. Some assembly required.  

Ora supponiamo di volerlo convertire in LaTeX in questo modo:

 foo\footnote{Batteries not included.} bar baz aak\footnote{Some assembly required.} eep blech\footnotemark[2] 

Il trucco è sapere se una nota a piè di pagina è già stata usata o meno. Se è la prima volta che incontri la nota a piè di pagina, vuoi scrivere un comando \footnote ; altrimenti vuoi scrivere un comando \footnotemark . Potresti usare il codice XSL in questo modo:

  \footnote{...} \footnotemark[...]  

Qui stiamo confrontando l’attributo fn nodo di contesto (dai risultati del preceding::* set di nodes) all’attributo fn nodo corrente. (In realtà non devi dire ./@fn , potresti solo dire @fn .)

Quindi, in breve, il nodo di contesto ti lascia all’interno del predicato XPath; il nodo corrente raggiunge all’esterno del predicato, di nuovo al nodo in elaborazione dal modello corrente.

Nodo di contesto

Il nodo di contesto è parte del contesto di valutazione XPath e varia in base a ogni passo di posizione :

 step1 / step2 / step3 / ... 

dove ogni step è

 axis::node-test[predicate] 
  • Ogni passaggio viene valutato rispetto ai nodes di contesto impostati dai passaggi precedenti .
  • Ogni passaggio seleziona quindi i nodes che diventano il nodo di contesto per i seguenti passaggi.
  • Quando si valuta il predicate , il nodo di contesto è il nodo lungo l’ axis che ha superato il node-test .
  • È ansible accedere al nodo di contesto come . .

Nodo corrente

Il nodo corrente () fa parte del modello di elaborazione XSLT : 1

  • Il nodo corrente è il nodo nel documento XML di origine che meglio corrisponde a un modello XSLT.
  • Il nodo corrente diventa il nodo di contesto iniziale per ogni espressione XPath nel modello con corrispondenza.
  • È ansible accedere al nodo corrente come current() nei predicati XPath.

1 Sebbene insignificante per comprendere la differenza fondamentale tra nodo di contesto e nodo corrente, si noti che in XSLT 2.0 la descrizione del contesto di valutazione è stata modificata. I concetti di nodo corrente e elenco di nodes corrente sono stati sostituiti dai concetti XPath di elemento di contesto , posizione del contesto e dimensione del contesto.