S-expression: деректерді тізім түрінде көрсету форматы. Lisp тілінде қолданылады, XML-ден қарапайымдылығымен ерекшеленеді. Бағдарламалау, деректерді сақтау.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Деректерді серияландыру форматы
Data serialization format
Компьютерлік бағдарламалауда S өрнегі (немесе символдық өрнек, қысқартылып sexpr немесе sexp деп аталады) – ішкі тізімдерге (ағаш тәрізді құрылымдалған) ұқсас жазылған деректерді бейнелеу үшін қолданылатын өрнек. S өрнектері Lisp бағдарламалау тілі үшін ойлап табылып, танымал болды, және ол оларды бастапқы код пен деректерді көрсету үшін пайдаланады.
In computer programming, an S expression (or symbolic expression, abbreviated as sexpr or sexp) is an expression in a like named notation for nested list (tree structured) data. S expressions were invented for and popularized by the programming language Lisp, which uses them for source code as well as data.
Талдау
S өрнектері көбінесе XML-мен салыстырылады: басты айырмашылық – S өрнектерінде тек бір ғана оқшаулау түрі бар, яғни нүктелі жұп, ал XML тегтерінде қарапайым атрибуттар, басқа тегтер немесе CDATA орналаса алады, олардың әрқайсысы әртүрлі синтаксис қолданады. Тағы бір айырмашылық – S өрнектері сілтеме механизмін қамтамайды, ал XML бірегей идентификаторлар мен оларға сілтемелер ұғымын ұсынады. Қарапайым қолдану жағдайларында S өрнектері XML-ден оңайрақ, бірақ күрделірек жағдайларда XML-де XPath деп аталатын сұраныс тілі, көптеген құралдар мен үшінші тарап кітапханалары XML деректерін өңдеуді жеңілдетуге көмектеседі.
S expressions are often compared to XML: one key difference is that S expressions have just one form of containment, the dotted pair, while XML tags can contain simple attributes, other tags, or CDATA, each using different syntax. Another is that S expressions do not define a reference mechanism, where XML provides a notion of unique identifiers and references to them. For simple use cases, S expressions are simpler than XML, but for more advanced use cases, XML has a query language so called XPath, many tools and third party libraries to simplify the handling of XML data.
Стандарттау
Кейбір 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 лицензиясы бойынша қол жетімді), оны басқа бағдарламаларға бейімдеуге және енгізуге болады. Сонымен қатар, форматты тәуелсіз түрде жүзеге асыруға ешқандай шектеулер жоқ.
Standards for some Lisp derived programming languages include a specification for their S expression syntax. These include Common Lisp (ANSI standard document ANSI INCITS 226 1994 (R2004)), Scheme (R5RS and R6RS), and ISLISP. In May 1997, Ron Rivest submitted an Internet Draft to be considered for publication as an RFC. The draft defined a syntax based on Lisp S expressions but intended for general purpose data storage and exchange (similar to XML) rather than specifically for programming. It was never approved as an RFC, but it has since been cited and used by other RFCs (e. g. RFC 2693) and several other publications. It was originally intended for use in SPKI. Rivest's format defines an S expression as being either an octet string (a series of bytes) or a finite list of other S expressions. It describes three interchange formats for expressing this structure. One is the "advanced transport", which is very flexible in terms of formatting, and is syntactically similar to Lisp style expressions, but they are not identical. The advanced transport, for example, allows octet strings to be represented verbatim (the string's length followed by a colon and the entire raw string), a quoted form allowing escape characters, hexadecimal, Base64, or placed directly as a "token" if it meets certain conditions. (Rivest's tokens differ from Lisp tokens in that the former are just for convenience and aesthetics, and treated exactly like other strings, while the latter have specific syntactical meaning.) Rivest's draft defines a canonical representation "for digital signature purposes". It's intended to be compact, easier to parse, and unique for any abstract S expression. It only allows verbatim strings, and prohibits whitespace as formatting outside strings. Finally there is the "basic transport representation", which is either the canonical form or the same encoded as Base64 and surrounded by braces, the latter intended to safely transport a canonically encoded S expression in a system which might change spacing (e. g. an email system which has 80 character wide lines and wraps anything longer than that). This format has not been widely adapted for use outside of SPKI (some of the users being GnuPG, libgcrypt, Nettle, and GNU lsh). Rivest's S expressions web page provides C source code for a parser and generator (available under the MIT license), which could be adapted and embedded into other programs. In addition, there are no restrictions on independently implementing the format.