تعبيرات S القياسية
تعبير S القياسي (أو csexp ) هو شكل ترميز ثنائي لمجموعة فرعية من تعبير S العام (أو sexp). تم تصميمه للاستخدام في SPKI للاحتفاظ بقوة تعبيرات S وضمان الشكل القياسي للتطبيقات مثل التوقيعات الرقمية مع تحقيق إحكام الشكل الثنائي وتعظيم سرعة التحليل.
تتكون المجموعة الفرعية الخاصة من تعبيرات S العامة القابلة للتطبيق هنا من الذرات ، وهي عبارة عن سلاسل بايتات، وأقواس تستخدم لتحديد القوائم أو القوائم الفرعية. هذه التعبيرات S متكررة بالكامل.
في حين يتم ترميز تعبيرات S عادةً كنص، مع وجود مسافات تحدد الذرات وعلامات اقتباس تستخدم لإحاطة الذرات التي تحتوي على مسافات، عند استخدام الترميز الأساسي يتم ترميز كل ذرة كسلسلة بايتات ذات بادئة طولية. لا يُسمح بالمسافات البيضاء التي تفصل العناصر المتجاورة في القائمة. يتم التعبير عن طول الذرة كرقم عشري ASCII يتبعه ":".
مثال
الجنس
(يحتوي هذا "التعبير S التقليدي" على 5 ذرات)
يصبح csexp
(4:this22:تعبير S القياسي3:has1:55:ذرات)
لا يلزم استخدام علامات الاقتباس لتفادي حرف المسافة الداخلي للذرة "تعبير S القياسي"، لأن بادئة الطول تشير بوضوح إلى نهاية الذرة. لا توجد مسافة بيضاء تفصل الذرة عن العنصر التالي في القائمة.
ملكيات
- تفرد الترميز الأساسي : إن منع المسافات البيضاء بين عناصر القائمة وتوفير طريقة واحدة فقط لترميز الذرات يضمن أن كل تعبير S له شكل مشفر واحد فقط. وبالتالي، يمكننا أن نقرر ما إذا كان تعبيران S متكافئين من خلال مقارنة ترميزهما.
- دعم البيانات الثنائية : يمكن أن تكون الذرات عبارة عن أي سلسلة ثنائية. وبالتالي، يمكن التعبير عن قيمة التجزئة المشفرة أو وحدة المفتاح العام التي كان من المفترض أن يتم ترميزها في base64 أو أي ترميز قابل للطباعة آخر في csexp على هيئة بايتات ثنائية.
- دعم ترميز المعلومات حسب النوع : يتضمن csexp بنية غير S-expression للإشارة إلى ترميز السلسلة، عندما لا يكون هذا الترميز واضحًا. يمكن إضافة ذرة واحدة بين قوسين مربعين إلى أي ذرة في csexp - مثل "[4:JPEG]" أو "[24:text/plain;charset=utf-8]".
التفسير والقيود
في حين تسمح csexps عمومًا بالقوائم الفارغة والذرات الفارغة وما إلى ذلك، فإن استخدامات معينة لـ csexps تفرض قيودًا إضافية. على سبيل المثال، تحتوي csexps كما تستخدم في SPKI على قيد واحد مقارنة بـ csexps بشكل عام: يجب أن تبدأ كل قائمة بذرة، وبالتالي لا يمكن أن تكون هناك قوائم فارغة.
عادةً، تتم معاملة الذرة الأولى في القائمة كما يتم التعامل مع اسم عنصر في XML .
المقارنات مع الترميزات الأخرى
هناك ترميزات أخرى شائعة الاستخدام:
- إكس إم إل
- رقم 1
- JSON (و YAML الذي يتضمن "JSON كمجموعة فرعية رسمية"، مع المجموعة العليا، بهدف أن تكون أكثر قابلية للقراءة من قبل البشر .)
بشكل عام، يحتوي csexp على محلل أصغر بمقدار عشري أو عشري من ذلك الموجود في XML أو ASN.1. [ بحاجة لمصدر ] هذا الحجم الصغير والسرعة المقابلة [ بحاجة لمصدر ] يمنح csexp ميزته الرئيسية. بالإضافة إلى ميزة التحليل، هناك اختلافات أخرى.
csexp مقابل XML
يختلف csexp وXML في أن csexp هو تنسيق لتمثيل البيانات، بينما يتضمن XML تنسيقًا لتمثيل البيانات وآلية مخطط أيضًا. وبالتالي، يمكن "تكوين" XML لأنواع معينة من البيانات، والتي تتوافق مع بعض القواعد النحوية (على سبيل المثال، HTML أو ATOM أو SVG أو MathML أو قواعد نحوية جديدة حسب الحاجة). يحتوي على لغات لتحديد قواعد نحوية المستندات: يتم تعريف DTD بواسطة معيار XML نفسه، بينما يتم استخدام XSD و RelaxNG و Schematron بشكل شائع مع XML للحصول على ميزات إضافية، ويمكن لـ XML أيضًا العمل بدون مخطط. يمكن بالطبع تشغيل بيانات csexp بواسطة مخططات يتم تنفيذها على مستوى أعلى، لكنها لا توفر مثل هذه الآلية في حد ذاتها.
من حيث الأحرف والبايتات، قد تحتوي "سلسلة" csexp على أي تسلسل بايتات على الإطلاق (بسبب بادئة الطول على كل ذرة)، بينما تتطلب XML (مثل تعبيرات Lisp S العادية وJSON والحرفيات في لغات البرمجة) تمثيلات بديلة لبضعة أحرف (مثل "<" ومعظم أحرف التحكم). ومع ذلك، ليس لهذا أي تأثير على نطاق الهياكل والدلالات التي يمكن تمثيلها. توفر XML أيضًا آليات لتحديد كيفية تفسير تسلسل بايتات معين: على سبيل المثال، كسلسلة Unicode UTF-8 أو ملف JPEG أو عدد صحيح؛ تترك csexp مثل هذه التمييزات لآليات خارجية.
على المستوى الأكثر أساسية، يمثل كل من csexp وXML الأشجار (كما تفعل معظم التمثيلات الخارجية الأخرى). وهذا ليس مفاجئًا، حيث يمكن وصف XML كشكل مختلف من علامات الترقيم لتعبيرات S الشبيهة بلغة LISP، أو العكس. [1]
ومع ذلك، يتضمن XML دلالات إضافية، والتي يتم تحقيقها عادةً في csexp من خلال اتفاقيات مختلفة بدلاً من كونها جزءًا من اللغة. أولاً، كل عنصر XML له اسم (تستخدم تطبيقات csexp عادةً الطفل الأول لكل تعبير لهذا الغرض). ثانيًا، يوفر XML تصنيف البيانات، أولاً عبر قواعد المخطط. ومع ذلك، يمكن للمخطط أيضًا التمييز بين الأعداد الصحيحة والسلاسل وكائنات البيانات ذات الأنواع (مثل JPEG) و(خاصةً مع XSD ) أنواع أخرى).
قد يحتوي عنصر XML أيضًا على سمات ، وهي بنية لا يشاركها csexp. لتمثيل بيانات XML في csexp، يجب على المرء اختيار تمثيل لهذه السمات؛ أحد الخيارات الواضحة هو حجز العنصر الثاني في كل تعبير S لقائمة من أزواج (القيمة الاسمية)، على غرار قائمة ارتباط LISP . لا يوجد معادل لسمات XML ID و IDREF في csexp، ولكن يمكن تنفيذها بسهولة بواسطة برنامج تطبيق csexp.
أخيرًا، قد يحتوي عنصر XML على تعليقات و/أو تعليمات معالجة. لا يوجد معادلات محددة لـ csexp، لكن من السهل تمثيلها، فقط عن طريق حجز اسم لكل منها. على سبيل المثال، تسميتها "*COM" و"*PI" (يمنع "*" التصادم مع أسماء أنواع عناصر XML):
(4:*COM15:نص التعليق) (3:*PI6:target11:font="helv")
كلا من csexp وXML متكرران بالكامل.
الذرة الأولى في قائمة csexp، وفقًا للاتفاقية، تتوافق تقريبًا مع اسم نوع عنصر XML في تحديد "نوع" القائمة. ومع ذلك، في csexp يمكن أن تكون أي ذرة في أي ترميز (على سبيل المثال، JPEG، سلسلة Unicode، ملف WAV ، ...)، بينما أسماء عناصر XML هي معرفات، مقيدة بأحرف معينة، مثل معرفات لغة البرمجة. من الواضح أن طريقة csexp أكثر عمومية؛ من ناحية أخرى، يتم تحديد تحديد الترميز الذي يوجد به مثل هذا العنصر، وبالتالي كيفية تفسيره، فقط من خلال اتفاقيات مستخدم معين، مما يعني أن تطبيق csexp يجب أن يبني مثل هذه الاتفاقيات لنفسه، في الكود والتوثيق وما إلى ذلك.
وبالمثل، فإن ذرات csexp ثنائية (تتكون من بادئة طول تليها بايتات عشوائية تمامًا )، بينما تم تصميم XML ليكون قابلاً للقراءة من قبل البشر (بينما يمكن القول إنه أقل من JSON أو YAML ) - لذلك يجب ترميز البايتات العشوائية في XML بطريقة ما (على سبيل المثال، يمكن تضمين صورة نقطية باستخدام base64 ). وهذا يعني أن تخزين كميات كبيرة من المعلومات غير القابلة للقراءة في XML غير مضغوط يستغرق مساحة أكبر؛ من ناحية أخرى، سوف ينجو من الترجمة بين مجموعات الأحرف البديلة (بما في ذلك النقل عبر مضيفات الشبكة التي قد تطبق مجموعات أحرف مختلفة، واتفاقيات نهاية السطر، وما إلى ذلك).
لقد تم اقتراح أن XML "يدمج" تسلسلًا من السلاسل داخل عنصر واحد في سلسلة واحدة، بينما يسمح csexp بتسلسل من الذرات داخل قائمة وتظل هذه الذرات منفصلة عن بعضها البعض؛ ولكن هذا غير صحيح. [2] تمامًا مثل تعبيرات S و csexp، فإن XML لديه فكرة عن "تسلسل السلاسل" فقط إذا تم فصل "السلاسل" بطريقة ما:
<s> السلسلة A </s><s> السلسلة B </s>
مقابل
<s> السلسلة Aالسلسلة B </s>
("السلسلة أ" "السلسلة ب")
عكس
("السلسلة Aالسلسلة B")
(8:سلسلة A8:سلسلة B) عكس (16:سلسلة Aسلسلة B)
csexp مقابل ASN.1
ASN.1 هو شكل ترميز ثنائي شائع. ومع ذلك، فهو يعبر فقط عن بناء الجملة (أنواع البيانات)، وليس الدلالات. يوجد هيكلان مختلفان - كل منهما عبارة عن تسلسل من عددين صحيحين - لهما تمثيلات متطابقة على السلك (باستثناء خيارات العلامات الخاصة للتمييز بينهما). لتحليل هيكل ASN.1، يجب على المرء أن يخبر المحلل بمجموعة الهياكل التي يتوقعها ويجب أن يطابق المحلل نوع البيانات الذي يتم تحليله مع خيارات الهيكل. وهذا يزيد من تعقيد محلل ASN.1.
تحمل بنية csexp بعض الدلالة على دلالاتها الخاصة (المشفرة في أسماء العناصر)، ولا يهتم المحلل لبنية csexp بالبنية التي يتم تحليلها. بمجرد تحليل تعبير بتنسيق wire-format إلى شكل شجرة داخلي (مشابه لـ DOM الخاص بـ XML)، يمكن لمستهلك هذه البنية فحصها للتأكد من توافقها مع ما كان متوقعًا. تعمل وثيقة XML بدون مخطط تمامًا مثل csexp في هذا الصدد، بينما يمكن أن تعمل وثيقة XML مع هذه المخططات بشكل أشبه بـ ASN.1.
روابط خارجية
- الصفحة الجنسية لرون ريفيست
- مسودة IETF لرون ريفست تصف تعبيرات S
- أحدث مراجعة لمسودة IETF التي تصف تعبيرات S
- استخدامات مختلفة لـ csexp، بما في ذلك s2x: ترجمة csexp إلى XML
الملاحظات والمراجع
- ^ كان هذا التشابه معروفًا لدى واضعي XML . على سبيل المثال، ناقشه ستيفن ديروز في كتاب الأسئلة الشائعة حول SGML: فهم العلاقة بين SGML وXML ، دار نشر Kluwer Academic Publishers، 1997. ISBN 978-0-7923-9943-8 .
- ^ تسمح واجهة SAX الخاصة بـ XML لمحلل XML بتقسيم سلاسل النصوص (الفردية) بأي طريقة يريدها. بعض التطبيقات [ بحاجة لمصدر ] تعيد (بشكل غير صحيح) أسطرًا متعددة كعقد نصية مفردة، وهو ما قد يؤدي إلى هذا سوء الفهم الشائع.
