سؤال

لقد جربت كل <xs:all>, <xs:choice>, and <xs:sequence>

لا يساعد أي من هذه حالتي بشكل مرض.

هل يعرف أي شخص كيف يمكنك التحقق من صحة شيء من هذا القبيل.

<Menu>  
   <SubMenu>
      <MenuItem .. />  
      <MenuItem .. />  
      <MenuItem .. />  
   </SubMenu>  
   <MenuItem .. >  
   <MenuItem .. >  
</Menu>

أين ، تحت <Menu> بطاقة شعار <SubMenu> و/أو <MenuItem> يمكن أن يحدث أي عدد من المرات (0-N) بأي ترتيب. ولكن على الأقل يجب أن يحدث أحدهم على الأقل مرة واحدة.

تجاهل عمليات التحقق من صحة داخل علامات القائمة الفرعية.

سوف نقدر أي مساعدة في هذا الأمر.

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

المحلول

إذا فهمت متطلباتك بشكل صحيح ، فيمكنك عبارة "واحدة من القوائم الفرعية أو Menuitem" تليها عناصر صفر أو أكثر من عناصر Subenu أو Menuitem ". يمكن التعبير عنها بسهولة تامة كتسلسل لخيارين:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <!-- whatever your element needs to be modelled as here -->
    <xs:element name="MenuItem">
        <xs:complexType>
            <xs:attribute name="text"/>
        </xs:complexType>
    </xs:element>

   <!-- only modelling the structure of the child elements here -->
    <xs:element name="SubMenu">
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="1">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
                <xs:choice minOccurs="0" maxOccurs="unbounded">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="Menu">
        <xs:complexType>
            <xs:sequence>
                <xs:choice minOccurs="1" maxOccurs="1">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
                <xs:choice minOccurs="1" maxOccurs="unbounded">
                    <xs:element ref="MenuItem"/>
                    <xs:element ref="SubMenu"/>
                </xs:choice>
            </xs:sequence>          
        </xs:complexType>
    </xs:element>
</xs:schema>

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

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