OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

 


 

   RE: [xml-dev] Schema question

[ Lists Home | Date Index | Thread Index ]

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>
> 


  • References:



 

News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 2001 XML.org. This site is hosted by OASIS