التنسيق (علوم الحاسوب)
في علوم الحاسوب ، تُعرف عملية تحويل تمثيل الذاكرة لكائن ما إلى تنسيق بيانات مناسب للتخزين أو النقل ، خاصةً بين بيئات تشغيل مختلفة، باسم "الترتيب" أو "الترتيب" (أو " الترتيب " في اللغة الإنجليزية الأمريكية ) . ويُستخدم هذا الأسلوب عادةً عند الحاجة إلى نقل البيانات بين أجزاء مختلفة من برنامج حاسوبي أو من برنامج إلى آخر.
تعمل عملية التنسيق على تبسيط الاتصالات المعقدة، لأنها تسمح باستخدام الكائنات المركبة بدلاً من الاقتصار على الكائنات الأولية .
مقارنة مع التسلسل
يُستخدم مصطلح "Marshalling" أحيانًا كمرادف لمصطلح "serializing" ، بينما يُعد التسلسل في الواقع خطوة واحدة في عملية تحويل الكائن إلى كائن.
- يشير مصطلح "التنسيق " إلى الهدف أو العملية العامة لنقل كائن حي من جهاز العميل إلى الخادم (حيث يُعتبر كل من العميل والخادم مفهومين مجردين متطابقين، يُمثلان طرفي أي رابط اتصال، مثل المقابس ). يكمن الهدف من تنسيق الكائن في ضمان وجوده في برنامج قيد التشغيل ضمن برنامج آخر قيد التشغيل ؛ أي نقل الكائن من جهاز العميل إلى الخادم، وهو شكل من أشكال التجسيد يسمح بانتقال بنية الكائن وبياناته وحالته من بيئة تشغيل إلى أخرى، مستفيدًا من تمثيل وسيط مُسلسل و"جاف" (وهو أقل أهمية) يتم تداوله عبر مقبس الاتصال.
- لا يكون للتسلسل بالضرورة نفس هذا القصد، لأنه يهتم فقط بتحويل البيانات لإنشاء هذا التمثيل الوسيط "الجاف" للكائن (على سبيل المثال، إلى دفق من البايتات) والذي يمكن بعد ذلك إما إعادة تجسيده في وقت تشغيل مختلف، أو تخزينه ببساطة في قاعدة بيانات أو ملف أو في الذاكرة.
وبالتالي، قد يتم إجراء عملية الترتيب والتسلسل بشكل مختلف، على الرغم من أنه عادة ما يتم استخدام شكل من أشكال التسلسل لإجراء الترتيب. [ 1 ]
يُشبه مصطلح "إلغاء التسلسل " إلى حدٍ ما عملية " فك التسلسل" لكائن جاف "على جانب الخادم"، أي فك التسلسل (أو فك التسلسل) لاستعادة كائن نشط: حيث يتم تحويل الكائن المُسلسل إلى بنية بيانات داخلية، أي كائن نشط ضمن بيئة التشغيل المستهدفة. وعادةً ما يُطابق هذا العملية العكسية تمامًا لعملية التسلسل، على الرغم من أن كلا طرفي العملية قد يُفعّلان منطقًا تجاريًا مُحددًا في بعض الأحيان .
يختلف التعريف الدقيق لعملية الترتيب عبر لغات البرمجة مثل بايثون وجافا و . NET ، وفي بعض السياقات، يتم استخدامها بشكل متبادل مع التسلسل.
التنسيق في لغات برمجة مختلفة
تعني عملية " تسلسل " كائن ما تحويل حالته إلى سلسلة بايتات بحيث يمكن تحويل سلسلة البايتات مرة أخرى إلى نسخة من الكائن، وهو ما يُعرف أساسًا بفك التسلسل. تختلف لغات البرمجة في تمييزها بين هذين المفهومين. إليك بعض الأمثلة:
في لغة بايثون ، يُستخدم مصطلح "marshal" لنوع محدد من "التسلسل" في مكتبة بايثون القياسية [ 2 ] - تخزين كائنات بايثون الداخلية:
توجد وحدة marshal بشكل أساسي لدعم قراءة وكتابة التعليمات البرمجية "شبه المترجمة" لوحدات بايثون الخاصة بملفات .pyc .
...
إذا كنت تقوم بتسلسل وفك تسلسل كائنات بايثون، فاستخدم
pickleالوحدة النمطية بدلاً من ذلك.
— مكتبة بايثون القياسية [ 3 ]
في RFC 2713 المتعلق بلغة جافا ، يُستخدم التسلسل عند تحويل الكائنات إلى صيغة تسلسلية لاستدعائها عن بُعد . يسجل الكائن المُسلسل حالة الكائن الأصلي، ويحتوي على قاعدة التعليمات البرمجية ( قاعدة التعليمات البرمجية هنا تشير إلى قائمة عناوين URL التي يمكن تحميل رمز الكائن منها، وليس إلى التعليمات البرمجية المصدرية). لذا، لتحويل حالة الكائن وقاعدة (قواعد) التعليمات البرمجية، يجب إجراء عملية فك التسلسل. تقوم واجهة فك التسلسل تلقائيًا بتحويل البيانات المُسلسلة التي تحتوي على قاعدة (قواعد) التعليمات البرمجية إلى كائن جافا قابل للتنفيذ في JAXB. يمكن فك تسلسل أي كائن قابل للإلغاء التسلسلي، ولكن العكس ليس صحيحًا بالضرورة.
تعني عملية "ترتيب" كائن ما تسجيل حالته وقواعد بياناته البرمجية بطريقة تضمن عند "فك ترتيب" الكائن المرتب الحصول على نسخة منه، ربما عن طريق تحميل تعريفات فئات الكائن تلقائيًا. يمكنك ترتيب أي كائن قابل للتسلسل أو بعيد (أي يُنفذ الواجهة
java.rmi.Remote). يشبه الترتيب التسلسل، إلا أنه يسجل قواعد البيانات البرمجية أيضًا. ويختلف الترتيب عن التسلسل في أنه يُعامل الكائنات البعيدة معاملة خاصة....
أي كائن يمكن استدعاء توابعه [على كائن في آلة جافا افتراضية أخرى] يجب أن يُنفذ الواجهة
java.rmi.Remote. عند استدعاء هذا الكائن، يتم تحويل وسائطه وإرسالها من الآلة الافتراضية المحلية إلى الآلة الافتراضية البعيدة، حيث يتم فك تحويل الوسائط واستخدامها.
— مخطط لتمثيل كائنات جافا في دليل LDAP (RFC 2713) [ 4 ]
في .NET ، يُستخدم مصطلح marshalling أيضًا للإشارة إلى التسلسل عند استخدام الاستدعاءات البعيدة :
عند تحويل كائن إلى سلسلة نصية باستخدام قيمته، يتم إنشاء نسخة من الكائن وإرسالها إلى الخادم. وتُنفذ جميع استدعاءات الدوال على هذا الكائن على الخادم.
— كيفية إرسال كائن إلى خادم بعيد حسب القيمة باستخدام Visual Basic .NET (Q301116) [ 5 ]
الاستخدام والأمثلة
يتم استخدام عملية التنسيق ضمن تطبيقات آليات استدعاء الإجراءات عن بعد المختلفة (RPC)، حيث يكون من الضروري نقل البيانات بين العمليات و/أو بين الخيوط .
في نموذج كائنات المكونات (COM) من مايكروسوفت ، يجب تحويل مؤشرات الواجهة عند عبور حدود وحدات COM. [ 6 ] [ 7 ] في إطار عمل .NET ، يُعد التحويل بين نوع غير مُدار ونوع CLR ، كما هو الحال في عملية P/Invoke ، مثالًا آخر على إجراء يتطلب التحويل. [ 8 ]
بالإضافة إلى ذلك، يُستخدم التنسيق على نطاق واسع في البرامج النصية والتطبيقات التي تستخدم تقنيات XPCOM المتوفرة ضمن إطار عمل تطبيقات موزيلا . يُعد متصفح موزيلا فايرفوكس تطبيقًا شائعًا مبنيًا على هذا الإطار، والذي يسمح أيضًا للغات البرمجة النصية باستخدام XPCOM من خلال XPConnect (الاتصال عبر المنصات).
مثال
في أنظمة تشغيل مايكروسوفت ويندوز، تُعدّ جميع برامج تشغيل الأجهزة الخاصة بـ Direct3D برامج تشغيل تعمل في وضع النواة. أما الجزء الخاص بوضع المستخدم من واجهة برمجة التطبيقات (API) فيتم التعامل معه بواسطة بيئة تشغيل DirectX التي توفرها مايكروسوفت.
تُعدّ هذه مشكلةً لأنّ استدعاء عمليات وضع النواة من وضع المستخدم يتطلّب إجراء استدعاء نظام ، وهذا يُجبر وحدة المعالجة المركزية حتمًا على التحوّل إلى "وضع النواة". هذه عملية بطيئة، تستغرق بضعة ميكروثوانٍ لإتمامها. [ 9 ] خلال هذه الفترة، لا تستطيع وحدة المعالجة المركزية تنفيذ أيّ عمليات. لذا، فإنّ تقليل عدد مرات إجراء عملية التحوّل هذه من شأنه أن يُحسّن الأداء بشكلٍ ملحوظ.
تنقسم برامج تشغيل OpenGL في نظام Linux إلى قسمين: برنامج تشغيل خاص بنواة النظام وبرنامج تشغيل خاص بمساحة المستخدم. يتولى برنامج التشغيل الخاص بمساحة المستخدم ترجمة أوامر OpenGL إلى لغة الآلة لإرسالها إلى وحدة معالجة الرسومات (GPU) . ولتقليل عدد استدعاءات النظام، يُطبّق برنامج التشغيل الخاص بمساحة المستخدم عملية تحويل البيانات. فإذا كانت ذاكرة أوامر وحدة معالجة الرسومات ممتلئة ببيانات العرض، يمكن لواجهة برمجة التطبيقات (API) ببساطة تخزين استدعاء العرض المطلوب في ذاكرة مؤقتة، وعندما تقترب ذاكرة الأوامر من الفراغ، يمكنها الانتقال إلى وضع نواة النظام وإضافة عدد من الأوامر المخزنة دفعة واحدة.
التنسيقات
يتطلب تجميع البيانات نوعًا من نقل البيانات، والذي يستفيد من تنسيق بيانات محدد ليتم اختياره كهدف للتسلسل.
XML مقابل JSON مقابل...
تُعدّ لغة XML إحدى هذه الصيغ ووسائل نقل البيانات بين الأنظمة. على سبيل المثال، تستخدمها مايكروسوفت كأساس لصيغ الملفات الخاصة بمختلف مكونات حزمة مايكروسوفت أوفيس (وورد، إكسل، أكسس، باوربوينت، إلخ) (انظر Office Open XML ).
على الرغم من أن هذا ينتج عنه عادةً تنسيق بيانات مطوّل، فإنّ صيغة XML التي تتضمن علامات "البداية" و"النهاية" بين قوسين كاملين تسمح بتوفير تشخيصات أكثر دقة واستعادة أسهل في حال حدوث أخطاء أثناء الإرسال أو على القرص. إضافةً إلى ذلك، ولأنّ العلامات تتكرر، يمكن استخدام طرق الضغط القياسية لتقليص حجم المحتوى - فجميع تنسيقات ملفات Office تُنشأ عن طريق ضغط ملف XML الخام. [ 10 ] أما التنسيقات البديلة مثل JSON (تدوين كائنات جافا سكريبت) فهي أكثر إيجازًا، ولكنها في المقابل أقل موثوقية في استعادة البيانات بعد الأخطاء.
بمجرد نقل البيانات إلى برنامج أو تطبيق، يجب تحويلها مرة أخرى إلى كائن لاستخدامها. لذا، يُستخدم فك التشفير عادةً في الطرف المُستقبِل لتطبيقات آليات استدعاء الأساليب عن بُعد (RMI) واستدعاء الإجراءات عن بُعد (RPC) لفك تشفير الكائنات المُرسَلة إلى شكل قابل للتنفيذ.
جاكسب
JAXB أو بنية جافا لربط XML هي الإطار الأكثر شيوعًا الذي يستخدمه المطورون لترتيب وفك ترتيب كائنات جافا. توفر JAXB التحويل المتبادل بين أنواع البيانات الأساسية التي تدعمها جافا وأنواع بيانات مخطط XML القياسي. [ 11 ]
XmlSerializer
System.Xml.Serialization.XmlSerializerيُعدّ إطار العمل JAXB الإطارَ الذي يستخدمه مطورو لغة C# لترتيب وفك ترتيب كائنات C#. ومن مزايا C# على Java أنها تدعم الترتيب بشكلٍ أصلي بفضل تضمينها System.Xml.Serialization.XmlSerializerلفئة JAXB. أما Java، فتتطلب شيفرة وسيطة غير أصلية ، مثل JAXB، لدعم الترتيب. [ 12 ]
من XML إلى تمثيل قابل للتنفيذ
من أمثلة فك التشفير تحويل تمثيل XML لكائن ما إلى التمثيل الافتراضي لهذا الكائن في أي لغة برمجة. لنأخذ الفئة التالية كمثال:
public class Student { private String name ; private int id ;public String getName () { return this . name ; }public int getId () { return this . id ; }void setName ( String name ) { this . name = name ; }void setId ( int id ) { this . id = id ; } }- تمثيل XML لكائن معين
Student:
<?xml version="1.0" encoding="UTF-8"?> <student id= "11235813" > <name> أليس </name> </student> <student id= "21345589" > <name> بوب </name> </student>- التمثيل القابل للتنفيذ لهذا
Studentالكائن:
Student s1 = new Student ( ); s1.setId ( 11235813 ); s1.setName ( " Alice" ) ; Student s2 = new Student ( ) ; s2.setId ( 21345589 ); s2.setName ( " Bob " ) ;عملية فك التشفير هي عملية تحويل تمثيل XML إلى تمثيل Java التنفيذي الافتراضي، وتشغيل هذا الكود نفسه للحصول على كائن متناسق وفعّال. لو تم اختيار تنسيق مختلف، لكانت عملية فك التشفير مختلفة، لكن النتيجة النهائية في بيئة التشغيل المستهدفة ستكون نفسها.
فك التشفير في جافا
مُفكِّك تسلسل في جاكوب
تتولى الفئة المدمجة jakarta.xml.bind.Unmarshaller(رسميًا ) عملية تحويل بيانات XML إلى كائن Java قابل للتنفيذ. وتُستخدمjavax.xml.bind.Unmarshaller دوال التحويل المُعرّفة في هذه jakarta.xml.bind.Unmarshallerالفئة لقبول بيانات XML من أنواع مختلفة من المدخلات ، مثل XML أو XML أو XML. [ 13 ] على سبيل المثال:java.io.Filejava.io.FileInputStreamjava.net.URL
استيراد java.io.File ؛ استيراد jakarta.xml.bind.JAXBContext ؛ استيراد jakarta.xml.bind.Unmarshaller ؛JAXBContext jcon = JAXBContext.newInstance ( "com.acme.foo" ); Unmarshaller umar = jcon.createUnmarshaller ( ) ; Object obj = umar.unmarshal ( new File ( " input.xml " ) ) ;فك تشفير بيانات XML
تستطيع دوال فك التشفير (Unmarshal) فك تشفير مستند XML كامل أو جزء صغير منه. عندما يكون عنصر الجذر XML مُعلنًا بشكل عام، تستخدم هذه الدوال jakarta.xml.bind.JAXBContextربط عناصر الجذر XML بفئات JAXB المُرتبطة لبدء عملية فك التشفير. أما إذا لم تكن عمليات الربط كافية، وتم تعريف عناصر الجذر محليًا، فتستخدم دوال فك التشفير declaredTypeدوالًا أخرى لإتمام العملية. يمكن فهم هذين النهجين أدناه. [ 13 ]
فك تشفير عنصر جذر XML عالمي
تستخدم دالة unmarshal jakarta.xml.bind.JAXBContext(سابقًا javax.xml.bind.JAXBContext) لفك تشفير بيانات XML، عندما يكون العنصر الجذر مُعلنًا بشكل عام. jakarta.xml.bind.JAXBContextيحتفظ الكائن دائمًا بربط بين عنصر XML المُعلن بشكل عام واسمه وفئة JAXB المُرتبطة. إذا @xsi:typeتطابق اسم عنصر XML أو سماته مع فئة JAXB المُرتبطة، فإن دالة unmarshal تُحوّل بيانات XML باستخدام فئة JAXB المُرتبطة المناسبة. مع ذلك، إذا لم يكن هناك تطابق لاسم عنصر XML، فستتوقف عملية unmarshal وتُطلق استثناءً jakarta.xml.bind.UnmarshalException(سابقًا javax.xml.bind.UnmarshalException). يُمكن تجنب ذلك باستخدام declaredTypeدوال unmarshal by. [ 14 ]
فك تشفير عنصر جذر XML محلي
عندما لا يُصرَّح عن العنصر الجذر بشكل عام، يُساعد التطبيق مُفكِّك التسلسل من خلال تعيين مُقدَّم من التطبيق باستخدام declaredTypeالمعاملات. وبحسب ترتيب الأسبقية، حتى لو كان لاسم الجذر تعيين إلى فئة JAXB مناسبة، فإن هذا declaredTypeالتعيين يُلغي التعيين المُقدَّم. مع ذلك، إذا كانت @xsi:typeسمة بيانات XML تحتوي على تعيين إلى فئة JAXB مناسبة، فإن هذا التعيين له الأسبقية على مُعامل declareType. تُعيد طرق فك التسلسل باستخدام declaredTypeالمعاملات دائمًا نسخةً من الكائن. تُعيَّن jakarta.xml.bind.JAXBElement<T>خصائص هذه النسخة كما يلي: [ 15 ]jakarta.xml.bind.JAXBElement<T>
jakarta.xml.bind.JAXBElementملكية | قيمة |
|---|---|
name | اسم عنصر XML |
value | instanceof declaredType |
declaredType | معلمات طريقة فك declaredTypeالتشفير |
scope | null(الحجم الفعلي غير معروف) |
انظر أيضاً
مراجع
- ↑ جيفري هانتين. "ما الفرق بين التسلسل والترتيب؟" . شبكة ستاك إكستشينج . تم الاطلاع عليه بتاريخ 23 يوليو 2021 .
- ↑ "marshal — تسلسل كائنات بايثون الداخلي" . مؤسسة برمجيات بايثون . تم الاطلاع عليه بتاريخ 4 نوفمبر 2016 .
- ↑ "marshal — تسلسل كائنات بايثون الداخلي" . مؤسسة برمجيات بايثون . تم الاطلاع عليه بتاريخ 9 أكتوبر 2019 .
- ↑ "مخطط لتمثيل كائنات جافا في دليل LDAP" . IETF. أكتوبر 1999. تم الاطلاع عليه في 4 نوفمبر 2016 .
- ↑ "كيفية إرسال كائن إلى خادم بعيد باستخدام القيمة في Visual Basic .NET" . مايكروسوفت. يوليو 2004. مؤرشف من الأصل بتاريخ 15 نوفمبر 2004. تم الاطلاع عليه بتاريخ 4 نوفمبر 2016 .
- ↑ "الشقق ونماذج ترابط COM" . مؤرشف من الأصل بتاريخ 23-09-2015 . تم الاطلاع عليه بتاريخ 19-06-2009 .
- ↑ "دالة CoInitializeEx (COM)" . تطوير تطبيقات سطح المكتب لنظام التشغيل Windows . تم الاطلاع عليه بتاريخ 22-02-2013 .
- ↑ نظرة عامة على عملية الربط البيني
- ↑ جودة الكود: منظور المصادر المفتوحة .
- ↑ ما هو ملف DOCX؟ https://docs.fileformat.com/word-processing/docx/ تم الاطلاع عليه بتاريخ 13 أكتوبر 2020.
- ↑ "ربط مخططات XML - البرنامج التعليمي لـ Java EE 5" . docs.oracle.com . تم الاطلاع عليه بتاريخ 14-09-2016 .
- ↑ "استخدام فئة XmlSerializer" . msdn.microsoft.com . تم الاطلاع عليه بتاريخ 23-09-2016 .
- 1 2 "فك التشفير (JAXB 2.2.3)" . jaxb.java.net . مؤرشف من الأصل بتاريخ 2012-06-05 . تم الاطلاع عليه بتاريخ 2016-09-14 .
- ↑ "JAXBContext (JAXB 2.2.3)" . jaxb.java.net . مؤرشف من الأصل بتاريخ 27-09-2016 . تم الاطلاع عليه بتاريخ 23-09-2016 .
- ↑ "JAXBElement (JAXB 2.2.3)" . jaxb.java.net . مؤرشف من الأصل بتاريخ 16 فبراير 2013. تم الاطلاع عليه بتاريخ 23 سبتمبر 2016 .
- المثابرة
- إجراء مكالمة عن بعد
