[Home] [By Thread] [By Date] [Recent Entries]

  • From: Rick Jelliffe <ricko@a...>
  • To: xml-dev@l...
  • Date: Mon, 12 Mar 2001 10:55:05 +0800

From: Richard Knapp <warped_user@y...>

>You might elaborate all the combinations:
>
><!ELEMENT Base ( First,
>                 ( Second? | Third? | Fourth?
>                   | (Second, Third) | (Third, Second)
>                   | (Third, Fourth) | (Fourth, Third)
>                   | (Second, Third, Fourth)
>                   | (Fourth, Second, Third)
>                   | (Third, Fourth, Second)
>                   | (Third, Second, Fourth)
>                   | ... you get the idea ...
>                 )
>               )

Another way to do this is to use specializing attributes:

<!ELEMENT Base ( First, Next, Next, Next, Next, Next, Next)>

If you have many Base elements, you can require them to be subclassed.
This gives you a correct number and the correct label but does not
guarantee uniqueness (must be checked another way)
<!ATTLIST Next
     type ( Second | Third | Fourth | Fifth | Sixth ) #REQUIRED >

On the other hand, if you only have one Base element, and you really need to
check uniqueness, you might try
<!ATTLIST Next
    type ID #REQUIRED >
Then the external check would be needed to make sure the IDs were spelled
correctly as "Second" etc.

In XML Schemas you might be able to get what you need using something like
<element name="Base">
    ...
    <sequence>
        <element name="First" >
        <element name="Next" abstract="true" minOccurs="5" maxOccurs="5">
    </sequence>
    ...
</element>
<element name="Second" substitutionGroup="Next">
    <attribute name="uniqueDummy" value="Second" fixed="true" />
</element>
...

and then declare some uniqueness constraint on the "uniqueDummy" attribute
scoped to the Base element. I have not tried it, so I cannot be sure.

Cheers
Rick Jelliffe


Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member