[
Lists Home |
Date Index |
Thread Index
]
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@saxonica.com]
Sent: Wednesday, July 26, 2006 5:03 AM
To: 'Alex Stankovic'; xml-dev@lists.xml.org
Subject: RE: [xml-dev] 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@gmail.com]
> Sent: 26 July 2006 03:25
> To: xml-dev@lists.xml.org
> Subject: [xml-dev] 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>
|