Home. 
.

transparent

transparent

transparent

Altova Mailing List Archives


3 XML Design Principles

From: "Roger L. Costello" <costello@-----.--->
To: "'XML Developers List'" <xml-dev@-----.---.--->
Date: 1/29/2005 5:20:00 PM
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


transparent
Print
Mail
Like It
Disclaimer
.

These Archives are provided for informational purposes only and have been generated directly from the Altova mailing list archive system and are comprised of the lists set forth on www.altova.com/list/index.html. Therefore, Altova does not warrant or guarantee the accuracy, reliability, completeness, usefulness, non-infringement of intellectual property rights, or quality of any content on the Altova Mailing List Archive(s), regardless of who originates that content. You expressly understand and agree that you bear all risks associated with using or relying on that content. Altova will not be liable or responsible in any way for any content posted including, but not limited to, any errors or omissions in content, or for any losses or damage of any kind incurred as a result of the use of or reliance on any content. This disclaimer and limitation on liability is in addition to the disclaimers and limitations contained in the Website Terms of Use and elsewhere on the site.

.
.

transparent

transparent