I'm trying to develop a schema for an existing XML usage (for which no
schema or DTD was ever written before). I've run into a case that I
can't get Xerces-C to validate, and am not sure whether my schema
construction or the parser validation is the problem. I've put together
a simplified version of the schema that shows the problem.
The short statement of the problem is that I have an element 'address'
whose content may be either the single element 'url' or any combination
of the elements 'user', 'host', and 'qual'. I tried to express this as:
<group name='parts'>
<all>
<element ref='dmp:user' minOccurs='0' maxOccurs='1'/>
<element ref='dmp:host' minOccurs='0' maxOccurs='1'/>
<element ref='dmp:qual' minOccurs='0' maxOccurs='1'/>
</all>
</group>
<element name='address'>
<complexType>
<choice>
<group ref='dmp:parts'/>
<element ref='dmp:url'/>
</choice>
</complexType>
</element>
When I try to validate a document against the above (using either
xerces-c version 2.5 or 2.6), I get:
======
> DOMCount -v=always -s -f -n either.xml
Error at file file:///home/lawrence/tmp/groupall/either.xsd, line 24,
char 35
Message: A group whose content is 'all' must only appear as the
content type of a complex type definition.
Error at file /home/lawrence/tmp/groupall/either.xml, line 14, char 13
Message: Element 'user' is not valid for content model: '(url|)'
Error at file /home/lawrence/tmp/groupall/either.xml, line 19, char 13
Message: Element 'user' is not valid for content model: '(url|)'
Errors occurred, no output available
=======
I've attached the document and the test schema. These validate using
the XSV validator at http://www.w3.org/2001/03/webdata/xsv#hlp-warn ,
but if my schema is wrong, this wouldn't be the first time I've found a
case it doesn't catch.
--
Scott Lawrence
Consulting Engineer
Pingtel Corp.
http://www.pingtel.com/
+1.781.938.5306 x162
<?xml version='1.0' encoding='iso-8859-1' standalone='yes'?>
<schema
xmlns:dmp='http://www.sipfoundry.org/sipX/test-00'
targetNamespace='http://www.sipfoundry.org/sipX/test-00'
xmlns='http://www.w3.org/2001/XMLSchema'
>
<element name='url' type='normalizedString' />
<element name='user' type='normalizedString' />
<element name='host' type='normalizedString' />
<element name='qual' type='normalizedString' />
<group name='parts'>
<all>
<element ref='dmp:user' minOccurs='0' maxOccurs='1'/>
<element ref='dmp:host' minOccurs='0' maxOccurs='1'/>
<element ref='dmp:qual' minOccurs='0' maxOccurs='1'/>
</all>
</group>
<element name='address'>
<complexType>
<choice>
<group ref='dmp:parts'/>
<element ref='dmp:url'/>
</choice>
</complexType>
</element>
<element name='addresses'>
<complexType>
<sequence>
<element ref='dmp:address' maxOccurs='unbounded' />
</sequence>
</complexType>
</element>
</schema>
<?xml version='1.0' encoding='iso-8859-1' standalone='yes'?>
<addresses xmlns='http://www.sipfoundry.org/sipX/test-00'
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sipfoundry.org/sipX/test-00
file:///home/lawrence/tmp/groupall/either.xsd"
>
<address>
<url>[EMAIL PROTECTED];batz=3</url>
</address>
<address>
<user>foo</user>
</address>
<address>
<user>foo</user>
<host>bar</host>
</address>
</addresses>
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]