كيف يمكنك إجراء سلسلة من العناصر الاختيارية التي يجب أن تكون بالترتيب في مخطط XML؟

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

  •  06-09-2019
  •  | 
  •  

سؤال

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

<xs:element name="rods" maxOccurs="1" minOccurs="1">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="green" type="xs:positiveInteger" />
   <xs:element name="white" type="xs:positiveInteger" />
   <xs:element name="blue" type="xs:positiveInteger" />
   <xs:element name="yellow" type="xs:positiveInteger" />
   <xs:element name="red" type="xs:positiveInteger" />
   <xs:element name="tan" type="xs:positiveInteger" />
   <xs:element name="gray" type="xs:positiveInteger" />
   <xs:element name="black" type="xs:positiveInteger" />
  </xs:sequence>
 </xs:complexType>
</xs:element>

وسوف تسمح XML مثل هذا:

<rods>
 <green>142</green>
 <white>34</white>
 <gray>65</gray>
</rods>

MSDN لديه هذا أن يقول عن ذلك:

يوضح المثال التالي عنصر (Zooanimals) الذي يمكن أن يكون له صفر أو أكثر من العناصر التالية، الفيل، الدب، الزرافة، في عنصر التسلسل.

<xs:element name="zooAnimals">
      <xs:complexType>
            <xs:sequence minOccurs="0" maxOccurs="unbounded">
               <xs:element name="elephant"/>
               <xs:element name="bear"/>
               <xs:element name="giraffe"/>
            </xs:sequence>
      </xs:complexType>
</xs:element>

W3Schools تقترح نفس الشيء. ومع ذلك، لا يحب كل من Visual Studio وخدمة التحقق من الصحة عبر الإنترنت ما هو مقترح.

هنا هو ما لدي في الوقت الراهن:

<xs:element name="rods" maxOccurs="1" minOccurs="1">
 <xs:complexType>
  <xs:sequence minOccurs="0" maxOccurs="1">
   <xs:element name="green" type="xs:positiveInteger" />
   <xs:element name="white" type="xs:positiveInteger" />
   <xs:element name="blue" type="xs:positiveInteger" />
   <xs:element name="yellow" type="xs:positiveInteger" />
   <xs:element name="red" type="xs:positiveInteger" />
   <xs:element name="tan" type="xs:positiveInteger" />
   <xs:element name="gray" type="xs:positiveInteger" />
   <xs:element name="black" type="xs:positiveInteger" />
  </xs:sequence>
 </xs:complexType>
</xs:element>

وهنا XML:

<rods>
 <green>142</green>
 <white>34</white>
 <gray>65</gray>
</rods>

يدعي Visual Studio 2005 أن "الرمادي" غير صالح "الأزرق" المتوقع، لذلك من الواضح أنه يريد كل الأطفال

شكرا،

إريك

هل كانت مفيدة؟

المحلول

<xs:element name="rods">
    <xs:complexType>
        <xs:sequence>
                <xs:element minOccurs="0" name="green" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="white" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="blue" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="yellow" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="red" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="tan" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="gray" type="xs:positiveInteger" />
                <xs:element minOccurs="0" name="black" type="xs:positiveInteger" />
        </xs:sequence>
    </xs:complexType>
</xs:element>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top