Oddělovač
Author
Albert FloresVýřez ze souboru ve formátu CSV. Čárky (vyznačené červeně) se používají jako oddělovače polí. Oddělovač nebo separátor je znak nebo posloupnost znaků sloužící pro zadání hranice mezi zvláštními, nezávislými oblastmi v prostém textu nebo v jiných datových proudech. Příkladem oddělovače je znak čárka, který se používá jako oddělovač polí ve formátu CSV (hodnoty oddělené čárkami). Jiným příkladem oddělovače je časová prodleva používaná pro oddělování písmen a slov v Morseově abecedě.
Oddělovače jsou jedním z mnoha prostředků pro zadání hranic v datovém proudu. Jinou metodou je deklarativní notace, ve které je na začátku datového proudu uvedeno, kolik znaků proud obsahuje.
Rozdělení oddělovačů
Oddělovače lze rozdělit na:
* oddělovače polí a záznamů * párové (závorkové) oddělovače
Oddělovače polí a záznamů
Oddělovače polí oddělují jednotlivá datová pole; oddělovače záznamů oddělují skupiny polí.
Například formát CSV používá čárky jako oddělovače polí a znaky konce řádku jako oddělovače mezi záznamy. Například:
jméno,příjmení,věk,plat nancy,davolio,33,$30000 erin,borakova,28,$25250 tony,raphael,35,$28700
je jednoduchá tabulka ve formátu CSV v databázi tvořené obyčejnými soubory.
Párové oddělovače
Párové oddělovače (také závorkové oddělovače, blokové oddělovače nebo oddělovače oblastí) označují začátek i konec oblasti textu.
Mezi závorkové oddělovače patří:
Oddělovače | Popis |
---|---|
( a ) | Kulaté závorky. |
{ a } | Složené závorky. +more |
[ a ] | Hranaté závorky (často používané pro vyznačení dolního indexu) |
< a > | Špičaté závorky. |
" a " | Často používané pro řetězcové literály. |
' a ' | Často používané pro znakové literály. |
a . > | Používané pro XML nebo SGML instrukce pro zpracování. |
/* a */ | Používané v některých programovacích jazycích pro komentáře. |
a %> | Používané v některých WWW šablonách pro zadání hranic jazyků. Jsou také nazývány šablonové oddělovače. |
Pro vyznačení pořadí vyhodnocování se v počítačových jazycích používají na rozdíl od matematiky pouze kulaté závorky. Programovací jazyk Lisp se vyznačuje používáním velkého množství závorek.
Konvence
Používání určitých oddělovačů na počítačových platformách je dáno konvencí. Následující tabulky ukazují pouze několik příkladů pro porovnání.
Programovací jazyky
Znakový literál | Řetězcový literál | Oddělovač příkazů | |
---|---|---|---|
Pascal | apostrof | apostrof | středník |
C | apostrof | uvozovky | středník |
Oddělovače záznamů a polí
Konec pole | Konec záznamu | Konec souboru | |
---|---|---|---|
Unix, Mac OS X, Amiga OS | Tab | LF | žádný |
Windows, MS-DOS, OS/2, CP/M | Tab | CRLF | Control-Z |
Classic Mac OS, AppleDOS, ProDOS, GS/OS | Tab | CR | žádný |
ASCII/Unicode | UNIT SEPARATOR Pozice 31 (U+001F) | RECORD SEPARATOR Pozice 30 (U+001E) | FILE SEPARATOR Pozice 28 (U+001C) |
Viz též ASCII, řídicí znak.
Kolize oddělovačů
Pokud samotná data obsahují znaky nebo posloupnosti používané jako oddělovače, dochází k jevu nazývanému kolize oddělovačů. U XML, HTML a SGML může dojít ke kolizi oddělovačů, pokud text obsahuje znaky špičaté závorky. +more U většiny typů souborů existují jak oddělovače polí tak oddělovače záznamů, a obojí může způsobit kolizi. V případě CSV souborů dojde ke kolizi, pokud položka obsahuje čárku (například mzda = "$30,000"), a ke kolizi oddělovačů záznamů dojde, pokud nějaké pole obsahuje více řádků. Kolize oddělovačů záznamů i polí se často objevuje v textových souborech.
Kolize oddělovačů mohou způsobit zranitelnost systémů, protože mohou být zneužity k exploitům. Zneužití kolizí oddělovačů v jazycích SQL a HTML jsou známy jako útoky SQL injection nebo cross-site scripting.
Řešení
Protože kolize oddělovačů představují závažný problém, byly vyvinuty různé metody, jak jim zabránit. Někteří autoři se snaží vybírat oddělovače, které se v datovém proudu samotném nemohou objevit. +more Použití tohoto ad hoc přístupu nenabízí žádnou bezpečnost proti úmyslným kolizím. Proto se používají formal konvence jsou proto použitý také.
ASCII delimited text
Znakové sady ASCII a Unicode obsahují netisknutelné znaky s kódy 28 až 31, které jsou určeny pro použití jako oddělovače:
Kód | Jméno v Unicode | Obvyklé jméno | Použití |
---|---|---|---|
28 | INFORMATION SEPARATOR FOUR | Oddělovač souborů (FS) | Konec souboru, nebo pro zřetězení dat, která by jinak mohla být zvláštními soubory. |
29 | INFORMATION SEPARATOR THREE | Oddělovač skupin (GS) | Mezi části dat. +more Nejsou potřebné v jednoduchých datových souborech. |
30 | INFORMATION SEPARATOR TWO | Oddělovač záznamů (RS) | Konec záznam nebo řádku. |
31 | INFORMATION SEPARATOR ONE | Oddělovač jednotek (US) | Mezi poli záznamu nebo prvky na řádku. |
Použití znaku ASCII 31 Oddělovač jednotek jako oddělovače polí a ASCII 30 Oddělovač záznamů řeší problém oddělovačů polí i záznamů, které se vyskytují v textových datových proudech.
Použití únikových znaků
Jednou z metod pro zamezení kolizím oddělovačů je používání únikových znaků . Používání escape znaků je dostačující z perspektivy návrhu jazyka, ale přinášejí různé nevýhody:
* text plný escape znaků je těžko čitelný, problém označovaný jako (kvůli používání znaku \ pro escape / v regulárních výrazech v Perlu, což vede k posloupnostem jako je "\/\/"); * text je obtížně analyzovatelný pomocí regulárních výrazů * je třeba mechanismus pro „escapování escape znaků“, které nemají sloužit jako únikové znaky * přestože je lze snadno zapsat, mohou být nesrozumitelné pro osoby neobeznámené s jazykem. * nechrání před code injection útoky
Escape posloupnosti
Escape posloupnosti jsou podobné escape znakům, ale obvykle nejsou tvořeny jediným znakem, ale nějakou mnemonickou posloupností. Jedno použití je v řetězcových literálech, které zahrnuje znak uvozovky ("). +more Například následující kód v jazyce Perl:.
print "Nancy zvolala \x22Ahoj!\x22 do davu."; ### použití \x22
produkuje stejný výstup jako:
print "Nancy zvolala \"Ahoj!\" do davu."; ### použití escape znaku
Nevýhodou escape posloupností je, že pokud je používají lidé, musí si pamatovat kódy, které reprezentují jednotlivé znaky (viz také: HTML entita, numerický znak reference).
Dvojí uvozovky
V porovnání s escape posloupnostmi a escape znaky poskytuje dvojí uvozovky ještě další způsob, aby se zabránilo kolizi oddělovačů. Příkladem jsou jazyky, které umožňují jako omezovač řetězců používat jednoduchý apostrof (') i dvojité uvozovky ("). +more Například v jazyce Perl:.
print 'Nancy zvolala "Ahoj!" do davu.';
produkuje požadovaný výstup bez potřeby použít escape znaky. Tento přístup však funguje pouze tehdy, když řetězec neobsahuje oba typy uvozovek.
Zdvojování párových oddělovačů
Zdvojování párových oddělovačů uvnitř řetězců nebo jiných výrazů je alternativním postupem k používání escape posloupností a escape znaků pro zabránění kolizím oddělovačů. Visual Basic například používá dvojité uvozovky jako oddělovače. +more Toto je podobný escaping oddělovač.
print "Nancy zvolala ""Ahoj!"" do davu."
produkuje požadovaný výstup bez nutnosti používat escape znaky. Stejně jako normální escaping může být matoucí, pokud je potřeba použít příliš mnoho uvozovek. +more Kód pro výpis výše uvedeného zdrojového kódu by mohl být ještě více matoucí:.
print "print ""Nancy zvolala """"Ahoj!"""" do davu."""
Vícero uvozovek
V porovnání s dvojími uvozovkami je větší počet uvozovek ještě flexibilnější a tak lze ještě lépe zabránit kolizi oddělovačů.
Následující příkazy v jazyce Perl:
print qq^Jan by moh' říct "Ahoj!".^; print qq@Jan by moh' říct "Ahoj!".@; print qq(Jan by moh' říct "Ahoj!".);
produkují požadovaný výstup díky použití [url=http://perldoc. perl. +moreorg/perlop. html#Quote-and-Quote-like-Operators]quote operátorů[/url], které umožňují, aby libovolný zvolený znak fungoval jako oddělovač. I když je tato metoda flexibilnější, podporuje ji poměrně málo jazyků, mezi něž patří Perl a Ruby.
Hranice obsahu
Hranice obsahu je speciálním typem oddělovače, který je navržen tak, aby nezpůsoboval kolize oddělovačů. Umožňuje zadat libovolnou posloupnost znaků, která vždy indikuje hranice mezi částmi vícedílné zprávy, a neumožňuje žádnou jinou interpretaci.
Oddělovač často obsahuje náhodnou posloupnost znaků, tak dlouhou, že je statisticky nepravděpodobné, aby se objevila v datech. Může obsahovat další identifikaci jako UUID, časové razítko nebo jiný rozlišovač. +more Data, do kterých se vkládá oddělovač mohou být zkontrolována, aby se zajistilo, že oddělovače se náhodou nevyskytují v textu. To umožňuje používat kratší nebo jednodušší oddělovače a zvyšuje čitelnost dokumentu pro člověka. (Viz například, MIME, here-dokument).
Bílé znaky nebo odsazení
Některé programovací a počítačové jazyky používají oddělovače tvořené bílými znaky nebo odsazováním jako prostředek popisující hranice mezi nezávislými oblastmi textu.
Syntaxe regulárních výrazů
Pro popis regulárních výrazů bývá možné používat alternativní oddělovače, které zjednodušují zápis operace srovnání nebo napasování regulárního výrazu na řetězec a substituci v jazyce Perl.
Například jednoduché napasování řetězce na regulární výraz lze v Perlu zadat následujícím způsobem:
$string1 = 'Nancy zvolala „Ahoj!“ do davu.'; # definuje cílový řetězec print $string1 =~ m/[aeiou]+/; # vyhovuje jedna nebo více samohlásek
Perl umožňuje používat alternativní oddělovače, což přináší dostatečnou flexibilitu, aby se zabránilo kolizi oddělovačů:
$string1 = 'Nancy zvolala "http://Hello/World.htm" není povolená adresa.'; # cílový řetězec
print $string1 =~ m@http://@; # napasování pomocí alternativního oddělovače regulárního výrazu print $string1 =~ m{http://}; # totéž jako předchozí, ale jiný oddělovač print $string1 =~ m. http://. +more; # totéž jako předchozí, ale jiný oddělovač.
Here-dokument
Here-dokument umožňuje vložení libovolného obsahu definováním speciálního konce posloupnost. Tuto metodu podporuje mnoho jazyků včetně PHP, bash skripty, Ruby a Perl. +more Here-dokument začíná popisem, jaká posloupnost jej bude ukončovat a pokračuje, dokud se zadaná posloupnost neobjeví na začátku nového řádku.
Příklad v jazyce Perl:
Tento kód vytiskne:
Zapsat řetězec obsahující "určité znaky" je obtížné.
Znaky konce řádku, čárky a jiné znaky mohou způsobit kolizi oddělovačů.
Díky použití speciálního konce posloupnosti se mohou v řetězci objevit všechny uvedené znaky.
ASCII armor
ASCII armoring se obvykle používá jako mechanismus pro textové kódování binárních dat. Jedná se techniku programování a správy systémů, která může v některé případech také zabránit kolizi oddělovačů. +more Tato technika je odlišena od jiných zde popsaných metod, protože je složitější a proto není vhodná pro malé aplikace a jednoduché formáty pro ukládání dat. Technika využívá speciální kódovací schéma, jako například base64, pro zajištění, že se oddělovač znaků neobjeví ve vysílaných datech.
Tato technika se používá například ve vývojových technologiích ASP. +moreNET pro WWW firmy Microsoft a je těsně spojená s komponentou „VIEWSTATE“ tohoto systém.
Odkazy
Reference
Související články
Escapování * Escape sekvence * CSV * Řetězcový literál * Desetinná čárka
Externí odkazy
[url=http://www. catb. +moreorg/esr/writings/taoup/html/ch05s02. html]Data File Metaformats[/url] z knihy „The Art of Unix Programming“ od Erica Stevena Raymonda * [url=http://searchoracle. techtarget. com/definition/delimiter]What is delimiter[/url] od Margaret Rouse.
Kategorie:Značkovací jazyky Kategorie:Programovací konstrukce