Kanonisering

Inom datavetenskap är kanonisering (ibland standardisering eller normalisering ) en process för att konvertera data som har mer än en möjlig representation till en "standard", "normal" eller kanonisk form . Detta kan göras för att jämföra olika representationer för ekvivalens, för att räkna antalet distinkta datastrukturer, för att förbättra effektiviteten hos olika algoritmer genom att eliminera upprepade beräkningar, eller för att göra det möjligt att införa en meningsfull sorteringsordning .

Användningsfall

Filnamn

Filer i filsystem kan i de flesta fall nås via flera filnamn . Till exempel i Unix- liknande system kan strängen " /./ " ersättas med " / ". I C standardbiblioteket utför funktionen realpath() denna uppgift. Andra operationer som utförs av den här funktionen för att kanonisera filnamn är hanteringen av /..-komponenter som hänvisar till överordnade kataloger, förenkling av sekvenser av flera snedstreck, borttagning av efterföljande snedstreck och upplösning av symboliska länkar .

Kanonisering av filnamn är viktigt för datorsäkerheten. Till exempel kan en webbserver ha en begränsning att endast filer under cgi-katalogen C:\inetpub\wwwroot\cgi-bin får köras. Denna regel upprätthålls genom att kontrollera att sökvägen börjar med C:\inetpub\wwwroot\cgi-bin\ och först därefter exekvera den. Medan filen C:\inetpub\wwwroot\cgi-bin\..\..\..\Windows\System32\cmd.exe från början verkar vara i cgi-katalogen, utnyttjar den ..- sökvägsspecifikationen för att backa upp kataloghierarkin i ett försök att exekvera en fil utanför cgi-bin . Att tillåta cmd.exe att köras skulle vara ett fel som orsakats av ett misslyckande med att kanonisera filnamnet till den enklaste representationen, C:\Windows\System32\cmd.exe, och kallas en katalogövergångssårbarhet . Med sökvägen kanoniserad är det tydligt att filen inte ska köras.

Unicode

I Unicode kan många bokstäver med accent representeras på mer än ett sätt. Till exempel é representeras i Unicode som Unicode-tecknet U+0065 (LATIN LITEN BOKSTAV E) följt av tecknet U+0301 (KOMBINERAR AKUT ACCENT), men det kan också representeras som det förkomponerade tecknet U+00E9 (LATIN LITEN BOKSTAV E MED AKUT). Detta gör strängjämförelse mer komplicerad, eftersom varje möjlig representation av en sträng som innehåller sådana glyfer måste beaktas. För att hantera detta tillhandahåller Unicode mekanismen för kanonisk ekvivalens . I detta sammanhang är kanonisering Unicode-normalisering .

Kodningar med variabel bredd i Unicode-standarden, särskilt UTF-8 , kan orsaka ett ytterligare behov av kanonisering i vissa situationer. I UTF-8 finns det nämligen bara en giltig bytesekvens för varje Unicode-tecken, men vissa bytesekvenser är ogiltiga, dvs kan inte erhållas genom att koda någon sträng av Unicode-tecken i UTF-8. Vissa slarviga avkodarimplementeringar kan acceptera ogiltiga bytesekvenser som indata och producera ett giltigt Unicode-tecken som utdata för en sådan sekvens. Om man använder en sådan avkodare har vissa Unicode-tecken faktiskt mer än en motsvarande bytesekvens: den giltiga och några ogiltiga. Detta kan leda till säkerhetsproblem som liknar det som beskrivs i föregående avsnitt. Därför, om man vill tillämpa något filter (t.ex. ett reguljärt uttryck skrivet i UTF-8) på UTF-8-strängar som senare kommer att skickas till en avkodare som tillåter ogiltiga bytesekvenser, bör man kanonisera strängarna innan de skickas till filtret . I detta sammanhang är kanonisering processen att översätta varje strängtecken till dess enda giltiga bytesekvens. Ett alternativ till kanonisering är att avvisa alla strängar som innehåller ogiltiga bytesekvenser.

URL

En kanonisk URL är en URL för att definiera den enda sanningskällan för duplicerat innehåll .

Använd av Google

En kanonisk URL är webbadressen till sidan som Google tror är mest representativ från en uppsättning dubbletter av sidor på din webbplats. Om du till exempel har webbadresser för samma sida (till exempel https://example.com/?dress=1234 och https://example.com/dresses/1234 ), väljer Google en som kanonisk. Observera att sidorna inte behöver vara helt identiska; mindre ändringar i sortering eller filtrering av listsidor gör inte sidan unik (till exempel sortering efter pris eller filtrering efter artikelfärg).

Den kanoniska kan vara i en annan domän än en dubblett.

Internet

Med hjälp av kanoniska webbadresser vet en sökmotor vilken länk som ska ges i ett frågeresultat.

Ett kanoniskt länkelement kan vänjas för att definiera en kanonisk URL.

Intranät

I intranät är manuell informationssökning övervägande. I det här fallet kan kanoniska webbadresser också definieras i en icke maskinläsbar form. Till exempel i en riktlinje .

Övrigt

Kanoniska webbadresser är vanligtvis de webbadresser som används för delningsåtgärden.

Eftersom den kanoniska webbadressen används i sökmotorernas sökresultat är de i de flesta fall en målsida .

Sökmotorer och SEO

I webbsökning och sökmotoroptimering (SEO) handlar URL-kanonisering om webbinnehåll som har mer än en möjlig URL. Att ha flera webbadresser för samma webbinnehåll kan orsaka problem för sökmotorer - särskilt när det gäller att avgöra vilken webbadress som ska visas i sökresultaten. De flesta sökmotorer stöder det kanoniska länkelementet som en ledtråd till vilken URL som ska behandlas som den sanna versionen. Som indikerat av John Mueller från Google kan att ha andra direktiv på en sida, som robots noindex -elementet, ge sökmotorer motstridiga signaler om hur man hanterar kanonisering

Exempel:

Alla dessa webbadresser pekar till Wikipedias hemsida, men en sökmotor kommer bara att betrakta en av dem som webbadressens kanoniska form.

XML

Ett kanoniskt XML- dokument är per definition ett XML-dokument som är i kanonisk XML-form, definierat av den kanoniska XML-specifikationen . Kortfattat tar kanonisering bort blanksteg i taggar, använder speciella teckenkodningar, sorterar namnområdesreferenser och eliminerar redundanta sådana, tar bort XML- och DOCTYPE-deklarationer och omvandlar relativa URI:er till absoluta URI:er.

Ett enkelt exempel skulle vara följande två utdrag av XML:

  1. <node1 x='1' a="1" a="2"><i>Data</i> <b>Data</b></node1    ><node2> <i>Data</i> <b>Data</b></node2>
  2. <node1 a="2" x="1"><i>Data</i> <b>Data</b></node1><node2> <i>Data</i> <b>Data</b></node2>

Det första exemplet innehåller extra mellanslag i den första nodens avslutande tag. Det andra exemplet, som har kanoniserats, har fått dessa utrymmen borttagna. Observera att endast mellanslagen i taggarna tas bort under W3C-kanonisering, inte de mellan taggarna.

En fullständig sammanfattning av kanoniseringsändringar listas nedan:

  • Dokumentet är kodat i UTF-8
  • Radbrytningar normaliserade till #xA vid inmatning, före analys
  • Attributvärden normaliseras, som av en validerande processor
  • Tecken- och tolkade entitetsreferenser ersätts
  • CDATA-sektioner ersätts med deras karaktärsinnehåll
  • XML-deklarationen och dokumenttypsdeklarationen tas bort
  • Tomma element konverteras till start-slut-taggpar
  • Whitespace utanför dokumentelementet och inom start- och sluttaggar normaliseras
  • Allt blanksteg i teckeninnehållet behålls (exklusive tecken som tagits bort under normalisering av radmatning)
  • Attributvärdeavgränsare är inställda på citattecken (dubbla citattecken)
  • Specialtecken i attributvärden och teckeninnehåll ersätts av teckenreferenser
  • Överflödiga namnområdesdeklarationer tas bort från varje element
  • Standardattribut läggs till varje element
  • Fixering av xml:base -attribut utförs
  • Lexikografisk ordning åläggs namnutrymmesdeklarationer och attribut för varje element

Beräkningslingvistik

Inom morfologi och lexikografi är ett lemma den kanoniska formen av en uppsättning ord . På engelska är till exempel run , runs , ran och running former av samma lexem , så vi kan välja en av dem; ex. kör , för att representera alla former. Lexikala databaser som Unitex använder denna typ av representation.

Lemmatisering är processen att omvandla ett ord till dess kanoniska form .

Se även

externa länkar