Hi, Fixed in CVS, xmlschemas.c, revision 1.201.
See http://bugzilla.gnome.org/show_bug.cgi?id=341150 In xmlSchemaBuildContentModelForSubstGroup(), xmlAutomataNewOnceTrans2() was incorrectly used instead of xmlAutomataNewTransition2(); seems like a copy&paste bug from the XML_SCHEMA_TYPE_ALL section in xmlSchemaBuildAContentModel(). The usage of xmlAutomataNewOnceTrans2() restricted the members of substitution-groups (except the group's head) to the occurence of 1. Thanks for the thorough report! Regards, Kasimier > -----Original Message----- > From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On > Behalf Of Michael Romer > > > > Greetings. While working on an XML based project for work, I > ran into the > following bug with the libxml2 validator. I've attached a > simple test case > that, when run through xmllint, should reproduce the same results I am > receiving. > > The problem is as follows. The supplied libxml2 validator, > xmllint, will fail > to validate the following instance document against the > schema specified below > if you uncomment the line specified in the instance document; > however when it > is commented, the instance document will validate just fine. > > Instance document: > ------------------ > > <?xml version="1.0" encoding="UTF-8"?> > <TestRoot xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:noNamespaceSchemaLocation="common-schema.xsd"> > <Events> > <TestEvent>Test 1.</TestEvent> > <!-- Uncomment the following element to cause > libxml's xmllint to > fail to validate. --> > <!-- <TestEvent>Test 2.</TestEvent> --> > </Events> > </TestRoot> > > > > Schema to validate against: > --------------------------- > > <?xml version="1.0" encoding="UTF-8"?> > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" > elementFormDefault="qualified" > attributeFormDefault="unqualified"> > > <!-- This is the head of our substitution group for > events that have only > simple content. --> > <xs:element name="SimpleEvent" type="SimpleEventType"/> > > <!-- All SimpleEvent elements have the required set of > attributes --> > <xs:complexType name="SimpleEventType"> > <xs:simpleContent> > <xs:extension base="xs:anySimpleType"> > </xs:extension> > </xs:simpleContent> > </xs:complexType> > > <!-- Common members of the SimpleEvent substitution group --> > <xs:element name="TestEvent" substitutionGroup="SimpleEvent"> > <xs:complexType> > <xs:simpleContent> > <xs:restriction base="SimpleEventType"> > <xs:simpleType> > <xs:restriction base="xs:string"/> > </xs:simpleType> > </xs:restriction> > </xs:simpleContent> > </xs:complexType> > </xs:element> > > <!-- Root element --> > <xs:element name="TestRoot" type="TestRootType"/> > > <!-- Core data type of an audit trail --> > <xs:complexType name="TestRootType"> > <xs:sequence> > <xs:element name="Events"> > <xs:complexType> > <xs:choice minOccurs="0" maxOccurs="unbounded"> > <xs:element ref="SimpleEvent"/> > </xs:choice> > </xs:complexType> > </xs:element> > </xs:sequence> > </xs:complexType> > > </xs:schema> > > > > I have done numerous test cases and pinned the problem to be > the fact that a > substitution group is being used inside the choice group > element, which is > specified to appear zero or more times in an instance > document. The key is > that each choice group contains one SimpleEvent, or any > element that can be > substitutable for SimpleEvent (in this case, TestEvent is > declared to be part > of the SimpleEvent substitution group, so it should work just > fine). In > essense, any choice group that contains an element that can > be substituted by > another element in the corresponding substitution group, and > if the schema > allows for that choice group to appear multiple times in an > instance document, > then the validator will fail to validate any instance > document that has more > than substitutable element specified (as in the above case > when the second > SimpleElement is uncommented from the instance document). > > >From what I can gather, the libxml2 validator is getting > confused and instead of > thinking that the two TestEvent elements in the original > instance document > belong to two separate choice groups, it actually thinks that > they are both in > the same choice group. If this is true, this would explain > the error message > that is obtained when I run xmllint: > > "element TestEvent: Schemas validity error : Element > 'TestEvent': This element > is not expected." > > I have tried changing the choice group to a sequence group, > and the exact same > error occurs. I have also used the following validators, and > they all will > validate the supplied instance document against the supplied > schema without any > problem: Xerces, MSXML 4.0 SP2, MSXML.NET, and XSV, hence > leading me to believe > this is truly a bug with the libxml2 validator. > > I've also filled out a Bugzilla bug report describing what > has been described in > this post. > > Thanks, > Michael Romer > _______________________________________________ > xml mailing list, project page http://xmlsoft.org/ > [email protected] > http://mail.gnome.org/mailman/listinfo/xml > > _______________________________________________ xml mailing list, project page http://xmlsoft.org/ [email protected] http://mail.gnome.org/mailman/listinfo/xml
