Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > XML > sub-elements with empty context vs. element text

Thread Tools

sub-elements with empty context vs. element text
Posts: n/a
What are the advantages/disadvantages of using a choice of a several
"sub-"elements with empty content (and no attributes) vs. simple
content. Here's an example:

Using simple content:

Using empty content sub-element:

Assume in both cases the xyz part has a limited domain, i.e., it can
be xyz, abc, or efg, but no other values make sense. Of course some
day, I might want to extend it to include rst.

The XML Schema for the empty content sub-element version looks
something like this:

<xsd:complexType name="ProcessType>

This defines ProcessType as having empty content. I can then use this
to define the types of processing I want to allow as follows:

<xsd:element name = "process" type="ProcessChoiceType"/>

<xsd:complexType name="ProcessChoiceType">
<xsd:choice minOccurs="1" maxOccurs="1">
<xsd:element name="abc" type="ProcessType"/>
<xsd:element name="efg" type="ProcessType"/>
<xsd:element name="xyz" type="ProcessType"/>
<xsd:element name="extented_process" type="ProcessType"

The abstract element extended_process is added to permit extension.
Then I can add new types of processing as follows:

<xsd:element name="rst" substitutionGroup="extended_process"/>

The XML Schema for the simple content version would replace the above
definition of ProcessChoiceType with the following:

<xsd:simpleType name="ProcessChoiceType">
<xsd:restriction base="xsd:token">
<xsd:enumeration value="abc"/>
<xsd:enumeration value="efg"/>
<xsd:enumeration value="xyz"/>

My understanding is the only way to extend the enumeration is to
define a new type, NewProcessChoiceType, using a union. However, I
don't know of any way to change the declaration of the <process>
element to use this new type.

So my initial analysis is that the empty content sub-elements are more
extensible. However, I've only been seriously studying XML Schema for
about a week. So I'm looking for guidance on these two choices. I
understand that a third alternative would be to use an attribute,
e.g., <process name="xyz"/>, but I don't think I can restrict the
domain of the name attribute using XML Schema, which defeats the whole
point of this discussion.

Thanks in advance for your opinions.

Reply With Quote
Joe Kesselman
Posts: n/a
It depends entirely on what you're trying to express.

Think about the semantics of the document. If the value is something
which really is a single value _conceptually_, but which may at some
point in the future want to carry additional sub-structure, make it an
element. If it's a simple text value and will never be more, make it
textual content, or -- if it's a characteristic of its containing
element -- possibly an attribute value (leaving the possibility open of
other attributes and/or content to be added later).

Look at other XML-based languages which solve similar problems and
decide which make the most sense for you.

And, as with any design skill you're still learning, resign yourself to
the fact that you're going to make some mistakes and have to do some
redesign until you develop a sense of style and the ability to think in
terms of larger patterns. Consider creating an initial version, working
with it for a while, and deciding whether you like the way it behaves
before you let it get cast in concrete.

Reply With Quote

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off

Similar Threads
Thread Thread Starter Forum Replies Last Post
how to Update/insert an xml element's text----> (<element>text</element>) HANM XML 2 01-29-2008 03:31 PM
Strange Context Error: Context 0x197ee0 is disconnected in VS 2005 =?Utf-8?B?U3VuU21pbGU=?= ASP .Net 0 01-10-2006 03:59 PM
Altova Mapforce - xml 2 xml map: empty elements output although input element is not empty Lukas XML 3 11-10-2005 02:25 PM
Context.Items vs Context.Handler (passing values between pages) VS_NET_DEV ASP .Net 2 05-25-2004 01:16 PM
empty/non-empty element John XML 1 07-16-2003 10:23 AM