Kanonizace (informatika)
Kanonizace (anglicky canonicalization) je proces, kterým se v informatice data, která lze vyjádřit mnoha různými způsoby, převádějí na jednu zvolenou „základní“ reprezentaci. Například datum lze napsat mnoha způsoby – „17. dubna 2009“, „17. 4. 2009“, „2009-04-17“ atd. Po kanonizaci dat zadaných ve všech možných formátech se na výstupu používá jediný formát, např. rrrr-mm-dd. Cílem kanonizace (tzn. „převodu na kanonický tvar“) může být např. umožnění porovnávání: počítač by jen těžko poznal, že „17. dubna 2009“ je stejný údaj jako „2009-04-17“, proto se data nejprve převedou na kanonický tvar, který se teprve porovnává.
Využití
Kanonizace v matematice
Některé matematické objekty lze zapsat mnoha způsoby. Někdy však pro danou třídu objektů je možno definovat kanonický tvar, který splňuje dvě základní vlastnosti: Zaprvé, každý objekt musí mít právě jeden kanonický tvar. Zadruhé, každé dva objekty, které mají stejný kanonický tvar, musí být stejné (vzhledem k nějakéekvivalenci). To, že pro danou třídu objektů existuje kanonický tvar, může být zřejmé, někdy to však zřejmé není a existence kanonického tvaru je hlubokým matematickým výsledkem.
Příkladem kanonického tvaru je zápis polynomů, které se obvykle zapisují od vyšších mocnin k nižším. Např. kanonickým tvarem polynomu je .
Kanonizace a bezpečnost
Kanonizace může být důležitá pro počítačovou bezpečnost. Např. webový servermůže mít dovoleno poskytovat jen dokumenty z adresáře /veřejné/web. Co se ale stane, když ho někdo požádá o soubor /veřejné/web/../../tajné/účetnictví? Pokud server nejprve převede požadovanou cestu na kanonický tvar, zjistí, že je ve skutečnosti žádán o soubor /tajné/účetnictví, který pod dovolenou cestu nespadá, takže požadavek odmítne. Pokud by to však neudělal, chybně by zveřejňoval i tajné dokumenty. Taková chyba se označuje jako directory traversal.
Kanonizace v XML
Formát XML umožňuje velkou volnost, jeden dokument lze tedy zapsat mnoha různými způsoby, které se liší např. kódováním, používáním bílých znaků, pořadím atributů, definicí jmenných prostorů, formou zápisu prázdných elementů atd. Konsorcium W3C tedy definovalo tzv. kanonické XML, do kterého lze převést libovolný XML dokument. To, zda jsou dva XML dokumenty logicky ekvivalentní (na úrovni XML, bez ohledu na význam obsahu, který závisí na konkrétní aplikaci), pak lze zjistit přímým porovnáním jejich kanonizovaných podob na rovnost.
Kanonizace XML dokumentu spočívá v následujícím:[1]
· Dokument je převeden do kódování UTF-8 (pokud v něm již není).
· Všechny řádkové zlomy jsou kódovány znakem U+000A.
· Jsou normalizovány hodnoty atributů (jako při zpracování validujícím XML procesorem).
· Entity jsou nahrazeny svým obsahem.
· CDATA sekce jsou nahrazeny svým obsahem.
· Je odstraněna XML hlavička a definice typu dokumentu.
· Prázdné elementy jsou nahrazeny párem otevírací/uzavírací značka.
· Jsou normalizovány bílé znaky.
· Vyznačení hodnot atributů je sjednoceno na uvozovky.
· Speciální znaky v hodnotách atributů a textovém obsahu jsou nahrazeny entitami.
· Jsou odstraněny nadbytečné deklarace jmenných prostorů.
· Do každého elementu jsou přidány implicitní atributy.
· Zpracují se atributy xml:base.
· V každém elementu se abecedně seřadí deklarace jmenných prostorů a atributy.
Kanonizace na webu a v SEO
Na WWW mohou různé adresy vést na místo se stejným obsahem. Z hlediskainternetových vyhledávačů jsou však různé adresy interpretovány (a tedy i indexovány) jako různé stránky obsahující totéž, tedy duplicity. To se projevuje negativně ve výsledcích vyhledávání, proto se při optimalizaci dbá na to, aby k takové chybě nedocházelo, tedy aby se obsah nacházel pouze na jediné základní (kanonické) adrese, zatímco ostatní alternativy pouze na tuto základní adresu přesměrovávají (prostřednictvím HTTP kódu 301). Některé internetové vyhledávače se o základní kanonizaci pokoušejí automaticky.[2][3]
Příkladem takové chyby je dostupnost obsahu jak pod adresou začínající prefixemwww., tak bez něj, tedy např. http://www.example.com ×http://example.com. Mezi další možné příčiny této chyby patří:[4]
· URL s portem i bez něj (http://www.example.com:80 ×http://www.example.com)
· implicitní dokumenty (http://www.example.com/index.php ×http://www.example.com)
· koncové lomítko (http://www.example.com/obsah ×http://www.example.com/obsah/)
· velikost písmen (http://www.example.com/OBSAH ×http://www.example.com/obsah)
· různá organizace obsahu (http://example.com/blog ×http://blog.example.com)
· IP adresa místo doménového jména