عناصر XML
تحوي وثيقة XML على عناصر XML
ماهي عناصر XML
عنصر XML هو كل شيء من (متضمن) عنصر بداية الوسم الى (متضمن) عنصر نهاية الوسم.
يحتوي العنصر على :
- عناصر أخرى
- نص
- لواحق
- أو خليط من كل ما سبق...
<bookstore>
<book category="CHILDREN">
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title>تعلم XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
في المثال السابق : <bookstore> و<book> فيها محتويات عناصر لأنها تحوي عناصر أخرى . و لدى <book> لاحقة
(category="CHILDREN").
كل من <title>, <author>, <year>, <price> لديهم محتوى نص لأنهم يحتوون على نص .قواعد تسمية XML
يجب أن تتبع عناصر XML قواعد التسمية التالية:
- يمكن للأسماء أن تحوي على أحرف, أرقام, و رموز أخرى.
- لا يمكن للأسماء أن تبدأ برقم أو علامة ترقيم.
- لا يمكن للأسماء أن تبدأ بحروف xml (أو XML أو ..Xml الخ)
- لا يمكن للأسماء أن تحوي على فراغات.
يمكن استخدام جميع الأسماء, ليس هنالك أي تحفظ على أية كلمة.
أفضل طرق التسمية
اجعل الكلمات وصفية. انه من الجيد كتابة الأسماء بـهذه الطريقة: .<first_name>, <last_name>
يجب على الاسماء أن تكون قصيرة و وبسيطة مثل هذا: <book_title> و ليس كهذا:
<the_title_of_the_book>.
تجنب هذه الرموز "-". ازا أسميت شيئا ما "first-name," فان بعض التطبيقات ستعتقد أنك تريد طرح الاسم من الاول.
تجنب هذه الرموز ".". ازا أسميت شيئا ما "first.name," فان بعض التطبيقات ستعتقد أن "الاسم" هو ملكية للشيء "الاول".
تجنب هذه الرموز ":". تستخدم النقطتان لشيء يدعى مساحة الاسماء (المزيد لاحقا).
غالبا ما يكون لدى وثائق XML قاعدة بيانات مطابقة لها. أفضل طريقة هي أن تستخدم قواعد التسمية الخاصة بقاعدة البيانات لديك على العناصر في وثائق XML.
تعتبر الاحرف غير الانكليزية كهذه éòá قانونية تماما في XML, و لكن احذر الوقوع في مشاكل في حال بائع التطبيقات عندك لم يدعمهم.
عناصر XML قابلة للتمديد
يمكن لعناصر XML أن يتم تمديدها لتنقل مزيدا من المعلومات.
انظر الى المثال التالي:
<note>
<to>Tove</to>
<from>Jani</from>
<body>لا تنساني هذا الاسبوع</body>!
</note>
لنتخيل اننا ابتكرنا تطبيقا استخرج عناصر <to>, <from>, <body> من وثيقة XML لينتج هذا الناتج:
الرسالة
الى: Tove
من: Jani
لا تنساني هذا الاسبوع
تخيل أن مؤلف وثيقة XML أضاف بعض المعلومات الاضافية لها:
<note>
<date>2008-01-10</date>
<to>Tove</to>
<from>Jani</from>
<heading>تذكير</heading>
<body> لا تنساني هذا الاسبوع</body>!
</note>
هل ستتعطل أو تنهار التطبيقات؟
لا. يجب على التطبيقات ان تبقى قادرة على ايجاد عناصر <to>, <from>, و <body> في وثيقةXML و انتاج نفس الناتج.
تعد القدرة على مد XML من دون انهيار التطبيقات واحدة من أهم ميزات .XML
يمكن لعناصر XML ان تحوي على لواحق كما هي الحال في HTML.
تعطي اللواحق معلومات اضافية عن العناصر.
لواحق XML
تعطي اللواحق معلومات اضافية عن العناصر في .HTML
<img src="computer.gif">
<a href="demo.asp">
غالبا ما تعطي اللواحق معلومات غير موجودة في البيانات. في المثال التالي, نوع الملف ليس له أية علاقة بالبيانات و لكنه ضروري للتطبيقات التي ترغب بالتلاعب بالعنصر:
<file type="gif">computer.gif</file>
يجب اقتباس لواحق XML
يجب اقتباس لواحق XML على الدوام اما باستخدام قوس مفرد أو قوسين صغيرين. لتحديد جنس الشخص يمكن كتابة عنصر الشخص كالتالي:
<person sex="female">
أو على الشكل التالي:
<person sex='female'>
ازا كانت قيمة اللاحقة بذاتها تحوي على اقتباس مزدوج استخدم قوس مفرد كما في يوضح هذا المثال:
<gangster name='George "Shotgun" Ziegler'>
أو استخدم رموز entities:
<gangster name="George "Shotgun" Ziegler">
عناصر XML أم اللواحق
انظر الى هذه الامثلة:
<person sex="female">
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
<person>
<sex>أنثى</sex>
<firstname>Anna</firstname>
<lastname>Smith</lastname>
</person>
في المثال الأول يعتبر الجنس لاحقة بينما في المثال الاخير فانه يعتبر عنصر. و مع ذلك فكلا المثالين يعطيان نفس المعلومات.
لا يوجد اية قواعد سواء في استخدام اللواحق أو استخدام العناصر. اللواحق مفيدة في HTML . أما في XML فأنا أنصح بتجنب استخدامهم. استخدم العناصر بدلا من اللواحق في .XML
طريقتي المفضلة
تحتوي الامثلة الثلاثة الاتية على نفس المعلومات بالضبط:
في المثال الاول استخدم لاحقة التاريخ:
<note date="10/01/2008">
<to>Tove</to>
<from>Jani</from>
<heading>تذكير</heading>
<body>لا تنساني هذا الاسبوع</body>!
</note>
أما في المثال الثاني فان عنصر التاريخ قد استخدم:
<note>
<date>10/01/2008</date>
<to>Tove</to>
<from>Jani</from>
<heading>تذكير</heading>
<body>لا تنساني هذا الاسبوع</body>!
</note>
في المثال الثالث عنصر التاريخ الممدد قد استخدم: (هذا ما أفضله حقا):
<note>
<date>
<day>10</day>
<month>01</month>
<year>2008</year>
</date>
<to>Tove</to>
<from>Jani</from>
<heading>تذكير</heading>
<body>لا تنساني هذا الاسبوع</body>
</note>
تجنب اللواحق في XML
بعض المشاكل التي يمكن أن تواجهها في حال استخدامك للواحق:
- لا يمكن للواحق أن تحوي على قيم متعددة (بينما العناصر يمكنها ذلك)
- لا يمكن للواحق أن تحوي على بنية الشجرة (بينما العناصر يمكنها ذلك)
- ليس من السهل توسيع اللواحق (من أجل استخدامها في المستقبل)
- انه من الصعب قراءة و حفظ اللواحق. لذلك استخدم العناصر من أجل البيانات و استخدم اللواحق من أجل المعلومات التي ليس لها صلة بالبيانات.
حاول ألا تنتهي بهذا الشكل:
<note day="10" month="01" year="2008"
to="Tove" from="Jani" heading="Reminder"
body="لا تنساني هذا الاسبوع"
</note>
لواحق XML مع ميتاداتا (Metadata)
في بعض الأحيان يعين للعناصر مراجع ID. تستخدم هذه IDs لتعريف عناصر XML بنفس الطريقة التي تعرف بها id اللواحق في .HTML
للتوضيح انظر الى هذا المثال:
<messages>
<note id="501">
<to>Tove</to>
<from>Jani</from>
<heading>تذكير</heading>
<body>لا تنساني هذا الاسبوع!</body>
</note>
<note id="502">
<to>Jani</to>
<from>Tove</from>
<heading>اعادة تذكير</heading>
<body>انني لن</body>
</note>
</messages>
استخدمت لواحق id في المثال السابق لتعريف الملاحظات المختلفة. و هي بذلك ليست جزأ من الملاحظة ذاتها.
ما أحاول قوله هنا هو أنه يجب تخزين ميتاديتا (بيانات عن البيانات) كـ لواحق و تخزين البيانات نفسها كـ عناصر.