JavaRush /مدونة جافا /Random-AR /أساسيات XML لمبرمج جافا. الجزء 2 من 3
Ярослав
مستوى
Днепр

أساسيات XML لمبرمج جافا. الجزء 2 من 3

نشرت في المجموعة

مقدمة

مرحبا عزيزي القراء لمقالتي. هذه هي المقالة الثانية في السلسلة حول XML، وستتحدث هذه المقالة عن مساحة اسم XML ومخطط XML.
أساسيات XML
في الآونة الأخيرة، لم أكن أعرف شيئًا عن هذا الأمر، لكنني أتقنت الكثير من المواد وسأحاول شرح هذين الموضوعين المهمين بكلمات بسيطة. أريد أن أقول على الفور أن المخططات هي آلية متقدمة للغاية للتحقق من صحة مستندات XML وهي أكثر وظيفية بكثير من DTDs، لذلك لن تكون هناك دراسة كاملة لها هنا. هيا بنا نبدأ :)

مساحة اسم XML

مساحة الاسم تعني "مساحة الاسم"، ولكن في هذه المقالة سأستبدل التعبير الروسي بمساحة الاسم ببساطة، لأنه أقصر وأسهل في الفهم. XML Namespace هي تقنية هدفها الرئيسي هو التأكد من أن جميع العناصر فريدة في ملف XML وعدم وجود أي ارتباك. وبما أن هذه دورات Java، فإن نفس التقنية متوفرة أيضًا في حزم Java. إذا كان بإمكاننا وضع فصلين يحملان نفس الاسم بجوار بعضهما البعض واستخدامهما، فكيف يمكننا تحديد الفصل الذي نحتاجه؟ تم حل هذه المشكلة عن طريق الحزم - يمكننا ببساطة وضع الفئات في حزم مختلفة واستيرادها من هناك، مع تحديد الاسم الدقيق للحزمة المطلوبة والمسار إليها، أو ببساطة تحديد المسار الكامل للفئة المطلوبة. أساسيات XML لمبرمج جافا.  الجزء 2 من 3 - 1الآن، يمكننا أن نفعل هذا:
public class ExampleInvocation {
    public static void main(String[] args) {
        // Creation экземпляра класса из первого пакета.
        example_package_1.Example example1 = new example_package_1.Example();

        // Creation экземпляра класса из второго пакета.
        example_package_2.Example example2 = new example_package_2.Example();

        // Creation экземпляра класса из третьего пакета.
        example_package_3.Example example3 = new example_package_3.Example();
    }
}
في XML Namespace، كل شيء متماثل إلى حد كبير، ولكنه مختلف قليلاً. الجوهر هو نفسه: إذا كانت العناصر هي نفسها (مثل الفئات)، فعلينا فقط استخدامها في مساحات أسماء مختلفة (حدد الحزم)، فحتى لو بدأت أسماء العناصر (الفئات) في التطابق، فسوف نستمر في ذلك الوصول إلى عنصر محدد من المساحة (الحزمة). على سبيل المثال: لدينا عنصرين في XML - التنبؤ (Oracle) وقاعدة بيانات Oracle.
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <oracle>
        <connection value="jdbc:oracle:thin:@10.220.140.48:1521:test1" />
        <user value="root" />
        <password value="111" />
    </oracle>

    <oracle>
        Сегодня вы будете заняты весь день.
    </oracle>
</root>
وعندما نقوم بمعالجة ملف XML هذا، سنكون في حيرة شديدة إذا تلقينا تنبؤًا بدلاً من قاعدة البيانات، ثم عدنا أيضًا. ومن أجل حل مشكلة تصادم العناصر، يمكننا أن نخصص لكل عنصر منها مساحة خاصة به للتمييز بينها. هناك سمة خاصة لهذا - xmlns:prefix= "قيمة فريدة لمساحة الاسم". يمكننا بعد ذلك وضع بادئة للعناصر للإشارة إلى أنها جزء من مساحة الاسم تلك (بشكل أساسي، يتعين علينا إنشاء مسار الحزمة - مساحة الاسم، ثم بادئة كل عنصر بالحزمة التي ينتمي إليها).
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <database:oracle xmlns:database="Unique ID #1">
        <connection value="jdbc:oracle:thin:@10.220.140.48:1521:test1" />
        <user value="root" />
        <password value="111" />
    </database:oracle>

    <oracle:oracle xmlns:oracle="Unique ID #2">
        Сегодня вы будете заняты весь день.
    </oracle:oracle>
</root>
في هذا المثال، قمنا بتعريف مساحتي أسماء: قاعدة البيانات وأوراكل. يمكنك الآن استخدام بادئات مساحة الاسم قبل العناصر. لا داعي للخوف إذا كان هناك شيء غير واضح الآن. في الواقع، الأمر بسيط جدًا. في البداية، أردت أن أكتب هذا الجزء من المقال بسرعة أكبر، ولكن بعد يوم الأربعاء قررت أنني بحاجة إلى إيلاء المزيد من الاهتمام لهذا الموضوع، لأنه من السهل أن أشعر بالارتباك أو عدم فهم شيء ما. الآن سيتم إيلاء الكثير من الاهتمام لسمة xmlns. وهكذا مثال آخر:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns="https://www.standart-namespace.com/" xmlns:gun="https://www.gun-shop.com/" xmlns:fish="https://www.fish-shop.com/">
    <gun:shop>
        <gun:guns>
            <gun:gun name="Revolver" price="1250$" max_ammo="7" />
            <gun:gun name="M4A1" price="3250$" max_ammo="30" />
            <gun:gun name="9mm Pistol" price="450$" max_ammo="12" />
        </gun:guns>
    </gun:shop>

    <fish:shop>
        <fish:fishes>
            <fish:fish name="Shark" price="1000$" />
            <fish:fish name="Tuna" price="5$" />
            <fish:fish name="Capelin" price="1$" />
        </fish:fishes>
    </fish:shop>
</root>
يمكنك رؤية XML العادي باستخدام مسدس المساحات للعناصر الفريدة لمتجر الأسلحة والأسماك لصيد الأسماك للعناصر الفريدة. يمكنك أن ترى أنه من خلال إنشاء المساحات، استخدمنا عنصر متجر واحد لشيئين مختلفين في وقت واحد - مخزن أسلحة ومخزن أسماك، ونحن نعرف بالضبط نوع المتجر بفضل حقيقة أننا أعلنا عن المساحات. الشيء الأكثر إثارة للاهتمام سيبدأ في المخططات، عندما سنكون قادرين على التحقق من صحة الهياكل المختلفة بنفس العناصر بهذه الطريقة. xmlns هي سمة للإعلان عن مساحة الاسم، ويمكن تحديدها في أي عنصر. مثال على إعلان مساحة الاسم:
xmlns:shop= «https://barber-shop.com/»
بعد النقطتين توجد بادئة - وهذا مرجع مسافة يمكن استخدامه بعد ذلك قبل العناصر للإشارة إلى أنها تأتي من تلك المساحة. يجب أن تكون قيمة xmlns عبارة عن سلسلة فريدة. من المهم جدًا فهم هذا: من الشائع جدًا استخدام روابط مواقع الويب أو عناوين URI للإعلان عن مساحة الاسم. تعتبر هذه القاعدة قياسية لأن عنوان URI أو عنوان URL الخاص بالرابط فريد من نوعه، ولكن هذا هو المكان الذي يصبح فيه الأمر مربكًا للغاية. تذكر فقط: يمكن أن تكون القيمة أي سلسلة تريدها، ولكن للتأكد من أنها فريدة ومعيارية، تحتاج إلى استخدام عنوان URL أو URI. تظهر حقيقة أنه يمكنك استخدام أي سلاسل في المثال في Oracle:
xmlns:oracle="Unique ID #2"
xmlns:database="Unique ID #1"
عندما تعلن عن مساحة اسم، يمكنك استخدامها على العنصر نفسه وعلى جميع العناصر الموجودة فيه، بحيث يمكن استخدام مساحات الأسماء المعلنة على العنصر الجذر على جميع العناصر. ويمكن رؤية ذلك في المثال الأخير، وهنا مثال أكثر تحديدا:
<?xml version="1.0" encoding="UTF-8"?>
<root>
    <el1:element1 xmlns:el1="Element#1 Unique String">
        <el1:innerElement>

        </el1:innerElement>
    </el1:element1>


    <el2:element2 xmlns:el2="Element#2 Unique String">
        <el2:innerElement>

        </el2:innerElement>
    </el2:element2>


    <el3:element3 xmlns:el3="Element#3 Unique String">
        <el3:innerElement>
            <el1:innerInnerElement> <!-- Так нельзя, потому что пространство el1 объявлено только в первом элементе, потому может использовать только внутри первого element и его внутренних элементов. -->

            </el1:innerInnerElement>
        </el3:innerElement>
    </el3:element3>
</root>
إليك تفاصيل مهمة: توجد أيضًا مساحة اسم قياسية في العنصر الجذر. إذا قمت بالإعلان عن مساحات أسماء أخرى، فإنك بذلك تتجاوز المساحة الافتراضية ولا يمكنك استخدامها. ثم تحتاج إلى وضع نوع من البادئة الفضائية أمام العنصر الجذر، أي ما أعلنته سابقًا. ومع ذلك، يمكن أيضًا خداع ذلك: يمكنك الإعلان عن المساحة القياسية بشكل صريح. يكفي فقط عدم استخدام بادئة بعد xmlns، ولكن كتابة بعض القيمة على الفور، وجميع العناصر الخاصة بك بدون بادئة ستنتمي إلى مساحة الاسم المحددة هذه. المثال الأخير استخدم هذا:
<root xmlns="https://www.standart-namespace.com/" xmlns:gun="https://www.gun-shop.com/" xmlns:fish="https://www.fish-shop.com/">
لقد أعلنا عن المساحة القياسية صراحةً لتجنب الحاجة إلى استخدام البندقية أو السمكة، نظرًا لأن العنصر الجذري ليس هو كيان متجر صيد أو سلاح، لذا فإن استخدام أي من المساحة سيكون غير صحيح منطقيًا. التالي: إذا قمت بإنشاء xmlns:a وxmlns:b، لكن لهما نفس القيمة، فهذه هي نفس المساحة وليستا فريدتين. ولهذا السبب يجب عليك دائمًا استخدام قيم فريدة، لأن انتهاك هذه القاعدة قد يؤدي إلى حدوث عدد كبير من الأخطاء. على سبيل المثال، إذا كان لدينا مسافات تم الإعلان عنها بهذا الشكل:
xmlns="https://www.standart-namespace.com/" xmlns:gun="https://www.gun-shop.com/" xmlns:fish="https://www.gun-shop.com/"
ومن ثم، سيصبح متجر صيد الأسماك الخاص بنا مخزنًا للأسلحة، وستظل البادئة عبارة عن متجر أسماك. هذه كلها النقاط الرئيسية للمساحات. لقد أمضيت الكثير من الوقت في جمعها جميعًا وتقليلها، ثم التعبير عنها بوضوح، نظرًا لأن المعلومات المتعلقة بالمساحات الموجودة على الإنترنت ضخمة جدًا وغالبًا ما تكون مجرد ماء، لذا فإن معظم كل ما هو موجود هنا - تعلمته بنفسي من خلال التجربة والخطأ. إذا كان لا يزال لديك أسئلة، يمكنك محاولة قراءة المواد باستخدام الروابط الموجودة في نهاية المقالة.

مخطط XML

أريد أن أقول على الفور أن هذه المقالة لن تكون سوى غيض من فيض، لأن الموضوع واسع جدا. إذا كنت ترغب في التعرف على المخططات بمزيد من التفاصيل وتعلم كيفية كتابتها بنفسك بأي تعقيد، ففي نهاية المقالة سيكون هناك رابط حيث سيكون كل شيء حول أنواع مختلفة وقيود وإضافات وما إلى ذلك. أريد أن أبدأ بالنظرية. تحتوي المخططات على تنسيق .xsd (تعريف مخطط xml) وهي بديل أكثر تقدمًا وشعبية لـ DTDs: يمكنها أيضًا إنشاء عناصر ووصفها وما إلى ذلك. ومع ذلك، تمت إضافة الكثير من المكافآت: التحقق من النوع ودعم مساحة الاسم ووظائف أوسع. هل تتذكر عندما تحدثنا عن DTD، كان هناك ناقص وهو أنه لا يدعم المسافات؟ الآن بعد أن درسنا هذا، سأشرح: إذا كان من الممكن استيراد مخططين أو أكثر من DTD، حيث توجد عناصر متطابقة، فسيكون لدينا تصادمات (مصادفات) ولن نتمكن من استخدامها على الإطلاق، لأن ليس من الواضح ما هو العنصر الذي نحتاجه. يحل XSD هذه المشكلة لأنه يمكنك استيراد المخططات إلى مساحة واحدة محددة واستخدامها. بشكل أساسي، يحتوي كل مخطط XSD على مساحة مستهدفة، مما يعني المساحة التي يجب كتابة المخطط فيها في ملف XML. وبالتالي، في ملف XML نفسه، نحتاج فقط إلى إنشاء هذه المساحات المحددة مسبقًا في المخططات وتعيين بادئات لها، ثم توصيل المخططات الضرورية بكل منها، وبعد ذلك يمكننا استخدام عناصر المخطط بأمان، واستبدال البادئات من المساحة التي استوردنا فيها المخططات. وعليه، لدينا مثال:
<?xml version="1.0" encoding="UTF-8"?>
<house>
    <address>ул. Есенина, дом №5</address>
    <owner name="Ivan">
        <telephone>+38-094-521-77-35</telephone>
    </owner>
</house>
نريد التحقق من صحة ذلك باستخدام المخطط. أولاً نحتاج إلى مخطط:
<?xml version="1.0"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="https://www.nedvigimost.com/">
    <element name="house">
        <complexType>
            <sequence>
                <element name="address" type="string" maxOccurs="unbounded" minOccurs="0" />
                <element name="owner" maxOccurs="unbounded" minOccurs="0" >
                    <complexType>
                        <sequence>
                            <element name="telephone" type="string" />
                        </sequence>
                        <attribute name="name" type="string" use="required"/>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>
كما ترون، المخططات هي أيضًا ملفات XML. تكتب ما تحتاجه مباشرة في XML. هذا المخطط قادر على التحقق من صحة ملف XML من المثال أعلاه. على سبيل المثال: إذا لم يكن للمالك اسم، فسوف ترى الدائرة ذلك. أيضًا، بفضل عنصر التسلسل، يجب أن يأتي العنوان دائمًا أولاً، ثم مالك المنزل. هناك عناصر عادية ومعقدة. العناصر العادية هي عناصر تقوم بتخزين نوع معين فقط من البيانات. مثال:
<element name="telephone" type="string" />
هذه هي الطريقة التي نعلن بها عن العنصر الذي يخزن سلسلة. يجب ألا يكون هناك عناصر أخرى داخل هذا العنصر. هناك أيضًا عناصر معقدة. العناصر المعقدة قادرة على تخزين العناصر والصفات الأخرى داخل نفسها. ثم لا تحتاج إلى تحديد النوع، ولكن فقط ابدأ في كتابة نوع معقد داخل العنصر.
<complexType>
    <sequence>
        <element name="address" type="string" maxOccurs="unbounded" minOccurs="0" />
        <element name="owner" maxOccurs="unbounded" minOccurs="0" >
            <complexType>
                <sequence>
                    <element name="telephone" type="string" />
                </sequence>
                <attribute name="name" type="string" use="required"/>
            </complexType>
        </element>
    </sequence>
</complexType>
كان من الممكن أيضًا القيام بذلك بشكل مختلف: يمكنك إنشاء نوع معقد بشكل منفصل، ثم استبداله في الكتابة. فقط أثناء كتابة هذا المثال، لسبب ما، كان من الضروري الإعلان عن المسافة تحت نوع من البادئة، وعدم استخدام المعيار. على العموم أصبح الأمر كالتالي:
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="https://www.nedvigimost.com/">
    <xs:element name="house" type="content" />

    <xs:complexType name="content">
        <xs:sequence>
            <xs:element name="address" type="xs:string" maxOccurs="unbounded" minOccurs="0" />
            <xs:element name="owner" maxOccurs="unbounded" minOccurs="0" >
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="telephone" type="xs:string" />
                    </xs:sequence>
                    <xs:attribute name="name" type="xs:string" use="required"/>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
    </xs:complexType>
</xs:schema>
بهذه الطريقة، يمكننا إنشاء أنواعنا الخاصة بشكل منفصل ثم استبدالها في مكان ما في سمة النوع. يعد هذا مناسبًا جدًا لأنه يسمح لك باستخدام نوع واحد في أماكن مختلفة. أود أن أتحدث أكثر عن توصيل الدوائر وأنتهي هنا. هناك طريقتان لتوصيل الدائرة: بمساحة معينة والاتصال فقط.

الطريقة الأولى لتوصيل الدائرة

تفترض الطريقة الأولى أن الدائرة لها مساحة مستهدفة محددة. يتم تحديده باستخدام سمة targetNamespace في عنصر المخطط. بعد ذلك، يكفي إنشاء هذه المساحة نفسها في ملف XML، ثم "تحميل" المخطط هناك:
<?xml version="1.0" encoding="UTF-8"?>
<nedvig:house xmlns:nedvig="https://www.nedvigimost.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.nedvigimost.com/ example_schema1.xsd">
    <address>ул. Есенина, дом №5</address>
    <owner name="Ivan">
        <telephone>+38-094-521-77-35</telephone>
    </owner>
</nedvig:house>
من المهم أن نفهم سطرين:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemeLocation="https://www.nedvigimost.com/ example_schema1.xsd"
السطر الأول - فقط تذكره. فكر في الأمر ككائن يساعد في تحميل المخططات حيث يجب أن تذهب. السطر الثاني هو تنزيل محدد. يقبل schemaLocation قائمة قيم النموذج "قيمة - قيمة"، مفصولة بمسافة. الوسيطة الأولى هي مساحة الاسم، والتي يجب أن تطابق مساحة الاسم الهدف في المخطط (قيمة مساحة الاسم المستهدفة). الوسيطة الثانية هي المسار النسبي أو المطلق للمخطط. وبما أن هذه قيمة قائمة، يمكنك وضع مسافة بعد المخطط في المثال، وإدخال المساحة المستهدفة واسم مخطط آخر مرة أخرى، وهكذا بقدر ما تريد. مهم:لكي يتمكن المخطط من التحقق من صحة شيء ما لاحقًا، يجب عليك الإعلان عن هذه المساحة واستخدامها مع بادئة. انظر بعناية إلى المثال الأخير:
<?xml version="1.0" encoding="UTF-8"?>
<nedvig:house xmlns:nedvig="https://www.nedvigimost.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.nedvigimost.com/ example_schema1.xsd">
    <address>ул. Есенина, дом №5</address>
    <owner name="Ivan">
        <telephone>+38-094-521-77-35</telephone>
    </owner>
</nedvig:house>
لقد أنشأنا هذه المساحة المستهدفة على البادئة nedvig ثم استخدمناها. وهكذا، بدأ التحقق من صحة عناصرنا، منذ أن بدأنا في استخدام المساحة التي تتم الإشارة إليها في مساحة المخطط المستهدف.

الطريقة الثانية لتوصيل الدائرة

الطريقة الثانية لتوصيل الدائرة تعني أن الدائرة ليس لها مساحة مستهدفة محددة. ثم يمكنك ببساطة توصيله بملف XML وسيقوم بالتحقق من صحته. يتم ذلك بنفس الطريقة تقريبًا، فقط لا يمكنك الإعلان عن مسافات على الإطلاق في ملف XML، ولكن ببساطة قم بتوصيل المخطط.
<?xml version="1.0" encoding="UTF-8"?>
<house xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="example_schema1.xsd">
    <address>ул. Есенина, дом №5</address>
    <owner name="Ivan">
        <telephone>+38-094-521-77-35</telephone>
    </owner>
</house>
كما ترون، يتم ذلك باستخدام noNamespaceSchemaLocation وتحديد المسار إلى المخطط. حتى لو لم يكن للمخطط مساحة مستهدفة، فسيتم التحقق من صحة المستند. واللمسة الأخيرة: يمكننا استيراد الرسوم البيانية الأخرى إلى الرسوم البيانية، ثم استخدام عناصر من رسم بياني واحد في آخر. وبالتالي، يمكننا استخدام العناصر الموجودة في بعض الدوائر الموجودة بالفعل في دوائر أخرى. مثال:

المخطط حيث يتم الإعلان عن نوع المالك:

<?xml version="1.0" encoding="UTF-8" ?>
<schema targetNamespace="bonus" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
        <complexType name="owner">
            <all>
                <element name="telephone" type="string" />
            </all>
            <attribute name="name" type="string" />
        </complexType>
</schema>

المخطط الثاني والذي يستخدم نوع المالك من المخطط الأول:

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="main" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:bonus="bonus" elementFormDefault="qualified">
    <import namespace="bonus" schemaLocation="xsd2.xsd" />
    <element name="house">
        <complexType>
            <all>
              <element name="address" type="string" />
                <element name="owner" type="bonus:owner" />
            </all>
        </complexType>
    </element>
</schema>
يستخدم المخطط الثاني البناء التالي:
<import namespace="bonus" schemaLocation="xsd2.xsd" />
باستخدامه، قمنا باستيراد الأنواع والعناصر من مخطط إلى آخر إلى مساحة المكافأة. وبالتالي، يمكننا الوصول إلى المكافأة: نوع المالك. وفي السطر التالي استخدمناه:
<element name="owner" type="bonus:owner" />
أيضا القليل من الاهتمام للسطر التالي:
elementFormDefault="qualified"
تم الإعلان عن هذه السمة في المخطط وتعني أنه في ملفات XML، يجب الإعلان عن كل عنصر ببادئة صريحة قبله. إذا لم يكن هناك، فنحن بحاجة فقط إلى الإعلان عن عنصر خارجي ببادئة، ونحتاج أيضًا إلى تعيين بادئات في جميع العناصر الموجودة بالداخل، مما يشير بوضوح إلى أننا نستخدم عناصر هذا المخطط بالضبط. وهنا، في الواقع، مثال لملف XML تم التحقق من صحته بواسطة مخطط قام باستيراد مخطط آخر:
<?xml version="1.0" encoding="UTF-8"?>
<nedvig:house xmlns:nedvig="main" xmlns:bonus="bonus" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="main xsd.xsd">
    <nedvig:address>ул. Есенина, дом №5</nedvig:address>
    <nedvig:owner name="Ivan">
        <bonus:telephone>+38-094-521-77-35</bonus:telephone>
    </nedvig:owner>
</nedvig:house>
على الخط:
<bonus:telephone>+38-094-521-77-35</bonus:telephone>
نحن بحاجة إلى الإعلان بوضوح عن مساحة الاسم الإضافية، والتي تشير إلى المساحة المستهدفة للمخطط الأول، نظرًا لأن elementFormDefault مؤهل (تحقق)، لذلك يجب أن تشير جميع العناصر بوضوح إلى مساحتها.

نهاية المقال

المقالة التالية ستكون الأخيرة في السلسلة وستتناول بالفعل معالجة ملفات XML باستخدام Java. سوف نتعلم الحصول على المعلومات بطرق مختلفة وهكذا. أتمنى أن تكون هذه المقالة مفيدة، وحتى لو كانت هناك أخطاء هنا في مكان ما، فسوف تعلمك شيئًا مفيدًا وجديدًا، أو ربما تمنحك الفرصة لفهم ملفات XML بشكل أفضل. بالنسبة لأولئك الذين يرغبون في استكشاف هذا بمزيد من التفصيل، قررت تجميع مجموعة صغيرة من الروابط:
  • XSD Simple Elements - بدءًا من هذه المقالة، ابدأ القراءة والمضي قدمًا، حيث يتم جمع جميع المعلومات المتعلقة بالمخططات هناك ويتم شرحها بشكل أكثر أو أقل وضوحًا، باللغة الإنجليزية فقط. يمكنك الاستعانة بمترجم.

  • فيديو حول مساحات الأسماء، من المفيد دائمًا الاستماع إلى وجهة نظر أخرى حول شيء ما إذا كانت وجهة النظر الأولى غير واضحة.

  • يعد Namespace XML مثالًا جيدًا على استخدام مساحات الأسماء وهو شامل تمامًا.

  • أساسيات XML - مساحات الأسماء - مقالة قصيرة أخرى عن مساحات الأسماء.

  • تعد أساسيات استخدام مخطط XML لتعريف العناصر أيضًا مرجعًا مفيدًا للغاية حول المخططات، ولكن عليك قراءتها ببطء وبعناية، والتعمق في المادة.

هذا كل شيء مؤكد، وآمل إذا كنت تريد أن تتعلم شيئًا أعمق من هذا، فإن الروابط ستساعدك. لقد قمت بمراجعة كل هذه المصادر بنفسي، ودرست جميع المواد، وبشكل عام، كانت هذه هي الأكثر فائدة من بين جميع المصادر التي نظرت إليها، حيث أن كل واحد منها إما أدى إلى تحسين فهم ما قرأته بالفعل في مكان آخر، أو اسمحوا لي أن أتعلم شيئًا جديدًا، ولكن تم القيام بالكثير أثناء التدريب فقط. لذا، بالنسبة لأولئك الذين يريدون حقًا فهم كل هذا جيدًا، نصيحتي هي: دراسة مساحات الأسماء، ثم كيفية ربط المخططات بسهولة بملفات XML، ثم كيفية كتابة بنية المستند في المخططات. والأهم من ذلك، الممارسة. شكرًا لكم جميعًا على اهتمامكم ونتمنى لك حظًا موفقًا في البرمجة :) المقالة السابقة: [المنافسة] أساسيات XML لمبرمج Java - الجزء 1 من 3 المقالة التالية: [المنافسة] أساسيات XML لمبرمج Java - الجزء 3.1 من 3 - SAX
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION