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] 3 XML Design Principles

[ Lists Home | Date Index | Thread Index ]

hi roger,

i guess i cheat when doing this. the more i think about these things, 
the more i'm convinced the right thing to do is to poke the data into a 
proper relational database so you can pull it out any way you want easily.

allowing that i have my own semantic database technology :) the solution 
for my company is to import / export rdf as the front end and 
hierarchical structures in xml (export only at this stage).

associative structures is something i can't quite figure in xml yet - so 
i go back to the rdb where it's very easy.

so if you want to really confuse yourself (like i'm doing at the moment) 
let's assume xml is just a storage technology. and then perhaps the most 
importnat things to come out of xml are the extras - xpath, xquery, xsl, 
rdf - and if we apply them to a traditional data store, all sorts of 
wonderful things happen and problems like the one below have a wide 
range of solutions.

rick

Roger L. Costello wrote:

> Hi Folks,
>
> Below I propose a few XML design principles.  I am interested in 
> hearing your thoughts on them, i.e., do you agree or disagree with them?
>
> Which is Better Design?
>
> Suppose that I have data about a grape vineyard.  Below I show two 
> lots on the vineyard, and a picker on one of the lots.  I show two 
> ways of designing the data.  Which design is better?
>
> *Version #1
> *
> <Lot id="1">
>       <ripe-grapes>4</ripe-grapes>
>       <Picker id="John">
>             <metabolism>2</metabolism>
>             <grape-wealth>20</grape-wealth>
>       </Picker>
> </Lot>
> <Lot id="2">
>       <ripe-grapes>3</ripe-grapes>
> </Lot>
>
> *Version #2
> *
> <Lot id="1">
>       <ripe-grapes>4</ripe-grapes>
> </Lot>
> <Lot id="2">
>       <ripe-grapes>3</ripe-grapes>
> </Lot>
> <Picker id="John" locatedOn="1">
>       <metabolism>2</metabolism>
>       <grape-wealth>20</grape-wealth>
> </Picker>
>
> Suppose that I want an application to move the Picker to Lot 2.  With 
> which version would it be easier to do this? 
>
> The above two versions both have two components:
>
> 1. A Lot component
> 2. A Picker component
>
> Both versions are *modular*, i.e., both represent the Picker located 
> on Lot 1.
>
> However, the two versions differ in three respects:
>
> - Implicit relationship versus explicit relationship.
> - Tight coupling versus loose coupling.
> - Nest (hierarchical) versus flat data.
>
> Implicit versus Explicit Relationships
>
> *Version #1*
>
> What is the relationship between the Lot and the Picker?
>
> <Lot id="1">
>       <Picker id="John">
>             <metabolism>2</metabolism>
>             <grape-wealth>20</grape-wealth>
>       </Picker>
> </Lot>
>
> You might state that the relationship is:
>
>       "The Lot *contains* the Picker"
>
> Another person might state that the relationship is:
>
>       "The Lot *has a* Picker"
>
> /The relationship between the Lot and the Picker is implicit.  
> Implicit relationships are bad because one person may interpret the 
> relationship in one way, another person may interpret the relationship 
> in another way./
>
> *Version #2*
>
> What is the relationship between the Lot and the Picker?
>
> <Lot id="1">
>       <ripe-grapes>4</ripe-grapes>
> </Lot>
> <Picker id="John" locatedOn="1">
>       <metabolism>2</metabolism>
>       <grape-wealth>20</grape-wealth>
> </Picker>
>
> Clearly the relationship is:
>
>       "The Picker is locatedOn the Lot"
>
> /The relationship (locatedOn) is explicitly specified in the instance 
> document!
> /
> XML Design Principle #1
>
> Implicit relationships are bad.  They are subject to misinterpretation.
>
> Explicit relationships are good.  They are not subject to 
> misinterpretation.
>
> Tight Coupling vs Loose Coupling
>
> Compare the two versions with respect to how loosely connected the Lot 
> and Picker components are:
>
> *Version #1
> *
> <Lot id="1">
>       <Picker id="John">
>             <metabolism>2</metabolism>
>             <grape-wealth>20</grape-wealth>
>       </Picker>
> </Lot>
>
> The Picker is nested (buried) within the Lot ... /Tight coupling!/
>
> *Version #2
> *
> <Lot id="1">
>       <ripe-grapes>4</ripe-grapes>
> </Lot>
> <Picker id="John" locatedOn="1">
>       <metabolism>2</metabolism>
>       <grape-wealth>20</grape-wealth>
> </Picker>
>
> The Lot and Picker components are physically completely separate.  The 
> only connection between them is the pointer from the Picker to the Lot 
> (the locatedOn attribute) ./.. Loose coupling!
> /
> XML Design Principle #2
>
> Tight coupling is bad.  It makes processing difficult.
>
> Example: moving the Picker from Lot 1 to Lot 2 in the tightly coupled 
> version is difficult in terms of the amount of code needed, memory 
> needed, and processing time needed.
>
> Loose coupling is good.  It makes processing easy.
>
> Example: moving the Picker from Lot 1 to Lot 2 in the loosely coupled 
> version is easy - just change the value of locatedOn.
>
> Nested (hierarchical) vs Flat Data
>
> Compare these two versions with respect to the physical placement of 
> the Lot and Picker components:
>
> *Version #1
> *
> <Lot id="1">
>       <Picker id="John">
>             <metabolism>2</metabolism>
>             <grape-wealth>20</grape-wealth>
>       </Picker>
> </Lot>
>
> There is a "box within a box" ... /It is nested (hierarchical) data/
>
> *Version #2*
>
> <Lot id="1">
>       <ripe-grapes>4</ripe-grapes>
> </Lot>
> <Picker id="John" locatedOn="1">
>       <metabolism>2</metabolism>
>       <grape-wealth>20</grape-wealth>
> </Picker>
>
> There are two separate "boxes" ... /It is flat data/
>
> XML Design Principle #3
>
> Minimize the amount of nesting you use.
>
> Nested data is tightly coupled and uses implicit relationships, both 
> of which are bad.
>
> Flat data is good data!
>
> Flat data is loosely coupled and promotes the use of explicit 
> relationships, both of which are good.
>
> Comments?  /Roger
>
> !DSPAM:41fbc6af94781510613120! 


begin:vcard
fn:Rick  Marshall
n:Marshall;Rick 
email;internet:rjm@zenucom.com
tel;cell:+61 411 287 530
x-mozilla-html:TRUE
version:2.1
end:vcard





 

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

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