[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: XML Schemas: Best Practices
Hi Folks, Here is the next issue that I would like to take up on XML Schema Best Practices. Issue: Public versus Private Schemas - When should a schema be made publicly accessible versus when should it be kept private? Are there guidelines on what should be in a public schema? I would like to kick off this discussion with some thoughts that I have on this topic: I think that as a quick and dirty general rule types (complexTypes and simpleTypes) should go in public schemas and global element declarations should go in private schemas. Example. Consider these schema components: <complexType name="PublicationType" abstract="true"> <sequence> <element name="Title" type="string"/> <element name="Author" type="string" maxOccurs="unbounded"/> <element name="Date" type="year"/> </sequence> </complexType> <complexType name="BookType"> <complexContent> <extension base="c:PublicationType" > <sequence> <element name="ISBN" type="string"/> <element name="Publisher" type="string"/> </sequence> </extension> </complexContent> </complexType> <complexType name="MagazineType"> <complexContent> <restriction base="c:PublicationType"> <sequence> <element name="Title" type="string"/> <element name="Author" type="string" minOccurs="0" maxOccurs="0"/> <element name="Date" type="year"/> </sequence> </restriction> </complexContent> </complexType> <element name="Catalogue"> <complexType> <sequence> <element name="Publication" type="c:PublicationType" minOccurs="0" maxOccurs="unbounded"/> </sequence> </complexType> </element> There are 3 type definitions - Publication, BookType, and MagazineType. There is one global element declaration - Catalogue. As a first pass, I would put the 3 type definitions into a schema and make that schema publicly accessible. I would put the global element declaration into a second, private schema. Here's my reasoning for this method of partitioning schema components into public versus private schemas: - Types are by definition reusable components. So, immediately I think "public". - Element declarations get instantiated in instance documents. They are domain specific components, i.e., not general purpose. So, immediately I think "private". Okay, those are some of my quick, probably-not-well-thought-out thoughts on this topic. What are your thoughts? Can you think of a more refined methodology for partitioning components among public versus private schemas? What is your decision process for deciding if a component should be made publicly accessible? What is your definition of a "Public Schema"? What is your definition of a "Private Schema"? My hope is that we can have broader participation in discussing this issue. These Best Practices are to be a "collective effort", so now is your chance to voice your thoughts. /Roger
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|