Mixed content not working for me

David Megginson ak117 at freenet.carleton.ca
Wed Dec 10 19:28:05 GMT 1997


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 at freenet.carleton.ca
Microstar Software Ltd.         dmeggins at microstar.com
      http://home.sprynet.com/sprynet/dmeggins/

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




More information about the Xml-dev mailing list