Gettiamo la “anchor”

I cosiddetti anchors sono link che indirizzano a parti diverse di una singola pagina, non a una pagina diversa.
Facciamo un esmpio pratico partendo dalla pagina di analisi dei teaser di TNG su HyperTrek: https://hypertrek.info/index.php/tngteaser
Prendiamo il link

1
<a href="/index.php/terminologia#teaser" target="_top">teaser</a>

Questo punta alla pagina Terminologia direttamente alla posizione identificata da

1
<a name="teaser"></a>Parte

Come vedete la proprietà href punta all’ancora con il simbolo # mentre la definizione è fatta nel tag  tramite la proprietà name.

Purtroppo questo metodo non può essere usato in MediaWiki, come spiegato dettagliatamente qui.
Lo stesso meccanismo però può essere applicato tramite la proprietà id che può essere applicata a una grande varietà di tag. In questo caso particolare, usiamo un tag inline, ovvero l’utilissimo .

Ecco quindi che alla pagina https://wikitrek.org/index.php/Teaser troviamo un link molto simile a quello originale di HT

1
<a title="Terminologia" href="/index.php/Terminologia#teaser">teaser</a>

Mentre la ancora nella pagina di destinazione è molto diversa:

1
<span id="teaser">Parte</span>

Ma il risultato è il medesimo.

Sotto il cofano questa modifica è effettuata usando una combinazione di regular expressions insieme allo HTML Agility Pack.

Astronavi regolari

Nella migrazione delle schede delle Astronavi da HyperTrek una delle sfide è stata esportare la maggior parte delle informazioni da poter categorizzare in forma breve nel relativo infobox.

Molti dei dati possono essere estratti dalle sezioni come potete vedere dallo screenshot qui sotto

sezioniastro.PNG

altre invece devono essere estratte in qualche modo dai dati esistenti.

Oggi mi sono dedicato a uno di queste estrazioni perchè volevo poter categorizzare la nave per il suo tiponumero di registro: nell’esempio della USS Odyssey qui sopra, volevo essere in grado di determinare che il suo registro di flotta fosse lo NCC (il registro standard delle navi di serie della Flotta Stellare) e che il relativo numero di registro fosse 71832.

Per estrarre queste informazioni ho usato le regular expression – già trattate in altra sede – per risparmiare codice e tempo nella scrittura.

Il pattern sottostante la RegEx è il seguente:

1
/(ncc|nx)\D?(\d*) /gi

la cui spiegazione è semplice:

  • (ncc|nx)
    trova il gruppo di testo che inizia per NCC o NX
  • \D?
    trova un singolo carattere non numerico, di conseguenza identifica un eventuale spazio o trattino che separi la sigla dal numero
  • (\d*)
    trova una stringa di cifre di lunghezza arbitraria
  • /gi
    il modificatore Global restituisce tutti i matches senza fermarsi al primo
    il modificatore Insensitive ignora maiuscole e minuscole

Con poche righe di codice questa regex permette di estrarre le sigle NX o NCC e il relativo numero per l’inserimento nell’InfoBox:

sezioniastrowiki.PNG

Un esempio funzionante è disponibile su RegEx101 all’indirizzo https://regex101.com/r/2omAw3