English 中文(简体)
XML Schema (XSD): How to express "At most one element from group A and at most one element from group b"?
原标题:

Say I have two sets of XML elements:

<One/>
<Two/>
<Three/>

And

<A/>
<B/>
<C/>

And I want to have them as children of a bucket element:

<Bucket>
   <A/>
   <One/>
</Bucket>

Or

<Bucket>
   <C/>
   <Two/>
</Bucket>

But I don t want to allow more than one element from either set of elements. I.e:

<Bucket>
   <A/>
   <B/>
   <One/>
</Bucket>

and

<Bucket>
   <A/>
   <One/>
   <Two/>
</Bucket>

would be invalid. How might I express this in my XML Schema?

I thought to try xs:unique but that prevents name() and local-name() usage in the field or selector.

UPDATE

The full solution is:

<xs:element name="Bucket">
  <xs:complexType>
    <xs:sequence>
      <xs:choice minOccurs="0">
        <xs:element name="A"/>
        <xs:element name="B"/>
        <xs:element name="C"/>
      </xs:choice>
      <xs:choice minOccurs="0">
        <xs:element name="One"/>
        <xs:element name="Two"/>
        <xs:element name="Three"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
</xs:element>
最佳回答

I d go with something like,

<xs:element name="Bucket">
  <xs:complexType>
    <xs:sequence>
      <xs:choice>
        <xs:element name="A"/>
        <xs:element name="B"/>
        <xs:element name="C"/>
      </xs:choice>
      <xs:choice>
        <xs:element name="One"/>
        <xs:element name="Two"/>
        <xs:element name="Three"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>
</xs:element>

But probably with better types defined to represent the choices instead of having them inline like that. But the general idea is the same.

By default, minOccurs and maxOccurs are set to 1, so by default this doesn t permit multiples of each type to be present. It also means they aren t optional. If you want either group to be optional, you should add minOccurs= 0 to the <xs:choice> element.

问题回答

暂无回答




相关问题
how to represent it in dtd?

I have two element action and guid. guid is a required field when action is add. but when action is del it will not appear in file. How to represent this in dtd ?

.Net application configuration add xml-data

I need to add xml-content to my application configuration file. Is there a way to add it directly to the appSettings section or do I need to implement a configSection? Is it possible to add the xml ...

XStream serializing collections

I have a class structure that I would like to serialize with Xstream. The root class contains a collection of other objects (of varying types). I would like to only serialize part of the objects that ...

MS Word splits words in its XML format

I have a Word 2003 document saved as a XML in WordProcessingML format. It contains few placeholders which will be dynamically replaced by an appropriate content. But, the problem is that Word ...

Merging an XML file with a list of changes

I have two XML files that are generated by another application I have no control over. The first is a settings file, and the second is a list of changes that should be applied to the first. Main ...

How do I check if a node has no siblings?

I have a org.w3c.dom.Node object. I would like to see if it has any other siblings. Here s what I have tried: Node sibling = node.getNextSibling(); if(sibling == null) return true; else ...

Ordering a hash to xml: Rails

I m building an xml document from a hash. The xml attributes need to be in order. How can this be accomplished? hash.to_xml

热门标签