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

 


Help: OASIS Mailing Lists Help | MarkMail Help

dita message

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


Subject: RE: [dita] Issue: Map element IDs and references to them


This discussion started out about the uniqueness of ids in maps, but what we’ve been talking about is really more about uniqueness of IDs in topics or I guess about uniqueness of IDs in both topics and maps.  Does this matter? I’m guessing not.

 

And the recent discussion has been about non-unique id values added by using conref.  Is conref the only way to create non-unique ids?  What about Key References? Does whatever wording we come up with for the DITA 1.2 spec. need to limit the non-unique ID processing issue to IDs created by conref or keyref or can we make this a more general discussion without any limitation?  I’m thinking that more general is the way to go for DITA 1.2 at least.

 

Michael wrote:

> So: we are accepting that a processor may solve this in any way they wish for 1.2, and we recommend no particular course of action.

 

I think this is right.

 

But we are going to add something that says something along these lines:

 

Because some DITA id attributes are true XML IDs and others are not, the uniqueness of id attribute values within DITA documents is not enforced by validating XML parsers. Never-the-less ID values within maps and topics should be unique.

 

Aren’t we?  Or perhaps something longer that says:

 

Because some DITA id attributes are true XML IDs and others are not, the uniqueness of id attribute values within DITA documents is not enforced by validating XML parsers. Never-the-less ID values within maps and topics should be unique. If an id value is not unique, processors should recover from the error, continue processing, and should produce a warning message.

 

And is “should” want we want to say about warning messages or do we want to make this, “may, but are not required to, produce a warning message”.  I don’t feel strongly about this point.

 

  -Jeff

 

 

From: Michael Priestley [mailto:mpriestl@ca.ibm.com]
Sent: Wednesday, August 19, 2009 9:53 AM
To: Grosso, Paul
Cc: dita
Subject: RE: [dita] Issue: Map element IDs and references to them

 


Fair enough. 1.3 it is.

I'll add that in the 2b case, you'd also want to know whether the reference should point to the original, or to the original as reused. Just because something's conref'd in place A doesn't mean it's not also directly included in place B. My assumption was that the format of the reference (which includes the id of the containing topic) would remove all ambiguity, but that brings up questions of processing order, and leaves unsolved the edge case of conrefs that pull in whole branches of topics.

So: we are accepting that a processor may solve this in any way they wish for 1.2, and we recommend no particular course of action (though I personally would freak out if they solved it by changing the local id).

Michael Priestley, Senior Technical Staff Member (STSM)
Lead IBM DITA Architect
mpriestl@ca.ibm.com
http://dita.xml.org/blog/25


"Grosso, Paul" <pgrosso@ptc.com>

08/19/2009 09:40 AM

To

"dita" <dita@lists.oasis-open.org>

cc

Subject

RE: [dita] Issue: Map element IDs and references to them

 




I don't know how common certain things are with conrefs at this point.  But assuming dita's conrefs are generally supposed to replace the need for XML's parsed entity references, I've certainly seen referenced entities that contain id/idref pairs.
 
You're missing a 2b case below:  that id in the content being conreffed in is referenced from a different topic that you are also pulling into your map from somewhere else.  Once you do fixup on that pulled in id, the from-other-topic reference to it is broken.
 
So, to answer your question, we don't stop worrying, but we put off trying to come up with any solution until post-DITA 1.2.  It's too complex an issue to try to solve in a big hurry (and 1.2 is already late enough that we shouldn't take the time that would be necessary to fix it now).
 
paul
 
 
From: Michael Priestley [mailto:mpriestl@ca.ibm.com]
Sent:
Tuesday, 2009 August 18 17:51
To:
Rob Frankland
Cc:
dita; Grosso, Paul
Subject:
Re: [dita] Issue: Map element IDs and references to them

 

Just to check - how common is it for a conref'd element to contain internal elements that reference each other? It seems like we're dealing with an edge case of an edge case.


I'm guessing it could happen - maybe in a large table with multiple footnote definitions, and the whole table gets conref'd  - but I wouldn't think it was common.


Also, Rob just to clarify - any fix would be applied at processing time, and not to the original source. We're not talking about touching or editing the source.


This is the way I'm thinking of it:


1- main case: you conref in something, it doesn't contain elements with ids, or the ids are unique in the new context - no problem

2- exception: the thing you conref'd in contains an id that's already in use by the conreffing topic or map - adjust the id of the thing being pulled in, since we know it's not being referenced, and the other (local) id might be - eg by another topic or map

3- extra exception: the thing you conref'd in contains both an id, and a reference to the id - so adjust them both (you'd need to adjust the reference anyway) - again, preserving the id of the local element since it could be referenced by some other topic we're not aware of.


As Paul points out, there's a proposal for 1.3 that would take care of case 3. Does that mean we stop worrying about case 2? The proposal for 1.3 doesn't address case 2.


I'll back off the SHOULD if that makes people uncomfortable - but let's at least put a MAY in. Some kind of hint that the norm is changing the id of the thing being pulled in, rather than the local id it conflicts with (assuming I can convince Rob that that's preferable).


Michael Priestley, Senior Technical Staff Member (STSM)
Lead IBM DITA Architect
mpriestl@ca.ibm.com
http://dita.xml.org/blog/25

Rob Frankland <robf@sockmonkeyconsult.com>

08/18/2009 06:33 PM

 

To

"Grosso, Paul" <pgrosso@ptc.com>

cc

dita <dita@lists.oasis-open.org>

Subject

Re: [dita] Issue: Map element IDs and references to them


 

 





Paul got my point exactly. This is really difficult, you cannot assure that an ID is unique and any fix will almost assuredly make a bad reference now or in the future. The crux of the matter is that currently DITA encourages reuse of this type without any way to check validity before processing - correct?

Rob

Grosso, Paul wrote:
-----Original Message-----
From: Robert D Anderson [
mailto:robander@us.ibm.com]
Sent: Tuesday, 2009 August 18 17:00
To: Grosso, Paul
Cc: dita
Subject: RE: [dita] Issue: Map element IDs and references to them

Possibly - but to get the inside-section link to work, additional work
would still be required. Unless your topic IDs are all identical --
 
 
you'll
 
have this section:
   <section id="thing">
     <title>This is a silly section</title>
     <note id="test">note that IDs can be a problem</note>
     <p>Look at that note: <xref href=""#other/test"/>    </section>

If that is pulled unchanged into another topic with no modification,
 
 
you
 
will end up with a reference to "#other/test" ... meaning you will
 
 
most
 
likely have a broken link, because the new topic doesn't have
 
 
id="other".

Right, but that's a problem we already know we need to fix
(and we know how to fix it); see DITA 1.3 proposal 13001 at

http://wiki.oasis-open.org/dita/DITA_1.3_Proposals

 
If the referencing topic, as in the sample below, has id="something",
 
 
and
 
the target topic has id="other", then for the link to remain valid as
 
 
a
 
link, you'll have to do one of these:
1) Change the value to #other/test -- but if "test" is now duplicated,
 
 
you
 
have the problem we've been trying to resolve.
2) Change the value to point to the original target -
othertopic.dita#other/test - but this takes you out of the file, which
 
 
I'd
 
guess is never the desired or expected result
3) Change the note to "test-gen1" and change the reference to
"#something/test-gen1" - this is what my code does now, because (to
 
 
me) it
 
seemed closest to the author's and reader's intent. That is, within
 
 
that
 
block, the link stays valid and it stays local to that block.
 
 

Once we've implemented proposal 13001, you won't have to do anything
if the referencing topic doesn't have id="test" anywhere--and having
to do nothing to make this work is as it should be.  

If the referencing topic does have id="test", that's the problem
we're discussing where Rob suggests having some kind of "fixup"
of the ids in the referencing document instead of in the referenced
document.  Not that that's necessarily the best solution either.

Which is why it isn't clear we should be defining a particular solution
for DITA 1.2.  Whether Michael's "shoulds" are optional enough
to be acceptable is open for question.  RFC 2119 says SHOULD means
"that there may exist valid reasons in particular circumstances to
ignore a particular item, but the full implications must be understood
and carefully weighed before choosing a different course."  I'm not
sure we, ourselves, understand the full implications yet.

 
My view on that is - if one of my other topics links to "test" within
 
 
topic
 
"something", then I have created that link because I want to go to the
element I've defined in there with id="test". Likewise, if somebody
 
 
else
 
has linked to "test" within my topic, then they're linking to the
 
 
element
 
that actually exists there with id="test". I also want that link to be
reliable, regardless of what other IDs people add within section I'm
reusing.

If we go the other way, we also run in to the equivalent problem over
 
 
in
 
topic "other". What happens when we have this, and the conref pulls in
 
 
a
 
phrase with id="test":
   <section id="thing">
     <title>This is a silly section</title>
     <note id="test">note that IDs can be a problem</note>
     <p>Look at that note: <xref href=""#other/test"/>      <p conref="a.dita#nother/thing"/>
   </section>

If we have to modify the original, then the local xref is broken
 
 
because it
 
now goes to a phrase instead of the note.
 
 

Right, id fixup--regardless of where you do it--always implies
fixing up both ids and idrefs.  This is not an easy issue--which
is why I don't think we should be defining specific processing
for DITA 1.2.  This will take a lot more thought; we should tackle
this much more deliberately in DITA 1.3.

paul

 
Thoughts?

Robert D Anderson
IBM Authoring Tools Development
Chief Architect, DITA Open Toolkit



           "Grosso, Paul"
           
<pgrosso@ptc.com>

 
 
To
 
            08/18/2009 05:34          "dita"
 
 
<dita@lists.oasis-open.org>
 
            PM
 
 
cc
 

 
 
Subject
 
                                      RE: [dita] Issue: Map element
 
 
IDs
 
                                      and references to them










But Rob's point (I believe) is what if the silly section had
an xref to the note with the id="test"?  After conreffing it
into your topic, that xref will now link to something completely
different than the author of the silly section intended.

paul

 
 
-----Original Message-----
From: Robert D Anderson [
mailto:robander@us.ibm.com]
Sent: Tuesday, 2009 August 18 16:30
To: Rob Frankland
Cc: dita
Subject: Re: [dita] Issue: Map element IDs and references to them

Hi Rob,

More specifically, the issue is this one - say I have this topic:
<topic id="something">
<title>Sample topic</title>
<body>
  <p id="test">This is a sample</p>
  <section conref="othertopic.dita#other/thing"/>
</body>
</topic>

Now - what happens when the referenced section brings in an element
   
 
that
 
 
has id="test"? If the owner of that other topic randomly adds
   
 
id="test" to
 
 
a note within that section, I should not have to change the ID on my
paragraph in order to make my conref valid - I should be able to
   
 
reuse
 
without fear of breaking my own topic.

So, the second bullet in Michael's note is specifically talking
   
 
about
 
how
 
 
the processors work when that id="test" value gets pulled into the
   
 
section
 
 
in this topic. The suggestion is that, if "test" already exists in
   
 
this
 
 
topic, the ID somehow be mangled so that the original can still
   
 
work.
 
So,
 
 
the result after conref would be something like:
<topic id="something">
<title>Sample topic</title>
<body>
  <p id="test">This is a sample</p>
  <section>
    <title>This is a silly section</title>
    <note id="test-gen1">note that IDs can be a problem</note>
  </section>
</body>
</topic>

Anybody already linking or conref'ing to the id "test" within this
   
 
topic
 
 
will still be safe, and still get the item they expected.

Does that make sense?

Robert D Anderson
IBM Authoring Tools Development
Chief Architect, DITA Open Toolkit



           Rob Frankland
           
<robf@sockmonkeyc
           onsult.com>

   
 
To
 
 
                                      Michael Priestley
           08/18/2009 05:19          
<mpriestl@ca.ibm.com>
           PM
   
 
cc
 
 
                                      dita
   
 
<dita@lists.oasis-open.org>
 
 
Subject
 
 
                                      Re: [dita] Issue: Map element
   
 
IDs
 
 
                                      and references to them










In the second bullet shouldn't it be the local ID that gets changed.
   
 
If the
 
 
ID of the one being brought is changed, will cause problems in the
   
 
original
 
 
use of the ID. Local author has the much safe ability to change
   
 
value
 
of
 
 
the ID.

Rob

--
Rob Frankland
Sock Monkey Consulting, LLC
12408 Kallgren RD NE
Bainbridge Island, WA 98110
Landline: 206-780-8850
Cell: 206-963-5541


Michael Priestley wrote:

    OK, Robert talked some sense into me off-line.

    I now get Eliot's point during the call today that a link into
   
 
the
 
 
     substructures of a conref'd section (for example) is not
   
 
reliable, if
 
 
     only because it requires that link resolution be done as a
   
 
second
 
 
     pass, after conref resolution, where many processes may be
   
 
resolving
 
 
     both conrefs and links at the same time as part of a
    resolve-references pass.

    I also get Jeff's point about the closest target being
   
 
preferable to
 
 
     the first target: for example, if I have an xref to a list
   
 
item,
 
both
 
 
     in the same document, then I'd want it to continue working
   
 
even
 
after
 
 
     I conref in something between them that introduces a duplicate
   
 
id.
 
 
     So in this case, same document=closer.

    That said, I still want our behaviors to be predictable, ie
   
 
the
 
same
 
 
     across processors. But I don't want to make a
   
 
backwards-incompatible
 
 
     change either, if I can avoid it.

    So how about:

    - map documents, and individual topics, SHOULD NOT contain
   
 
duplicate
 
 
     ids on their elements (note should not, rather than must not)
    - conrefs that bring in an element with an id that already
   
 
exists in
 
 
     the conreffing context SHOULD change the id of the element
   
 
being
 
     brought in, to avoid creating a collision (again note should
   
 
not
 
     rather than must not)

    That should give a rule similar to what Jeff described in the
   
 
call
 
 
     today, and makes it recommended but not required.

    Michael Priestley, Senior Technical Staff Member (STSM)
    Lead IBM DITA Architect
   
mpriestl@ca.ibm.com
   
http://dita.xml.org/blog/25


Eliot Kimber

<ekimber@reallysi.com>


   
 
To
 
 
07/06/2009 09:27 AM                          dita

   
 
<dita@lists.oasis-open.org>
 
 
cc
 
 

   
 
Subject
 
 
                                             [dita] Issue: Map
   
 
element
 
 
                                             IDs and references to
   
 
them
 
 











    There appears to be serious inconsistency between what at
   
 
least
 
I
 
 
     understand
    our decisions about addressing elements within maps to be and
   
 
what
 
 
     the arch
    spec says. In addition, the arch spec as currently drafted is
    inconsistent
    on this matter.

    In particular, we have established that the fragment
   
 
identifier
 
for
 
 
     elements
    within maps is simply the @id attribute value, e.g.
   
 
"#sometopicref".
 
 
     However, the draft arch spec says this under "Map IDs and
   
 
element IDs
 
 
     within
    a map":

    "The id attributes for other elements in map are not of type
   
 
ID
 
and
 
 
     are not
    required to be unique."

    If this statement is true then a fragment identifier
   
 
consisting
 
of
 
 
     just the
    element ID is not sufficient to enable reliable addressing of
    elements
    within maps.

    So something has to give. I see the following possible
   
 
solutions:
 
 
     A. Define a rule for resolving ambiguous references, e.g.
   
 
"first
 
     occurrence
    in document order". This probably reflects current behavior of
   
 
most
 
 
     implementations.

    B. Require element IDs to be unique within map documents. Note
   
 
that
 
 
     because
    of shared elements between topics and maps, it's not possible
   
 
to
 
     declare the
    ID attribute for most elements to be of type ID, so this
   
 
requirement
 
 
     has to
    be validated by processors.

    C. Make topicref IDs XML IDs and scope all other element IDs
   
 
to
 
the
 
 
     nearest
    ancestor with a specified @id attribute (or the map element,
    whichever is
    nearer). Allow two-part fragment identifiers. Single-part
   
 
fragment
 
 
     identifiers address the first occurrence in document order.

    Option (A) is the simplest to implement but the least
   
 
complete.
 
     Option C is
    the most complete but changes current processing and address
    resolution
    behavior.

    As for use cases, references to topicrefs is the primary use
   
 
case for
 
 
     pointing to elements within maps, but certainly the current
   
 
spec
 
     doesn't
    disallow other references and there could be reasons to, e.g.,
    data-about,
    conref from "resource" maps, etc.

    Cheers,

    Eliot
    ----
    Eliot Kimber | Senior Solutions Architect | Really Strategies,
   
 
Inc.
 
 
     email:  
ekimber@reallysi.com <mailto:ekimber@reallysi.com>
    office: 610.631.6770 | cell: 512.554.9368
    2570 Boulevard of the Generals | Suite 213 | Audubon, PA 19403
   
www.reallysi.com <http://www.reallysi.com>  |
   
http://blog.reallysi.com
   
<http://blog.reallysi.com> | www.rsuitecms.com
   
<http://www.rsuitecms.com>



   
 
---------------------------------------------------------------------
 
 
     To unsubscribe from this mail list, you must leave the OASIS
   
 
TC
 
that
 
 
     generates this mail.  Follow this link to all your TCs in
   
 
OASIS
 
at:
 
 
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
 
 








   
 
---------------------------------------------------------------------
 
To unsubscribe from this mail list, you must leave the OASIS TC that
generates this mail.  Follow this link to all your TCs in OASIS at:

   
 
https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php
 

---------------------------------------------------------------------
To unsubscribe from this mail list, you must leave the OASIS TC that
generates this mail.  Follow this link to all your TCs in OASIS at:

https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php


 
 


---------------------------------------------------------------------
To unsubscribe from this mail list, you must leave the OASIS TC that
generates this mail.  Follow this link to all your TCs in OASIS at:

https://www.oasis-open.org/apps/org/workgroup/portal/my_workgroups.php


 

--
Rob Frankland
Sock Monkey Consulting, LLC
12408 Kallgren RD NE
Bainbridge Island, WA 98110
Landline: 206-780-8850
Cell: 206-963-5541



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