- From: Michael Case <mecase@ucdavis.edu>
- Date: Fri, 18 Jan 2002 13:08:31 -0800
- To: Eddie Robertsson <eddie@allette.com.au>
- CC: XSD <xmlschema-dev@w3.org>
Hi, This seems to go against my conception of XML and I don't know how to deal with it :-). In other words, I understand that in XML, particularly in implementations, document order is not guaranteed, am I right? To insist that the XML, therefore, present itself as comments first, then Rotations, seems to fly in the face of that. more below... Thanks again. Eddie Robertsson wrote: > > Hi Michael, > > > 1) When you extend a type, is there anything that says the ORDER of the > > internal elements is implied? I may not understand enough to ask it > > properly. > > After looking at your example below I think I know what your problem is. When you extend a type in > XML Schema it is important to know that the extended types content model will be the base types > particle sequenced together with the particle defined by the child of the extension element. This > means that when you extend a sequence group with another element then you're not actually extending > the base sequence with another element. I use your example to illustrate: > In your base type you have: > > <xsd:sequence> > <xsd:element name = "comment" type = "xsd:string" minOccurs = "0" maxOccurs = "unbounded"/> > </xsd:sequence> > > And then your extended type look like: > > <xsd:complexType name = "RotationSectionType"> > <xsd:complexContent> > <xsd:extension base = "SectionType"> > <xsd:sequence> > <xsd:element ref = "Rotation" minOccurs = "0" maxOccurs ="unbounded"/> > </xsd:sequence> > </xsd:extension> > </xsd:complexContent> > </xsd:complexType> > > When the processor expands this new extended type it will in fact sequence together the two content > models and create the following type: > > <xsd:complexType name = "RotationSectionType"> > <xsd:sequence> > <xsd:sequence> > <xsd:element name = "comment" type = "xsd:string" minOccurs = "0" maxOccurs = > "unbounded"/> > </xsd:sequence> > <xsd:sequence> > <xsd:element ref = "Rotation" minOccurs = "0" maxOccurs ="unbounded"/> > </xsd:sequence> > </xsd:sequence> > </xsd:complexType> Suppose I really wanted comment elements to be interspersed anywhere within a bunch of Rotation elements. Would this do it? <xsd:complexType name = "RotationSectionType"> <xsd:sequence> <xsd:element name = "comment" type = "xsd:string" minOccurs = "0" maxOccurs = "unbounded"/> <xsd:element ref = "Rotation" minOccurs = "0" maxOccurs ="unbounded"/> </xsd:sequence> </xsd:complexType> Maybe I just can't extend types the way I thought I could... > > As you can see this is the cause of your error. In your instance you have: > > <RotationSection label = "blah"> > <comment xmlns = ""/> > <Rotation name = "chfghfhf" theta1 = "0" phi1 = "0" theta2 = "0" phi2 = "0" theta3 = > "0" phi3 = "0"/> > <comment xmlns = ""/> > <comment xmlns = ""/> > </RotationSection> > > but this is not valid since all comment elements (if any are present) need to appear before the > Rotation elements. > > > 2) Why does comment want xmlns=""??? > > This is because you have elementFormDefault="unqualified" in your schema. In short, what this means > is that all elements that you have declared locally (nested within complexTypes or groups) cannot be > qualified with a namespace in the instance document. Since you're using the default namespace > declaration (xmlns = "http://www.cern.ch/cms/DDL") in the instance this means that all elements > without a prefix will be qualified by this namespace. However, the processor expects the comment > element to be unqualified and hence you get an error. There are two solutions to your problem: > > 1) add xmlns="" to the comment elements (What you have) > 2) Change the value of elementFormDefault to "qualified" > > To read more about namespaces see [1] I do need to read more about namespaces... > > Hope that helps, > /Eddie helps a lot!!! > > [1] http://www.w3.org/TR/xmlschema-0/#NS > > > Somehow, I think I just don't understand the right way to do things :-). > > > > Thanks for any help. > > > > ------------------------- > > A subset of our Schema is below. It doesn't do what I want. It fails > > in the following way both with TIBCO's TurboXML and with SAX2Count from > > xerces-c1_6_0-linux. > > > > 1) (above) The error in TurboXML is: > > > > Element "RotationSection": expected Rotation > > > > And with SAX2Count I get: > > > > Error at file > > /home/mec/Projects/DetectorDescription/G3Convert_0_1_1/DDLSchema/DDLTestRotationInstance.xml, > > line 8, char 20 > > Message: Element 'comment' is not valid for content model: > > '(comment*,Rotation*)' > > > > Which happen when comment elements come after Rotation elements inside a > > RotationSection... (example below). > > > > 2) (above) The error in TurboXML is: > > > > Element "RotationSection": expected Rotation or comment (with no > > namespaces) > > > > SAX2Count I get: > > > > Error at file > > /home/mec/Projects/DetectorDescription/G3Convert_0_1_1/DDLSchema/DDLTestRotationInstance.xml, > > line 6, char 12 > > Message: Element 'comment' should be un-qualified > > > > =============== XML Schema ===================== > > > > <?xml version = "1.0" encoding = "UTF-8"?> > > <!--Generated by XML Authority. Conforms to w3c > > http://www.w3.org/2001/XMLSchema--> > > <xsd:schema xmlns = "http://www.cern.ch/cms/DDL" > > targetNamespace = "http://www.cern.ch/cms/DDL" > > xmlns:xsd = "http://www.w3.org/2001/XMLSchema" > > elementFormDefault = "unqualified" > > attributeFormDefault = "unqualified"> > > > > <xsd:element name = "DDDefinition" type = "DDDefinitionType"/> > > <xsd:complexType name = "DDDefinitionType"> > > <xsd:sequence> > > <xsd:element ref = "Section" minOccurs = "0" maxOccurs = > > "unbounded"/> > > </xsd:sequence> > > </xsd:complexType> > > > > <xsd:element name = "Section" type = "SectionType" abstract = "true"/> > > <xsd:element name = "RotationSection" type = "RotationSectionType" > > substitutionGroup = "Section"/> > > <xsd:complexType name = "SectionType"> > > <xsd:sequence> > > <xsd:element name = "comment" type = "xsd:string" minOccurs = "0" > > maxOccurs = "unbounded"/> > > </xsd:sequence> > > <xsd:attributeGroup ref = "SectionAttributes"/> > > </xsd:complexType> > > <xsd:attributeGroup name = "SectionAttributes"> > > <xsd:attribute name = "label" use = "optional" type = "xsd:string"/> > > </xsd:attributeGroup> > > > > <xsd:complexType name = "RotationSectionType"> > > <xsd:complexContent> > > <xsd:extension base = "SectionType"> > > <xsd:sequence> > > <xsd:element ref = "Rotation" minOccurs = "0" maxOccurs = > > "unbounded"/> > > </xsd:sequence> > > </xsd:extension> > > </xsd:complexContent> > > </xsd:complexType> > > > > <xsd:element name = "Rotation" type = "RotationType"/> > > <xsd:complexType name = "RotationType"> > > <xsd:attributeGroup ref = "RotationAttributes"/> > > </xsd:complexType> > > <xsd:attributeGroup name = "RotationAttributes"> > > <xsd:attribute name = "name" use = "required" type = "xsd:string"/> > > <xsd:attribute name = "theta1" use = "required" type = "xsd:float"/> > > <xsd:attribute name = "phi1" use = "required" type = "xsd:float"/> > > <xsd:attribute name = "theta2" use = "required" type = "xsd:float"/> > > <xsd:attribute name = "phi2" use = "required" type = "xsd:float"/> > > <xsd:attribute name = "theta3" use = "required" type = "xsd:float"/> > > <xsd:attribute name = "phi3" use = "required" type = "xsd:float"/> > > <xsd:attribute name = "angleUnit" use = "optional" type = > > "xsd:float"/> > > </xsd:attributeGroup> > > </xsd:schema> > > > > ========================= Instance example =========================== > > > > <?xml version = "1.0" encoding = "UTF-8"?> > > <DDDefinition xmlns = "http://www.cern.ch/cms/DDL" xmlns:xsi = > > "http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation = > > "http://www.cern.ch/cms/DDL > > file:///home/mec/Projects/DetectorDescription/G3Convert_0_1_1/DDLSchema/DDLTestRotation.xsd"> > > <RotationSection label = "blah"> > > <comment xmlns = ""/> > > <Rotation name = "chfghfhf" theta1 = "0" phi1 = "0" theta2 = "0" phi2 > > = "0" theta3 = "0" phi3 = "0"/> > > <comment xmlns = ""/> > > <comment xmlns = ""/> > > </RotationSection> > > </DDDefinition> > > > > -- > > > > Michael E. Case > > UC Davis > > case@ucdhep.ucdavis.edu > > (530) 754-7226 -- Michael E. Case UC Davis case@ucdhep.ucdavis.edu (530) 754-7226
Received on Friday, 18 January 2002 16:10:18 UTC