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] Cross-Deliverable Linking: Requires a-priori knowledge of which maps are root maps


I just realized that if we have key scopes and the ability to address scopes
by name, then if the implication of scopes is that unqualified keyrefs
within a scope refer to keys within that scope, then we will need a way to
refer to the root (global) scope, otherwise there would be no way to refer
to global-scope keys from inside a scope.

In the context of my proposed syntax this could be something like:

<xref keyref="!global::some-key-name"/>

Where "!" signals a keyword rather than key name bound to a key space (scope
or peer root map).

Cheers,

E. 

On 3/23/13 9:54 AM, "Eliot Kimber" <ekimber@rsicms.com> wrote:

> I forgot to describe the addressing details for references to elements
> within topics. My analysis is that cross-deliverable key references doesn't
> really change the nature of the problem or the solution for key-based
> references to elements within topics.
> 
> My analysis:
> 
> Consider the case of linking to a <fig> via key: you would declare a key for
> the topic that contains the <fig> and then specify the <fig> ID as part of
> the keyref, e.g.:
> 
> In the map:
> 
> <keydef keys="figure-containing-topic"
>   href="topics/has-a-figure.dita"
> />
> 
> In the referencing topic:
> 
> <p>See <xref keyref="figure-containing-topic/fig-01"/> ...</p>
> 
> Where "fig-01" is the ID of the <fig> element.
> 
> A side effect of this syntax is that all topics bound to the key
> "figure-containing-topic" need to have an element with the ID "fig-01".
> 
> The implication for cross-deliverable addressing is the same: if I want to
> link to the <fig> in a peer deliverable, the peer topic must also provide an
> element with the ID "fig-01", e.g.:
> 
> <mapref keys="map-b" href="../map-b/map-b.ditamap"/>
> 
> <keydef keys="figure-containing-topic"
>  keyref="map-b::some-map-b-topic"
> />
> 
> The keyref from the xref above is the same, only now it resolves to the
> topic with the key "some-map-b-topic" as defined in Map B's keydefs.
> 
> This is, I think, a problem, but not one we need to address in 1.3 (although
> I did submit a proposal for doing element ID indirection, but withdrew it in
> the face of complexity concerns).
> 
> Because in 1.2 we require coordination of IDs across topics that might be
> used in different maps but bound to the same key I don't think that, in
> practice, having to coordinate across peer deliverables changes the problem
> any in practice: in most cases the peers are still going to be managed more
> or less together. Also, if it's the case, as for the DITA spec, that the
> cross-deliverable linking is only one option, with the content also being
> delivered as a single deliverable, then the problem becomes the same as in
> 1.2 and again no new solution is required (or rather, our assessment that we
> can do without a solution in practice continues to hold).
> 
> Cheers,
> 
> E.
> 
> 
> On 3/23/13 7:39 AM, "Eliot Kimber" <ekimber@rsicms.com> wrote:
> 
>> I agree with Chris that a solution for referencing keys within scopes needs
>> to be coordinated with any keyspace-to-keyspace solution.
>> 
>> A key scope is really just a key space that is explicitly related to another
>> key space, which means that it's fundamentally no different from a
>> root-map-defined key space, it just has a known relationship to other key
>> spaces (it's ancestor key spaces and descendant key spaces) whereas a
>> root-map-defined keyspace has no known relationship to any other key spaces
>> (other than any descendant key scopes it might have).
>> 
>> So I think we have a common requirement for a new key reference syntax that
>> lets you specify the key space and key together, whether that key space is a
>> peer key space or a "scope" defined in the same root map as the reference.
>> 
>> As to Robert's concern about the meaning of scope="peer" on a mapref--if we
>> have this two-level key reference syntax, then I think we can say clearly:
>> 
>> "maps referenced as peers provide keys that may be referenced by a two-part
>> key reference. The keys within peer maps *do not* contribute to the key
>> space of the referencing map."
>> 
>> That is, you cannot directly reference a key in a peer map--you must address
>> both the map (key space) and the key together. To have a local key reference
>> that gets to a peer resource you must have two levels of key definition: one
>> for the local key that then provides the keyspace-specific reference to the
>> peer key.
>> 
>> I think that is consistent with Robert's understanding of our intent for the
>> meaning of peer and with the way current processors do or should process
>> peer maps.
>> 
>> For argument's sake and for my DITA NA demo I'm going to propose the syntax:
>> 
>> [{keyspace-name}::]{keyname}[/{elementId}]
>> 
>> As the syntax for key references, where "keyspace-name" is either a key
>> bound to a peer-scope mapref or the name of a defined key scope (however
>> that works out).
>> 
>> I've chosen to use "::" as the separator as being analogous to the axis/term
>> separator in XPath: the keyspace-name establishes the context ("axis") that
>> the specified key is resolved in. I can't think of any other separator that
>> wouldn't cause potential confusion (e.g., "/", ".", "#", "%", etc.) or that
>> isn't common to all keyboards (e.g, "^").
>> 
>> Thus, to refer to a key in another map, you would have something like this:
>> 
>> 
>> <map>
>>  ...
>> <!-- Peer reference to another root map (key space): -->
>> 
>> <mapref scope="peer"
>>    keys="map-b"
>>    href="../map-b/map-b.ditamap"
>> />
>> 
>> <!-- Local key bound to key in Map B: -->
>> 
>> <keydef keys="local-key-01"
>>    keyref="map-b::topic-b-01"
>> />
>> ...
>> </map>
>> 
>> Here a reference to the key "local-key-01" gets resolved to the key
>> "topic-b-01" as defined in map map-b.ditamap.
>> 
>> Likewise, from an xref you could address the topic in map B directly if that
>> was appropriate:
>> 
>> <xref keyref="map-b::topic-b-01"/>
>> 
>> Which is the author's way of saying "I know Map B will (or should) always
>> exist and I mean for this reference to unalterably be to Map B and nothing
>> else. There are times when that's what you want.
>> 
>> For the purposes of my demo for DITA NA I will use this proposed syntax, but
>> I'm not suggesting it's either the best answer or my most considered
>> suggestion, it's just what I've thought of at the moment.
>> 
>> Cheers,
>> 
>> E.
>> 
>> 
>> 
> 
> --
> Eliot Kimber
> Senior Solutions Architect, RSI Content Solutions
> "Bringing Strategy, Content, and Technology Together"
> Main: 512.554.9368
> www.rsicms.com
> www.rsuitecms.com
> Book: DITA For Practitioners, from XML Press,
> http://xmlpress.net/publications/dita/practitioners-1/
> 

-- 
Eliot Kimber
Senior Solutions Architect, RSI Content Solutions
"Bringing Strategy, Content, and Technology Together"
Main: 512.554.9368
www.rsicms.com
www.rsuitecms.com
Book: DITA For Practitioners, from XML Press,
http://xmlpress.net/publications/dita/practitioners-1/



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