Adresformaat per land is geen kwestie van vertaling. De volgorde van de elementen, de aanwezigheid van een postcode, het aantal administratieve lagen en de manier waarop een huisnummer zich tot een straat verhoudt, veranderen allemaal wanneer je een grens oversteekt, en een formulier dat rond de conventie van één land is ontworpen, wijst stilletjes geldige invoer uit de meeste andere af.
Deze gids zet de belangrijkste structurele verschillen uiteen, legt uit waarom de postcode het veld is dat het vaakst verkeerd wordt ontworpen, onderzoekt het compromis dat internationale formulieren gebruiken en wat het kost, en biedt een manier om een adres voor meerdere landen te modelleren dat werkelijk kan worden getest. Aan het einde zou je naar een adresformulier moeten kunnen kijken en voorspellen welke landen erin zullen falen.
Hoe verschilt de volgorde van de elementen?
De twee dominante conventies lopen in tegengestelde richtingen. Angelsaksische adressen worden van klein naar groot geschreven, met de naam van de ontvanger, het huisnummer en de straat, de plaats, het administratieve gebied en de postcode in die volgorde. Japanse adressen worden van groot naar klein geschreven, beginnend met de prefectuur, dan de gemeente, dan het district of de buurt, dan het blok, dan het gebouw en ten slotte het appartement.
Turkije en verscheidene van zijn buren volgen ook de richting van groot naar klein, met de provincie voorop en de buurt en straat daarachter. Latijns-Amerikaanse adressen zitten vaak tussen de twee in, met eerst de straat, dan het nummer, dan het district of de kolonie, dan de stad en de administratieve onderverdeling, met de postcode hetzij vóór of ná de stad, afhankelijk van het land.
Duitstalige landen zetten de postcode en de stad meestal op dezelfde regel met de postcode voorop, wat het omgekeerde is van de Amerikaanse schikking. Franse adressen plaatsen de postcode ook vóór de stad, en Nederlandse adressen doen dat eveneens. Wanneer een formulier één veld als stad labelt en verwacht dat de postcode apart staat, zal de weergavevolgorde die het produceert voor al die landen verkeerd zijn, zelfs als de onderliggende data correct is.
De praktische consequentie is dat het weergeven van adressen en het opslaan van adressen afzonderlijke zaken zouden moeten zijn. Sla de elementen in hun eigen velden op, en stel de weergavetekst samen volgens de conventie van het land op het moment van weergave. Een systeem dat een vooraf weergegeven enkele regel opslaat, heeft de volgorde al bepaald en kan niet van gedachten veranderen voor een andere bestemming.
Hoe ziet de postcode er in verschillende landen uit?
De postcode is het veld waar de grootste variatie zit, en het is het veld dat het vaakst als een vast patroon wordt gemodelleerd. De Verenigde Staten en Turkije gebruiken vijf cijfers. Duitsland, Frankrijk, Spanje, Italië en Mexico gebruiken ook vijf cijfers, maar de voorloopnullen zijn significant en een numerieke databasekolom zal ze stilletjes laten vallen. Het Verenigd Koninkrijk gebruikt een alfanumeriek formaat van variabele lengte met een spatie in het midden, en zowel de spatie als het gebruik van hoofd- en kleine letters doet ertoe voor het matchen.
Canada gebruikt een alfanumeriek formaat dat letters en cijfers afwisselt. Nederland gebruikt vier cijfers gevolgd door twee letters. Polen gebruikt vijf cijfers met een koppelteken na het tweede. Japan gebruikt zeven cijfers, meestal geschreven met een koppelteken na de eerste drie, en Brazilië gebruikt acht cijfers geschreven met een koppelteken na de eerste vijf. Ierland heeft een van de weinige werkelijk gemengde alfanumerieke systemen met een routeringssleutel.
Dan zijn er de landen zonder enige postcode. Verscheidene jurisdicties voeren geen landelijk systeem en sommige hebben er pas recent en onvolledig een ingevoerd. Een formulier dat het veld als verplicht markeert, zal elk adres uit die landen afwijzen, wat een fout is die een testsuite die alleen uit landen met postcodes is opgebouwd, nooit zal ontdekken. Het artikel over postcodeformaten per land verzamelt de patronen op één plek.
De opslagregel die hieruit volgt is eenvoudig: houd de postcode als tekst, nooit als getal. Voorloopnullen, letters en interne scheidingstekens breken allemaal een numerieke kolom, en het verlies is stil. Dezelfde regel geldt voor huisnummers en gebouwnummers in landen waar die waarden letters of schuine strepen dragen, want een veld dat voor de adressen van het ene land werkte, zal die van een ander stilletjes corrumperen.
Welke velden bestaan in sommige landen wel en in andere niet?
De veldenset zelf is landafhankelijk, wat een moeilijker probleem is dan volgorde of formaat. Sommige landen hebben een staat- of provincieniveau; sommige hebben verscheidene administratieve lagen; sommige hebben een buurt- of districtsniveau dat essentieel is voor bezorging; en sommige hebben niets daarvan.
Het administratieve niveau dat de meeste internationale formulieren weglaten, is het niveau dat het zwaarst weegt bij bezorging. In Turkije is dat het district en de buurt. In Japan is dat de gemeente en het blok. In veel Latijns-Amerikaanse landen is dat de kolonie of barrio. In Indonesië draagt het adres een dorp en een district onder de stad. Een internationaal formulier met stad, staat en postcode kan die adressen niet uitdrukken, en de getroffen gebruikers zullen het ontbrekende element ofwel in de adresregel zetten, waar het de data corrumpeert, ofwel het formulier verlaten.
Omgekeerd zijn sommige velden verplicht in het ene land en betekenisloos in het andere. Een staat is een verplicht veld in de Verenigde Staten, Australië en Canada, een optioneel veld in veel andere, en een begrip dat in een verdere groep niet bestaat. Als je sjabloon het voor alle landen als verplicht markeert, draagt elk adres uit een land zonder staten een verzonnen waarde in die kolom, en wordt elke latere analyse van de verdeling op staatsniveau fictie.
Het eerlijke ontwerp houdt één formulier met een veldconfiguratie per land. De configuratie zegt welke velden worden getoond, welke verplicht zijn, hoe ze worden gelabeld, welk patroon de postcode volgt, en welke waarden het administratieve veld mag aannemen. Die configuratie is data, en zoals elke data zou die land voor land moeten worden getest in plaats van aangenomen.
Wat is het compromis met de adresregel en wat kost het?
Het compromis met de adresregel is het patroon waarin elk adres ter wereld wordt afgeplat tot twee of drie generieke regels plus een stad, een regio en een postcode. Het bestaat omdat het de goedkoopste manier was om een internationaal formulier te laten werken, en het blijft bestaan omdat het duur is om te veranderen.
De kracht is dat het nooit een adres blokkeert. Alles kan in een vrije regel worden getypt, dus gebruikers worden nooit afgewezen omdat ze een formaat invoeren dat het formulier niet had voorzien. De zwakte is dat het een ongestructureerde tekenreeks opslaat waar een gestructureerde waarde nodig was, dus alles stroomafwaarts dat groepeert, valideert, routeert of dedupliceert op basis van geografie, moet tekst parseren. Er is ook een versieprobleem: wanneer landen hun administratieve onderverdelingen herzien, verbergt de afvlakking onder welke conventie een historische rij is geschreven, en wordt een naamsverandering in de ene provincie niet te onderscheiden van een typefout.
De kosten verschijnen later en op specifieke manieren. Adresnormalisatie wordt onbetrouwbaar omdat de parser moet raden welk token de stad is. Deduplicatie faalt omdat hetzelfde adres dat twee keer in verschillende volgordes is geschreven, op twee adressen lijkt. Belasting- en bezorglogica die van een postcode of een regio afhangt, kan helemaal niet lopen wanneer de waarde in een tekstregel begraven zit.
Er is een tweede kostenpost die makkelijk te missen is: het compromis verbergt zijn fouten. Een formulier met een vrije regel accepteert een adres zonder postcode uit een land dat er een vereist, en accepteert een postcode uit het verkeerde land, en meldt succes. Het artikel over het internationale adresformaat bespreekt het patroon diepgaander, en het artikel over grensoverschrijdende adresscenario’s bekijkt wat er gebeurt wanneer dezelfde persoon adressen in twee landen heeft.
Hoe moet een adresmodel voor meerdere landen worden ontworpen?
Begin met een landveld dat al het andere aanstuurt, en behandel elk ander veld als voorwaardelijk daarvan. Het land bepaalt welke velden verschijnen, welke verplicht zijn, welk patroon de postcode aanneemt, en uit welke lijst het administratieve veld put. Niets stroomafwaarts mag hardgecodeerd zijn op de regels van één land.
Houd de postcode als tekst met een normalisatiestap in plaats van een stap die alleen valideert. Normaliseren betekent de spaties en scheidingstekens verwijderen die je niet nodig hebt, naar hoofdletters omzetten waar de conventie van het land hoofdletters is, en voorloopnullen bewaren. Valideren betekent het patroon voor dat land controleren. Beide in die volgorde doen, voorkomt het afwijzen van invoer die correct maar anders geschreven is.
Modelleer de administratieve hiërarchie als geneste data in plaats van een platte lijst. De plaats hoort bij een regio, en in veel landen bij een verdere laag daartussen. De relaties opslaan in plaats van één enkel niveau betekent dat een nieuw land kan worden toegevoegd door rijen toe te voegen in plaats van code te wijzigen, en het maakt de consistentiecontroles uitdrukbaar als data.
Test het model daarna per land, niet per veld. Genereer voor elk ondersteund land een adres, toets dat het je eigen validator doorstaat, toets dat de regio en de postcode overeenstemmen, en toets dat de weergegeven volgorde overeenkomt met de conventie van het land. Een suite die de velden afzonderlijk test, zal slagen terwijl de combinaties verkeerd zijn, wat dezelfde faalwijze is die overal handmatig gebouwde adresdata treft.
Houd ten slotte een verslag bij van waarom elk land zo is geconfigureerd. Een postcodepatroon of een veldvereiste is een uitspraak over een land op een bepaald moment, en de volgende persoon die de configuratie aanraakt, moet weten van welke autoriteit de regel kwam. Het artikel met de checklist voor landdekking zet dat om in een reviewbare lijst.
Telefoon en adres horen in dezelfde test. Een record waarin het nummer de belcode van het ene land draagt en het adres in een ander land ligt, is een samenhangfout die een landbewust model kan detecteren, en het artikel over telefoonvoorvoegsel en plaatsmatching legt de relatie uit. De landentool op deze site toont de veldensets en conventies per land, en het artikel met de checklist voor landdekking beschrijft wat een onderhouden dataset voor elk daarvan hoort te bevatten.
Wat vereist een landbewuste testdataset?
Die vereist regels per land in plaats van één mondiale regel, en vereist dat die regels worden onderhouden. Postautoriteiten wijzigen formaten, administratieve onderverdelingen worden gecreëerd en samengevoegd, en postcodes worden herverdeeld. Een dataset die correct was toen hij werd samengesteld en nooit is vernieuwd, zal uiteindelijk afwijken van de autoriteit waaruit hij kwam.
Hij vereist ook herkomst. Weten uit welke bron de regels van elk land komen, is wat het mogelijk maakt ze te vernieuwen zonder te gokken, en het artikel over actualiteit en bronnen van landdata zet de bronnen uiteen die het bijhouden waard zijn. Een dataset zonder herkomst kan alleen in zijn geheel worden vervangen, en daarom worden veel ervan nooit vernieuwd.
Ten slotte vereist hij een duidelijke grens in de data zelf. Adressen die voor tests worden gegenereerd, zijn synthetische records met een correcte structuur en correcte interne relaties, en ze verwijzen naar geen enkel echt pand. Ze mogen niet worden gebruikt voor echte bezorging, om een woonplaats of een identiteit aan te tonen, om accounts te openen of te registreren, of om een verificatiestap te omzeilen die vraagt waar iemand werkelijk woont.