[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
RE: [xml-dev] XML data interchange format: Flatter is better
- From: "Costello, Roger L." <costello@mitre.org>
- To: "xml-dev@lists.xml.org" <xml-dev@lists.xml.org>
- Date: Tue, 28 Oct 2014 09:23:52 +0000
Michael Kay wrote:
> And for my next exciting revelation, I will announce the discovery of third normal form.
Hello Michael, I assume you are saying this:
Flat XML does not adhere to 3rd Normal Form
design and therefore is bad.
However, I would counter with this observation:
3rd Normal Form is a criteria for evaluating the design of relational databases. I am not talking about designing relational databases. I am talking about designing XML-based data exchange formats. It is not obvious to me that the criteria used to evaluate database designs should be the same criteria used to evaluate the design of XML-based data exchange formats.
In the grape vineyard example that I gave, a 3rd Normal Form design would yield this:
<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>
...
As a data exchange format, that is a horrible design: it is not well-suited to many operations that consumers want to make on the data and it is not in a format that is suitable for employing powerful parsing techniques.
3rd Normal Form is useful as a criteria for evaluating relational database designs, but it is a poor criteria for evaluating XML-based data exchange formats.
For an XML-based data exchange format, I want the format to possess these attributes:
1. It is in a neutral form with respect to modeling the world: Your vantage point is not necessarily the same as my vantage point.
2. It easily morphable: It is in a form that lends itself to manipulation by powerful parsing techniques (recursive descent, LL(1), etc.)
Flat XML provides those desirable attributes.
Comments?
/Roger
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]