Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8982161
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 15, 20262026-06-15T20:31:00+00:00 2026-06-15T20:31:00+00:00

I am trying to create a schema definition using XSD 1.1 in which outcome

  • 0

I am trying to create a schema definition using XSD 1.1 in which outcome of one element is dependent on other. For example, I have drop-down for list of countries and list of states for each country. When a person selects a country, only the states of that country can be selected. The pseudo-code of what I am trying to attain looks something like this.

<xs:schema xmlns:ie="http://www.interviewexchange.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="country">       
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:enumeration value="USA" />
            <xs:enumeration value="UK" />
            <xs:enumeration value="India" />
        </xs:restriction>
    </xs:simpleType>
</xs:element>
<xs:element name="state">       
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <assert test="if (country eq 'USA')">
            <xs:enumeration value="MA" />
            <xs:enumeration value="AR" />
            <xs:enumeration value="NY" />
            </assert">
            <assert test="if (country eq 'India')">
            <xs:enumeration value="AP" />
            <xs:enumeration value="TN" />
            <xs:enumeration value="MP" />
            </assert">
        </xs:restriction>
    </xs:simpleType>
</xs:element>

Please suggest me whether I am following the right approach, If I am following the right approach, can anyone give me the code of how this restriction can be attained? Thanks in Advance…

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-15T20:31:01+00:00Added an answer on June 15, 2026 at 8:31 pm

    You’re getting close.

    In XSD 1.1, assertions can only look down into the subtree, not up or over, so if you want to use assertions here, you will want to put them not in the type for ‘state’ but in the type for ‘address’:

    <xs:element name="address">
      <xs:complexType>
        <xs:sequence>
          <xs:element ref="street"/>
          <xs:element ref="city"/>
          <xs:element ref="state" minOccurs="0"/>
          <xs:element ref="country"/>
        </xs:sequence>
        <xs:assert test="(country = 'UK' and not(state))
          or
          (country = 'US' and state = ('MA', 'AR', 'NY'))
          or
          (country = 'IN' and state = ('AP', 'TN', 'MP'))
          "/>
      </xs:complexType>
    </xs:element>
    

    A different approach (also in XSD 1.1) is to use conditional type assignment. This allows an element to be assigned different types based on XPath expressions which can refer to its elements (but not its children). If we move country and state to attributes (and then, for consistency, move street and city to attributes as well), we could use conditional type assignment this way. First, define the various simple types we want for state:

    <xs:simpleType name="US-states">
      <xs:restriction base="xs:NMTOKEN">
        <xs:enumeration value="MA" />
        <xs:enumeration value="AR" />
        <xs:enumeration value="NY" />      
      </xs:restriction>
    </xs:simpleType>
    
    <xs:simpleType name="IN-states">
      <xs:restriction base="xs:NMTOKEN">
        <xs:enumeration value="AP" />
        <xs:enumeration value="TN" />
        <xs:enumeration value="MP" />   
      </xs:restriction>
    </xs:simpleType>
    

    Then define three different complex types for the three different kinds of addresses we want. I’m assuming for illustration that UK addresses don’t get a ‘state’ attribute.

    <xs:complexType name="US-address">
      <xs:attribute name="street" type="xs:string" use="required"/>
      <xs:attribute name="city" type="xs:string" use="required"/>
      <xs:attribute name="state" type="US-states"/>
      <xs:attribute name="country" type="xs:NMTOKEN" use="required"/>
    </xs:complexType>
    <xs:complexType name="UK-address">
      <xs:attribute name="street" type="xs:string" use="required"/>
      <xs:attribute name="city" type="xs:string" use="required"/>
      <xs:attribute name="country" type="xs:NMTOKEN" use="required"/>
    </xs:complexType>
    <xs:complexType name="IN-address">
      <xs:attribute name="street" type="xs:string" use="required"/>
      <xs:attribute name="city" type="xs:string" use="required"/>
      <xs:attribute name="state" type="IN-states"/>
      <xs:attribute name="country" type="xs:NMTOKEN" use="required"/>
    </xs:complexType>
    

    Now we bind the address element to the correct one of these based on the value of ‘country’:

    <xs:element name="address">
      <xs:alternative test="@country='US'" type="US-address"/>
      <xs:alternative test="@country='IN'" type="IN-address"/>
      <xs:alternative test="@country='UK'" type="UK-address"/>
      <xs:alternative type="xs:error"/>
    </xs:element>
    

    The alternatives are tested in order, and the first one whose test evaluates to true assigns the type. The last alternative (without a test attribute) provides a default, which in this case is the error type (no elements or attributes are valid against the error type).

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I'm trying to create a schema for a <property> element which must have a
I am trying to create an XSD schema which will validate the following xml.
I'm trying to create an xsd schema that will validate a map with an
I'm trying create a bot which automatically likes Facebook posts. Using Mechanize I can
I am trying to create a Task schema in my database. One field is
I am trying to create an XML schema in which a lot of types
I am trying to redefine an element definition contained in an external xsd (that
I am trying to create a new Schema in Oracle 11g. I have referred
I'm trying to create a system in Python in which one can select a
I'm trying to create XML Schema using lxml. For the begining something like this:

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.