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]