كيف يمكنني إنشاء نوع "أمريكي" قابل لإعادة الاستخدام في مخطط XML؟

StackOverflow https://stackoverflow.com/questions/227434

  •  03-07-2019
  •  | 
  •  

سؤال

لدي مخطط XML يتضمن عناوين متعددة:

<xs:element name="personal_address" maxOccurs="1">
  <!-- address fields go here -->
</xs:element>
<xs:element name="business_address" maxOccurs="1">
  <!-- address fields go here -->
</xs:element>

ضمن كل عنصر عنوان ، أقوم بتضمين تعداد "الدولة الأمريكية":

<xs:simpleType name="state">
    <xs:restriction base="xs:string">
        <xs:enumeration value="AL" />
        <xs:enumeration value="AK" />
        <xs:enumeration value="AS" />
                ....
            <xs:enumeration value="WY" />
        </xs:restriction>
</xs:simpleType>

كيف يمكنني كتابة تعداد "الدولة الأمريكية" مرة واحدة وإعادة استخدامه في كل عنصر من عناصر عنواني؟ أعتذر مقدمًا إذا كان هذا سؤال N00B - لم أكتب أبدًا XSD من قبل.

طعنتي الأولية في ذلك هي ما يلي:

<xs:element name="business_address" maxOccurs="1">
  <!-- address fields go here -->
  <xs:element name="business_address_state" type="state" maxOccurs="1"></xs:element>
</xs:element>
هل كانت مفيدة؟

المحلول

أعتقد أنك على المسارات الصحيحة. أعتقد أن الأمر يتعلق بمساحات أسماء XML. حاول القيام بما يلي:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.example.org/foo"
    xmlns:tns="http://www.example.org/foo"
    elementFormDefault="qualified">
    <xs:element name="business_address">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="business_address_state"
                    type="tns:state" maxOccurs="1" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="state">
        <xs:restriction base="xs:string">
            <xs:enumeration value="AL" />
            <xs:enumeration value="AK" />
            <xs:enumeration value="AS" />
            <xs:enumeration value="WY" />
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

لاحظ أن النوع هو TNS: الدولة ليس مجرد حالة

ثم هذه هي الطريقة التي ستستخدم بها:

<?xml version="1.0" encoding="UTF-8"?>
<business_address xmlns="http://www.example.org/foo"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.example.org/foo foo.xsd ">
    <business_address_state>AL</business_address_state>
</business_address>

لاحظ أن XML يستخدم مساحة الاسم الافتراضية مثل مساحة الأسماء الهدف من XSD

نصائح أخرى

في حين تساعد مساحات الأسماء في الحفاظ على تنظيم المخططات ومنع النزاعات ، فإن مساحة الاسم أعلاه هي التي تسمح بإعادة الاستخدام ، إلا أنها وضع النوع كطفل فوري لـu003Cxs:schema> الجذر الذي يجعله نوعًا عالميًا. (قابلة للاستخدام داخل مساحة الاسم مع مؤهلة مساحة الاسم ومن أي مكان تكون مساحة اسم TNS مرئية مع TNS: مؤهل.)

أفضل إنشاء مخططاتي بعد نهج "Garden of Eden" ، والذي يزيد من إعادة استخدام كل من العناصر والأنواع (ويمكن أن يسهل أيضًا المرجع المنطقي الخارج .

لاحظ أنه في حين أن نمط مخطط "Garden of Eden" يوفر أقصى قدر من إعادة الاستخدام ، فإنه يتضمن أيضًا معظم الأعمال. في الجزء السفلي من هذا المنشور ، قدمت روابط للأنماط الأخرى المغطاة في سلسلة المدونة.

نهج جنة عدن http://blogs.msdn.com/skaufman/archive/2005/05/10/416269.aspx

يستخدم نهجًا معياريًا من خلال تحديد جميع العناصر على مستوى العالم ومثل نهج البندقية الأعمى يتم الإعلان عن جميع تعريفات النوع على مستوى العالم. يتم تعريف كل عنصر عالميًا على أنه طفل فوري للعقدة ويمكن ضبط سمة النوع على أحد الأنواع المعقدة المسماة.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="TargetNamespace" xmlns:TN="TargetNamespace" xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="BookInformation" type="BookInformationType"/>
    <xs:complexType name="BookInformationType">
        <xs:sequence>
            <xs:element ref="Title"/>
            <xs:element ref="ISBN"/>
            <xs:element ref="Publisher"/>
            <xs:element ref="PeopleInvolved" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="PeopleInvolvedType">
        <xs:sequence>
            <xs:element name="Author"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="Title"/>
    <xs:element name="ISBN"/>
    <xs:element name="Publisher"/>
    <xs:element name="PeopleInvolved" type="PeopleInvolvedType"/>
</xs:schema>
ميزة هذا النهج هي أن المخططات قابلة لإعادة الاستخدام. نظرًا لأن كل من العناصر والأنواع محددة على مستوى العالم متاحان لإعادة الاستخدام. يوفر هذا النهج أقصى قدر من المحتوى القابل لإعادة الاستخدام. العيوب هي أن المخطط مطول. سيكون هذا تصميمًا مناسبًا عندما تقوم بإنشاء مكتبات عامة يمكنك من خلاله اتخاذ أي افتراضات حول نطاق عناصر وأنواع المخططات واستخدامها في مخططات أخرى خاصة فيما يتعلق بالتوطيد والنموذج.


نظرًا لأن كل نوع وعنصر متميز له تعريف عالمي واحد ، يمكن أن تكون هذه الجزيئات/المكونات الكنسي مرتبطة بمفردها في قاعدة بيانات. وعلى الرغم من أنه قد يبدو للوهلة الأولى مهمة يدوية مستمرة مرهقة للحفاظ على الارتباطات بين جزيئات/مكونات XSD النصية وقاعدة البيانات ، يمكن لـ SQL Server 2005 إنشاء معرفات مكون المخطط الكنسي عبر البيان في الواقع

CREATE XML SCHEMA COLLECTION

http://technet.microsoft.com/en-us/library/ms179457.aspx

على العكس من ذلك ، لبناء مخطط من الجزيئات الكنسية ، يوفر SQL Server 2005

SELECT xml_schema_namespace function

http://technet.microsoft.com/en-us/library/ms191170.aspx

Ca · غير i · cal المتعلقة بالرياضيات. (من معادلة ، إحداثي ، إلخ) "في أبسط أو نموذج قياسي" http://dictionary.reference.com/browse/canonical

تشمل أنماط مخطط مخطط مخطط أخرى أقل من ذلك والأكثر "

نهج الدمية الروسية http://blogs.msdn.com/skaufman/archive/2005/04/21/410486.aspx

يحتوي المخطط على عنصر عالمي واحد - عنصر الجذر. جميع العناصر والأنواع الأخرى متداخلة بشكل أعمق بشكل تدريجي مع إعطاء الاسم بسبب كل نوع يناسب واحد فوقه. نظرًا لأن العناصر الواردة في هذا التصميم يتم الإعلان عنها محليًا ، فلن يتم إعادة استخدامها من خلال الاستيراد أو تضمين عبارات.

نهج شريحة السلامي http://blogs.msdn.com/skaufman/archive/2005/04/25/411809.aspx

يتم تعريف جميع العناصر على مستوى العالم ولكن يتم تعريف تعريفات النوع محليًا. وبهذه الطريقة ، قد تعيد المخططات الأخرى إعادة استخدام العناصر. مع هذا النهج ، يوفر عنصر عالمي بنوعه المحدد محليًا وصفًا كاملاً لمحتوى العناصر. يتم الإعلان عن هذه المعلومات "شريحة" بشكل فردي ثم تجميعها معًا وقد يتم تجميعها معًا لبناء مخططات أخرى.

نهج البندقية الأعمى http://blogs.msdn.com/skaufman/archive/2005/04/29/413491.aspx

على غرار نهج الدمية الروسي من حيث أن كلاهما يستخدم عنصر عالمي واحد. يصف نهج البندقية الأعمى مقاربة معيارية من خلال تسمية وتحديد جميع تعريفات الأنواع على مستوى العالم (على عكس نهج شريحة Salami الذي يعلن العناصر على مستوى العالم والأنواع محليًا). يصف كل نوع محدد عالميًا "شريحة" فردية ويمكن إعادة استخدامها بواسطة مكونات أخرى. بالإضافة إلى ذلك ، يمكن أن تكون جميع العناصر المعلنة محليًا هي مساحة الاسم أو مساحة الاسم غير المؤهلة (يمكن فتح "الشرائح" أو "مغلق") اعتمادًا على إعداد سمة ElementFormDefault في الجزء العلوي من المخطط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top