|
next
|
 Subject: DTD Validation problems Author: John Gilbertson Date: 05 Mar 2003 10:30 AM
|
I've just downloaded the evaluation version of Stylus Studio as the place I work at are investigating many XML creation/editing/etc programs.
I have a document which we've created to test various programs, for editing and output.
The file links to a DTD, which Apache Cocoon (under Tomcat) is happy with, and accepts that it validates. XMetaL 3 will accept that it is valid if included inline in the original file. (For some reason doesn't like to try validate a stand alone DTD though)
It also validates in XMLSPY 5.
SS however, reports an error.
The relevant snippet is:
{!ELEMENT page (title, topnavbar, lowernavbar, maincontent, leftmarketing, localnews, localnav, lowermarketing, footer)}
{!ENTITY % content "p|h1|h2|h3|h4|h5|h6|ul|ol|table|center"}
{!ENTITY % inline "#PCDATA|em|b|a|img|br"}
{!ELEMENT maincontent ((%content;|%inline;)*)}
SS reports and error between the inline and ;)*)} saying "Parsing error in -foo-: Expected ',' or ')' characters or close parenthesis in content model of element 'maincontent' (line 10, column 41)
Which programs are right? Is that valid, or is it not?
|
next
|
 Subject: Re: DTD Validation problems Author: (Deleted User) Date: 05 Mar 2003 02:25 PM
|
Hi John,
At 10.49 05/03/2003 -0500, you wrote:
>From: "John Gilbertson"
>[...]
>The relevant snippet is:
>{!ELEMENT page (title, topnavbar, lowernavbar, maincontent, leftmarketing,=
>localnews, localnav, lowermarketing, footer)}
>{!ENTITY % content "p|h1|h2|h3|h4|h5|h6|ul|ol|table|center"}
>{!ENTITY % inline "#PCDATA|em|b|a|img|br"}
>{!ELEMENT maincontent ((%content;|%inline;)*)}
>[...]
>Which programs are right? Is that valid, or is it not?
I would say that Stylus Studio (that is, the Xerces parser) is right here.
The definition for the element "maincontent" gets expanded into
((p|h1|h2|h3|h4|h5|h6|ul|ol|table|center|#PCDATA|em|b|a|img|br)*)
and this is defining a mixed content that is not valid according to the
grammar in the XML specs (§ 3.2.2 "Mixed Content" -
http://www.w3.org/TR/REC-xml#sec-mixed-content).
The grammar production for this is
[51] Mixed ::= '(' S? '#PCDATA'
(S? '|'
S?
Name)*
S? ')*' | '('
S? '#PCDATA'
S? ')'
that forces the definition to have the #PCDATA as the first option.
So, you can fix your DTD by changing the last definition into
{!ELEMENT maincontent ((%inline;|%content;)*)}
Hope this helps,
Alberto
|
next
|
 Subject: Re: DTD Validation problems Author: John Gilbertson Date: 06 Mar 2003 04:09 AM
|
On 3/5/03 2:25:19 PM, Alberto Massari wrote:
>Hi John,
>I would say that Stylus Studio (that is, the
> Xerces parser) is right here.
> The definition for the element "maincontent"
> gets expanded into
>((p|h1|h2|h3|h4|h5|h6|ul|ol|table|center|#PCDATA|em|b|a|img|br)*)
>and this is defining a mixed content that is
>not valid according to the grammar in
>the XML specs (§ 3.2.2 "Mixed Content" -
>http://www.w3.org/TR/REC-xml#sec-mixed-content).
>The grammar production for this is
> [51] Mixed ::= '(' S? '#PCDATA'
>(S? '|' S? Name)* S? ')*' | '(' S? '#PCDATA'
S? ')'
>that forces the definition to have the
>#PCDATA as the first option.
>So, you can fix your DTD by changing the
>last definition into
> {!ELEMENT maincontent ((%inline;|%content;)*)}
>Hope this helps,
>Alberto
Thanks for the heads up, I've just tried swapping round %inline; and %content, but have a new error message appearing:
So, we have:
{!ELEMENT maincontent ((%inline;|%content;)*)}
And the new error message is:
Parsing error in file -foo-: Expected an element name (line 10, column 33)
That is just after the inline; and before |content;
Now, I've also tried creating a new ENTITY,
{!ENTITY % bigthing "#PCDATA|em|b|a|img|br|p|h1|h2|h3|h4|h5|h6|ul|ol|table|center"}
and
{!ELEMENT maincontent ((%bigthing;)*)}
But this is coming up with the same error as above, again just after the ; so I'm assuming that the definition of one of the things in %inline; is causing the problems.
Taking out the #PCDATA makes it not complain.
Using just %inline; for maincontent also works.
Using just %content; works as well, so it seems like there's some issue with the combination of the two.
|
|
|
|