Let me try to clarify a little.
On Sun, 28 Oct 2001, Ingo Mittendorf wrote:
> One remark right at the beginning. I work with XMLSpy. Unfortunately this
> can't cope with the original, highly modular TEI DTD and considers it as
> invalid. So I had the Pizza-Chef create a pretty concise DTD which would
> contain just about everything that I might possibly need.
That is indeed what it's intended for!
> Now, this is what the Alphabetical list of the Guidelines on the web says
> about <sp>:
> May contain: l lg p seg speaker stage
The content model for <sp> isn't quite as restricted as that. In P4X it is
((%m.Incl;)* (speaker, (%m.Incl;)*)? , ((p|l|lg|ab|seg|stage), (%m.Incl;)*
Explaining that would require a brief but exciting lecture on
inclusion exceptions which I will spare you. But the key point to note is
that (apart from %m.Incl;) no part of the above model is parameterized.
So you cannot simply stick a <fw> inside an <sp>.
HOWEVER: if you look at the definition for <speaker> you will see that it
says its content model is
Again, I will spare you the brief but exciting lecture on the TEI class
system. The key point is that this definition indicates that a <speaker>
can contain not an explicitly named set of elements but rather any
sequence of whatever elements are defined as "phrase
elements" when the DTD is processed. Why so coy about what "phrase
elements" might be? Because you might want the definition to include
different elements on different occasions.
And blow me down if this isn't one of them! If you look at the definition
of <fw>, you will see that it is a member of the "phrase" class.
Consequently, if you enable the appropriate tagset (TEI.transcr), then the
definition of phrase.seq will include this element.
In short: <fw> isn't defined as a global inclusion (like <pb>). So you
have to put it inside something.
Unfortunately, if you try to make it into a global inclusion (by adding it
to the Incl class perhaps, like this
), you will get an ambiguous content model, because it is still a member
of the phrase class, and removing things from that class is a lot more
difficult than adding them.
SO my recommendation would be to make up a new tag and add it to the
global inclusion class:
<!ELEMENT spkrRepeat (#PCDATA)>
<!ATTLIST spkrRepeat teiform CDATA "fw">
<!ENTITY % x.Incl "spkrRepeat|">
in your DTD subset will do the trick without further ado.
Note use of teiform to indicate what kind of a beast this new element
you've added is.
Note also that should you want to make this new element behave more like
the TEI you will need to put it into a separate file and invoke that as
your TEI extensions dtd file. So, if you create foo.dtd and reference it in
your DTD subset as
<!ENTITY % TEI.extensions.dtd "foo.dtd">
then your definition for spkrRepeat (inside foo.dtd) might look like this
<!ELEMENT spkrRepeat (%phrase.Seq)>
<!ATTLIST spkrRepeat %a.global;
teiform CDATA "fw">
> <fw> isn't mentioned. They also say that <fw> may be contained in "[none]",
> whatever that means.
It means you are looking at an old and erroneous version of the
> <seg> I indeed overlooked. The Pizza-Chef DTD, however, doesn't seem to
> allow it in the position where I need it, and XMLSpy does reject it.
I have just downloaded a copy of xmlspy, and hope to check it out shortly:
you are not the first person to report that it can't cope with the TEI
parameter entities, which I find frankly astonishing, if true.