[Home] [By Thread] [By Date] [Recent Entries]
Thanks for pointing that out - I obviously didn't look at the instance document closely enough. I also forgot about that one rule that says that if a schema has a target namespace, all global elements must be namespace-qualified in XML instance documents. Joe (re-reading the "Namespaces in XML" document:) Joseph Chiusano Associate Booz Allen Hamilton 700 13th St. NW, Suite 1100 Washington, DC 20005 O: 202-508-6514 C: 202-251-0731 Visit us online@ http://www.boozallen.com -----Original Message----- From: Michael Kay [mailto:mike@s...] Sent: Wednesday, July 26, 2006 5:03 AM To: 'Alex Stankovic'; xml-dev@l... Subject: RE: Schema question Melvin Chin provided a correct solution: it relies on the fact that XML Schema allows elements to be defined globally or locally, and different local definitions don't clash with each other. Joe Chiusano provided an impossible solution: your XML document is predefined, and none of the elements is in a namespace, so you can't use namespaces to distinguish the two product elements. My own design would look something like this: <?xml version="1.0" encoding="UTF-8"?> <xsd:schema version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <xsd:element name="root"> <xsd:complexType name="rootType"> <xsd:sequence> <xsd:element ref="product" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="product"> <xsd:complexType> <xsd:sequence> <xsd:element name="name" type="xsd:string"/> <xsd:element name="url" type="urlType"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:complexType name="urlType"> <xsd:sequence> <xsd:element name="product" type="xsd:anyURI"/> <xsd:element name="image" type="xsd:anyURI"/> </xsd:sequence> </xsd:complexType> </xsd:schema> I think this kind of design (a) gives more scope for reuse of components (you can only reuse components if they are named components at the top level), and (b) gives more scope for writing schema-aware queries and stylesheets (these too can only refer to top-level named components in your schema). One design guideline I try to use is "an element should either have a top-level element declaration or a global type definition, or both". In this example I could have achieved this by making the element url a global element, rather than promoting urlType to the top level. That's a fairly arbitrary choice, and of course you could always declare both the element and its type globally. Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Alex Stankovic [mailto:alex.stankovic@g...] > Sent: 26 July 2006 03:25 > To: xml-dev@l... > Subject: Schema question > > Hello everybody, > > I have to process a XML document that's looks like this (I don't have > a choice in the layout since I'm receiving the document from a third > party): > > <?xml version="1.0" encoding="UTF-8"?> <root> > <product> > <name>Product name</name> > <url> > <product>http://product.url.com</product> > <image>http://product.image.com</image> > </url> > </product> > <product> > <name>Product name 2</name> > <url> > <product>http://product.url.com</product> > <image>http://product.image.com</image> > </url> > </product> > </root> > > As you can see element name "product" is used as a product container > and as the child of url element. I'm not XML expert but I think that's > not very smart. How can I write a XSD schema to validate this type of > document when an element name can mean two different things? Is it > even possible? > > Thanks, > Alex > > ----------------------------------------------------------------- > The xml-dev list is sponsored by XML.org <http://www.xml.org>, an > initiative of OASIS <http://www.oasis-open.org> > > The list archives are at http://lists.xml.org/archives/xml-dev/ > > To subscribe or unsubscribe from this list use the subscription > manager: <http://www.oasis-open.org/mlmanage/index.php> > ----------------------------------------------------------------- The xml-dev list is sponsored by XML.org <http://www.xml.org>, an initiative of OASIS <http://www.oasis-open.org> The list archives are at http://lists.xml.org/archives/xml-dev/ To subscribe or unsubscribe from this list use the subscription manager: <http://www.oasis-open.org/mlmanage/index.php>
|

Cart



