Using XML Schema to Force At Least One Item?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Kenneth Love

    Using XML Schema to Force At Least One Item?

    Sorry if this is a newbie question. I couldn't get the correct magic
    incantation for Google to get an answer. :-(

    I'm trying to satisfy a requirement that "at least one of the following
    *must* be present" in an XML Schema. I have come up with two examples
    that almost work.

    Here's the first:

    <xs:element name="LightExam ple1" maxOccurs="3">
    <xs:complexType >
    <xs:choice>
    <xs:element name="A"/>
    <xs:element name="B"/>
    <xs:element name="C"/>
    </xs:choice>
    </xs:complexType>
    </xs:element>

    This doesn't work because it allows multiple A, B, or C elements.

    Here's the second example:

    <xs:element name="LightExam ple2">
    <xs:complexType >
    <xs:sequence>
    <xs:element name="A" minOccurs="0"/>
    <xs:element name="B" minOccurs="0"/>
    <xs:element name="C" minOccurs="0"/>
    </xs:sequence>
    </xs:complexType>
    </xs:element>

    This *almost* works. The only problem is that it allows an empty
    <LightExample 2/> element which fails the "at least one of" portion of
    the requirement.

    Is it possible to do this?

    Kenneth

  • Martin Honnen

    #2
    Re: Using XML Schema to Force At Least One Item?


    Kenneth Love wrote:
    [color=blue]
    > I'm trying to satisfy a requirement that "at least one of the following
    > *must* be present" in an XML Schema. I have come up with two examples
    > that almost work.
    >
    > Here's the first:
    >
    > <xs:element name="LightExam ple1" maxOccurs="3">
    > <xs:complexType >
    > <xs:choice>
    > <xs:element name="A"/>
    > <xs:element name="B"/>
    > <xs:element name="C"/>
    > </xs:choice>
    > </xs:complexType>
    > </xs:element>
    >
    > This doesn't work because it allows multiple A, B, or C elements.[/color]

    Why do multiple elements conflict with your sole requirement "at least
    one of the following *must* be present"?

    --

    Martin Honnen

    Comment

    • Kenneth Love

      #3
      Re: Using XML Schema to Force At Least One Item?

      Okay. I guess I left out the requirement that no more than one of each
      element A, B, or C can appear in the result.

      ABC is valid. C is valid. AA is not. CBC is not.

      The order is not that important to me. If I was provided a solution
      forcing the elements to be in a certain order then that's okay. It's
      okay if the solution provides for the elements to be in any order. I
      would prefer the former, actually.

      I could write a regular expression like this:

      RE = (A, B?, C?) | (A?, B, C?) | (A?, B?, C)

      Any thoughts?

      adTHANKSvance,
      Kenneth Love

      Comment

      Working...