[Home] [By Thread] [By Date] [Recent Entries]

  • From: "Costello, Roger L." <costello@m...>
  • To: "xml-dev@l..." <xml-dev@l...>
  • Date: Sun, 9 Feb 2014 14:27:27 +0000

Hi Folks,

I see many XML instances (and corresponding XML Schemas) with an "other" catchall element.

I wish to convince you that an "other" catchall element is contrary to one's objectives and should be avoided.

First, a quote from the book, "Principles of Program Design" (Jackson Design Methodology):

	The structure of a program must be
	based on the structures of all the data
	it processes.

A corollary to that is:

	Data should model the real world.

So there is this deep connection:

	real world --> data model --> program structure

In the real world there is no "other" component: When was the last time you drove an "other car" or purchased an "other vegetable"?

So it is wrong to create a data model for a nonexistent real world entity. Likewise it is wrong to write a program component for "other" data.

Let's take an example. Suppose we use XML Schema to model the countries of the world:

<xs:element name="Country">
    <xs:complexType>
        <xs:choice>
            <xs:element name="Afghanistan" type="countryType" />
            <xs:element name="Albania" type="countryType" />
            ...
            <xs:element name="Zimbabwe" type="countryType" />
            <xs:element name="Other" type="countryType" />
        </xs:choice>
    </xs:complexType>
</xs:element>

Since the countries of the world are ever-changing, we include an "Other" element in anticipation of some future, unforeseen country.

It is easy to imagine assigning a program component to Iceland:

<Country>
    <Iceland>...</Iceland>
</Document>

But what is a program component to do when it encounters the "Other" country:

<Country>
    <Other>...</Other>
</Document>

There is no "Other" country and so any operation that we might assign to the data would be nonsensical.

Stated another way: 

	"Other" data is not machine-processable. The reason
	for using XML is that to enable machine-processing. 
	But by incorporating non-machine-processable 
	"other" data one's own objectives are defeated.

"Okay, suppose that I avoid using an <Other> element and, say, a new country emerges; what should I do?"

Answer: the real world has changed (there is a new country). Your data model must be updated to reflect the real world. So update your XML Schema and in your program add a component for the new country.

Comments welcome.

/Roger


[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member