OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-tc message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]


Subject: Re: [docbook-tc] Very rough proposal for DocBook transclusions


Rowland, Larry wrote:

> We actually looked at the duplicate ID problem in the past and came up 
> with some solutions that depended on the user making a choice.  It does 
> require the user to know the content well enough to make the choice, 
> but for our environment that was not an unreasonable model.
> 
>   1) Simplest: Strip the ID from the referenced element.  This works
>      for the inline inclusion problem (that seems to be aimed at the
>      same use-case that entities were aimed at).  It may not work for
>      references to blocks of content, particularly if there are IDs 
>      inside the block.

Actually this shouldn't be necessary with my current proposal, because
<ref/> just pulls content of respective <def>...</def> and no ID is thus
carried with reference. This is different from using XInclude where ID
is copied.

>   2) Replace the ID of the referenced element with an ID provided on
>      the referencing element.  Again, this does not handle content
>      that has IDs included inside it, but it allows referencing the
>      element (like an admonition that needs to be repeated in a document
>      and also needs to have local references to it.  However, it can
>      be extended as described in the next option.  We indicated this
>      should be done by simple providing the ID on the referencing 
>      element.

Good point! I haven't thought about it but it seems very natural to use
xml:id on ref and propagate this ID to referenced content.

>   3) Replace the ID of the referenced element with an ID provided on
>      the referencing element AND use the new ID to prefix all IDs in
>      the transcluded block.  This means you also have to modify
>      references within the transcluded block that reference IDs in
>      the block, but not references to IDs outside the block.  Building 
>      the list of ID values that need to be processed and using it for 
>      processing the references proved challenging in XSLT 1.0, but 
>      straightforward in Java (I haven't tried in XSLT 2).  Once again, 
>      we chose to trigger this by having an ID on the referencing element.
>      If there are no IDs in the block, option 2 becomes a degenerate
>      case of this one.

I think that I will try to offer some more automagic ID mangling system
and some more user controlled system as you suggest. I think that it can
be implemented even in XSLT 1.0 but probably two passes over document
will be necessary.

> Both options 2 and 3 could be controlled by an attribute rather than by
> the presence of the ID, but the ID had to be provided anyway, so it
> didn't seem like too much of a stretch.  To deal with all four options
> it may be best to have an idpolicy attribute (probably with a default
> value of option 1, since inline use could become common as a replacement 
> for entities) to control this.  Not sure really, since policy 1 was in a 
> system that didn't have policy 2, so we ended up only having to deal with 
> either not modifying IDs or modifying them based on the ID attribute being 
> present.

Thanks for very useful insight. I will try to digest all input in next
draft.

				Jirka

-- 
------------------------------------------------------------------
  Jirka Kosek      e-mail: jirka@kosek.cz      http://xmlguru.cz
------------------------------------------------------------------
       Professional XML consulting and training services
  DocBook customization, custom XSLT/XSL-FO document processing
------------------------------------------------------------------
 OASIS DocBook TC member, W3C Invited Expert, ISO JTC1/SC34 member
------------------------------------------------------------------

OpenPGP digital signature



[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]