Mixed content not working for me

David Megginson (ak117@freenet.carleton.ca)
Wed, 10 Dec 1997 14:27:19 -0500


Russell East writes:

> How come the following doesn't work?
> <!ELEMENT a (#PCDATA|(a*)) >
>
> I basically want my element a to either form an hierarchy
> *or* have some text data.
>
> But it seems I'm forced to have
> <!ELEMENT a (#PCDATA|a)* >

XML bans this type of mixed content because it has been causing
trouble in full SGML for over a decade. The problem comes with
something like this:

<a>

<a></a>
</a>

After an SGML parser reads the opening <a> tag, it doesn't know
whether the element will contain #PCDATA or subelements. The first
character it reads is a linefeed -- that's character data, so the
parser assumes that it is reading #PCDATA; when the parser finds the
<a> tag a few characters later it throws an error.

You need to do two things:

1) submit a bug report to Microsoft; and

2) create a new subelement to hold the text:

<!ELEMENT a (text|a)>
<!ELEMENT text (#PCDATA)>

Now you can have

<a>
<text>This is some text</text>
<a>

or

<a>
<a>This is a subelement</a>
</a>

All the best,

David

-- 
David Megginson                 ak117@freenet.carleton.ca
Microstar Software Ltd.         dmeggins@microstar.com
      http://home.sprynet.com/sprynet/dmeggins/

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev@ic.ac.uk Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/ To (un)subscribe, mailto:majordomo@ic.ac.uk the following message; (un)subscribe xml-dev To subscribe to the digests, mailto:majordomo@ic.ac.uk the following message; subscribe xml-dev-digest List coordinator, Henry Rzepa (mailto:rzepa@ic.ac.uk)