This is the mail archive of the docbook-apps@lists.oasis-open.org mailing list .


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [docbook-apps] DTD customizations for XIncludes: How to add X Includes support for row in tbody?


Unfortunately, redefining element declarations does not work.
The validator will complain about duplicate element declarations,
and likely ignore it.

This is a case where customizing the DocBook DTD is harder
than it should be.  Normally element declarations in DocBook
are enclosed in marked sections with INCLUDE as the magic word
to control whether the marked section is on or off.
If your customization changes the magic word to IGNORE, then
the original declaration is left out and you are free to
declare the element your way.  But tbody is in the calstblx.dtd
file, and none of those element declarations are in such
marked sections.

Further compounding the problem, the tbody element's content
model is hardwired as (row+), and does not use a parameter
entity in any way.  That means you also cannot overrule a
parameter entity to change the content model for tbody.

AFAICT, the only way to make this change is to copy the
calstblx.dtd file to a new name, edit it to make the
change, and make sure you DTD customization file uses that
edited version.

Here is a DTD customization that changes the parameter
entity that references the calstblx.dtd file so instead
in references a modified "mytblx.dtd" file,
then pulls in the
stock DocBook DTD, and adds the XInclude element declarations:

!ENTITY % tablemodel
  PUBLIC "-//NOT-OASIS//DTD DocBook Modified CALS Table Model V4.2//EN"
  "mytblx.dtd">

<!ENTITY % docbook PUBLIC
"-//OASIS//DTD DocBook XML V4.2//EN"
"docbookx.dtd">
%docbook;

<!ELEMENT xi:include (xi:fallback?) >
<!ATTLIST xi:include
    xmlns:xi   CDATA       #FIXED    "http://www.w3.org/2001/XInclude";
    href       CDATA       #REQUIRED
    parse      (xml|text)  "xml"
    encoding   CDATA       #IMPLIED >

<!ELEMENT xi:fallback ANY>
<!ATTLIST xi:fallback
    xmlns:xi   CDATA   #FIXED   "http://www.w3.org/2001/XInclude"; >


Then you can use this customized DTD in place of the stock
DocBook DTD.

But it might just be easier to validate your documents
after XIncludes have been processed.  The --postvalid option
to xmllint will do that.  It's the only way to make sure 
the resulting document is still valid.



Bob Stayton                                 400 Encinal Street
Publications Architect                      Santa Cruz, CA  95060
Technical Publications                      voice: (831) 427-7796
The SCO Group                               fax:   (831) 429-1887
                                            email: bobs@sco.com

Quoting Jeff Beal <jeff.beal@ansys.com>:

> I think you can just re-define the tbody element in your local subset
> as
> follows:
> 
> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook 4.2//EN"
> "http://www.oasis-open.org ... " [
>  <!ELEMENT tbody (row | xi:include)+>
> ]>
> 
> I've never done this to re-define elements, but I think it will work.
> 
> Jeff
> 
> > -----Original Message-----
> > From: Stubbe Paul [mailto:paul.stubbe@mil.be]
> > Sent: Monday, July 07, 2003 11:49 AM
> > To: docbook-apps@lists.oasis-open.org
> > Subject: [docbook-apps] DTD customizations for XIncludes: How to add
> > XIncludes support for row in tbody?
> > 
> > 
> > I try to adapt the dtd based on 
> > http://www.sagehill.net/docbookxsl/ValidXinclude.html.
> > 
> > I'am a small scale docbook user with an xsl customization 
> > layer but I have no experience customizing the dtd.
> > 
> > I'm responsible for the publishing proces and my writers are 
> > reusing rows in different tables. 
> > 
> > I got the publishing proces to work based on:
> > <tbody>
> > <xi:include xmlns:xi="http://www.w3.org/2001/XInclude"; 
> > href="reusefile.xml#xpointer(//table[@id='reuseID']/tgroup/tbo
> > dy/*)" />
> > <row>
> > ...
> > </row>
> > </tbody>
> > 
> > Is there a "right" or better way to reuse row-level information?
> > 
> > But I do this in an ugly way by preprocessing the content 
> > file with ant and regular expressions. <row
> role="reuse">reuseID</row>
> > This preprocessing-step I would like te eliminate.
> > 
> > 
> > So what I think needs to be done is to change the dtd so that 
> > an editor accepts and proposes the xi:include within tbody.
> > 
> > The problem I have is that I do not find a parameter entity 
> > like "local.tbody. .." that I can overrule.
> > 
> > In what direction should I look for a solution?
> > 
> > Thanks,
> > 
> > Paul
> > 
> > 
> >
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail:
> docbook-apps-unsubscribe@lists.oasis-open.org
> > For additional commands, e-mail: 
> > docbook-apps-help@lists.oasis-open.org
> > 
> > 
> > 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
> For additional commands, e-mail:
> docbook-apps-help@lists.oasis-open.org
> 
> 
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org
For additional commands, e-mail: docbook-apps-help@lists.oasis-open.org


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]