Кіріспе

Деректерді серияландыру форматы

Компьютерлік бағдарламалауда S өрнегі (немесе символдық өрнек, қысқартылып sexpr немесе sexp деп аталады) – ішкі тізімдерге (ағаш тәрізді құрылымдалған) ұқсас жазылған деректерді бейнелеу үшін қолданылатын өрнек. S өрнектері Lisp бағдарламалау тілі үшін ойлап табылып, танымал болды, және ол оларды бастапқы код пен деректерді көрсету үшін пайдаланады.

Талдау

S өрнектері көбінесе XML-мен салыстырылады: басты айырмашылық – S өрнектерінде тек бір ғана оқшаулау түрі бар, яғни нүктелі жұп, ал XML тегтерінде қарапайым атрибуттар, басқа тегтер немесе CDATA орналаса алады, олардың әрқайсысы әртүрлі синтаксис қолданады. Тағы бір айырмашылық – S өрнектері сілтеме механизмін қамтамайды, ал XML бірегей идентификаторлар мен оларға сілтемелер ұғымын ұсынады. Қарапайым қолдану жағдайларында S өрнектері XML-ден оңайрақ, бірақ күрделірек жағдайларда XML-де XPath деп аталатын сұраныс тілі, көптеген құралдар мен үшінші тарап кітапханалары XML деректерін өңдеуді жеңілдетуге көмектеседі.

Стандарттау

Кейбір Lisp-тен туындаған бағдарламалау тілдерінің стандарттары олардың S-өрнектері синтаксисіне арналған сипаттаманы қамтиды. Оларға Common Lisp (ANSI INCITS 226 1994 (R2004) ANSI стандарты), Scheme (R5RS және R6RS) және ISLISP кіреді. 1997 жылдың мамырында Рон Ривест RFC ретінде жариялану үшін қарастырылатын Интернет-жобасын ұсынды. Жоба Lisp S-өрнектеріне негізделген синтаксисті анықтады, бірақ ол арнайы бағдарламалау үшін емес, жалпы мақсаттағы деректерді сақтау және алмасу үшін (XML-ге ұқсас) көзделген. Ол ешқашан RFC ретінде бекітілмеген, бірақ содан бері басқа RFC-лерде (мысалы, RFC 2693) және басқа да көптеген жариялымдарда сілтеме жасалып, қолданылған. Ол бастапқыда SPKI-де пайдалану үшін жоспарланған. Ривест форматы S-өрнектің байттар тізбегі (байтардың сериясы) немесе басқа S-өрнектердің шектеулі тізімі ретінде анықтайды. Ол осы құрылымды беру үшін үш форматты сипаттайды. Бірі – «жетілдірілген тасымалдау», ол пішімдеу тұрғысынан өте икемді және синтаксистік тұрғыдан Lisp стильдік өрнектерге ұқсас, бірақ толықтай сәйкес емес. Мысалы, жетілдірілген тасымалдау байттар тізбектерін сөзсіз (тізбектің ұзындығы, содан кейін қос нүкте және барлық шикі тізбек) көрсетуге мүмкіндік береді, сондай-ақ, цитаталар түрінде бос орындарды, ондық санау жүйесін, Base64-ті немесе белгілі бір шарттар орындалғанда тікелей «маркер» ретінде пайдалануға болады. (Ривест маркерлері Lisp маркерлерінен олар ыңғайлылық пен эстетика үшін ғана арналған және басқа тізбектер сияқты қарастырылатындығымен ерекшеленеді, ал Lisp маркерлері нақты синтаксистік мағынаға ие.) Ривест жобасы «цифрлік қолтаңба мақсаты үшін» канондық ұсынылымды анықтайды. Ол ықшам, оңай талдауға болатын және кез келген абстрактілі S-өрнек үшін бірегей болу үшін жасалған. Ол тек сөзсіз тізбектерді ғана қабылдайды және тізбектердің сыртындағы бос орындарды пішімдеу ретінде пайдалануға тыйым салады. Соңында «негізгі тасымалдау ұсынылымы» бар, ол канондық форманы немесе Base64 форматында кодталған және жақшалармен қоршалған нұсқа болып табылады. Соңғысы канондық түрде кодталған S-өрнекті аралықты өзгерте алатын жүйеде (мысалы, 80 символдан тұратын жолдары бар және одан ұзын мәтінді жаңа жолға түсіретін электрондық пошта жүйесі) қауіпсіз тасымалдау үшін көзделген. Бұл формат SPKI-ден тыс жерлерде кеңінен қолданылмады (оның кейбір пайдаланушылары GnuPG, libgcrypt, Nettle және GNU lsh). Ривесттің S-өрнектер веб-беті C тілінде жазылған талдаушы мен генератор үшін бастапқы кодты ұсынады (MIT лицензиясы бойынша қол жетімді), оны басқа бағдарламаларға бейімдеуге және енгізуге болады. Сонымен қатар, форматты тәуелсіз түрде жүзеге асыруға ешқандай шектеулер жоқ.