- From: <noah_mendelsohn@us.ibm.com>
- Date: Thu, 24 Jan 2002 17:42:50 -0500
- To: mecase@ucdavis.edu
- Cc: eddie@allette.com.au, xmlschema-dev@w3.org
I am not sure whether you received a reply to this. Document order is always significant for the element and/or character content of another element. Order is never significant for attributes. All of this is detailed in the XML 1 0 and Infoset recommendations, and there is no discretion allowed for one processor or another to change the rules. Now,what I just said is always true of a given XML document. I can write a DTD that says: (A|B)* which means that the DTD will validate lots of different documents with A's and B's in arbitrary order. The XML 1 0 specification still says that within anyone such document, the order is a significant and applications may take information from it. Conversely, the recommendations say that regardless of what a DTD, schema, or any other description language says, the following two elements are identical with respect to the underlying information that they convey: <e a1="x" a2="y"/> <e a2="y" a1="x"/> I hope this explanation is helpful. Thank you very much. ------------------------------------------------------------------ Noah Mendelsohn Voice: 1-617-693-4036 IBM Corporation Fax: 1-617-693-8676 One Rogers Street Cambridge, MA 02142 ------------------------------------------------------------------ Michael Case <mecase@ucdavis.edu> Sent by: xmlschema-dev-request@w3.org 01/18/02 04:08 PM Please respond to mecase To: Eddie Robertsson <eddie@allette.com.au> cc: XSD <xmlschema-dev@w3.org> Subject: Re: looking for help... 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 Thursday, 24 January 2002 17:57:10 UTC