C14n: cosa è la canonicalizzazione

Normalmente possiamo comparare facilmente file di testo per vedere se ci sono differenze (vedi file comparison tools) ma cosa accade quando abbiamo 2 file xml e vogliamo vedere se sono uguali in termini di contenuti ?

Se considerariamo un file xml come una lista di elementi e abbiamo 2 file con un ordine diverso degli elementi, non sono pure logicamente uguali ? non lo sono anche quando l’ordine degli attributi cambia ?

In questo contesto il W3c ha presentato 2 standards (algoritmi per trasformare XML) : XML-C14N del 2001 e XML-Exc-C14n del 2002, si parla infatti di Canonicalizzazione inclusiva ed esclusiva, la differenza sostanziale è che la canonicalizzazione esclusiva può prendere in considerazione anche solo parti di un documento xml in modo che siano indipendenti dall’elemento padre (e quindi entrano in gioco namespace e attributi ereditati).

Esempi di regole da quella inclusiva (prese dal primo documento):

  • The document is encoded in UTF-8
  • Line breaks normalized to #xA on input, before parsing
  • Attribute values are normalized, as if by a validating processor
  • Character and parsed entity references are replaced
  • CDATA sections are replaced with their character content
  • The XML declaration and document type declaration (DTD) are removed
  • Empty elements are converted to start-end tag pairs
  • Whitespace outside of the document element and within start and end tags is normalized
  • All whitespace in character content is retained (excluding characters removed during line feed normalization)
  • Attribute value delimiters are set to quotation marks (double quotes)
  • Special characters in attribute values and character content are replaced by character references
  • Superfluous namespace declarations are removed from each element
  • Default attributes are added to each element
  • Lexicographic order is imposed on the namespace declarations and attributes of each element

Potete vedere qualche esempio nel documento stesso.

Vi chiederete dove la canonicalizzazione viene usata in pratica. Nei web services sapete che i dati vengono trasmessi in formato XML, ebbene con le specifiche WS-Security del consorzio OASIS, con cui si cripta e firma un messaggio SOAP, la canonicalizzazione permette di garantire l’unicità della rappresentazione del file XML.

Una implementazione delle specifiche viene dalla Apache Foundation con WSS4j che prevede i 2 tipi di canonicalizzazione con la possibilità di includere o escludere i commenti nel file xml.

Principalmente gli autori della canonicalizzazione sono 3:

Non vi resta che augurarvi una buona lettura :-)

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s