lunedì 31 agosto 2015

XML con namespace

Nello standard XML è stato introdotto tempo fa il namespace, vediamo cosa è.
Un normale documento XML è un testo con dei tag, esempio:

<biblioteca>
  <libro>
     <titolo>Via col vento</titolo>
     <autore>Margaret Mitchell</autore>
     <proprietario>Mario</proprietario>
    </libro>
   <libro>
     <titolo>Pinocchio</titolo>
     <autore>Carlo Collodi</autore>
     <proprietario>Luigi</proprietario>
    </libro>
</biblioteca>


Il namespace è una complicazione, inutile, dello standard XML. Permette di aggiungere una proprietà dentro al tag. Ad esempio il proprietario invece di avere un suo tag, lo mettiamo dentro ad altri tag:

<biblioteca>
  <mario:libro>
     <mario:titolo>Via col vento</mario:titolo>
     <mario:autore>Margaret Mitchell</mario:autore>
    </mario:libro>
   <luigi:libro>
     <luigi:titolo>Pinocchio</luigi:titolo>
     <luigi:autore>Carlo Collodi</luigi:autore>
    </luigi:libro>
</biblioteca>


Livecode permette di importare i dati XML sia con i namespace, sia ignorandoli.
Per importare un XML senza namespace, facendolo diventare un array, basta usare il comando revCreateXMLTree, che crea questo array:

libro[1]
 libro[1]/titolo:  "Via col vento"
 libro[1]/autore:  "Margaret Mitchell"
 libro[1]/proprietario:  "Mario"
libro[2]
 libro[2]/titolo:  "Pinocchio"
 libro[2]/autore:  "Carlo Collodi"
 libro[2]/proprietario:  "Luigi"


mentre per averlo con i namespace bisogna usare revCreateXMLTreeWithNamespaces, che crea:

mario:libro[1]
 mario:libro[1]/mario:titolo:  "Via col vento"
 mario:libro[1]/mario:autore:  "Margaret Mitchell"
mario:libro[2]
 mario:libro[2]/mario:titolo:  "Pinocchio"
 mario:libro[2]/mario:autore:  "Carlo Collodi"


come vedete, potete gestire i namespace anche con livecode; ma io li sconsiglio, creano troppa confusione e obbligano a scrivere molto codice in più per interpretarli..