[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]
RE: [xml] Failed schema validation with substitution groups and choice
- From: "Buchcik, Kasimier" <k buchcik 4commerce de>
- To: "Michael Romer" <michael romer mail utexas edu>
- Cc: xml gnome org
- Subject: RE: [xml] Failed schema validation with substitution groups and choice
- Date: Tue, 9 May 2006 22:11:14 +0200
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: xml-bounces gnome org [mailto:xml-bounces gnome org] 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/
> xml gnome org
> http://mail.gnome.org/mailman/listinfo/xml
>
>
[Date Prev][Date Next] [Thread Prev][Thread Next]
[Thread Index]
[Date Index]
[Author Index]