[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: keyref and -dita-use-conref-target
Hi, Last week we discussed Jarno's question about the "-dita-use-conref-target" token. Here is an explanation and some samples to use for discussion. As a refresher: when using conref, attributes on the referencing element override those on the referenced element. For example, when you resolve the following conref, the @outputclass attribute will be preserved even if @outputclass is also specified on the referenced paragraph; if other attributes are specified on the referenced paragraph (such as @importance), they will be pulled with the content: <p outputclass="sample" conref="other.dita#topic/p"/> When any attribute is required, it is impossible to construct a conref without specifying that attribute. The "-dita-use-conref-target" token is a way to say "I have to specify this attribute for whatever reason, but I don't want it to override the equivalent attribute on the referenced element." For example, in this imagined element, resolving conref will still pull @href from the element in other.dita: <my-special-image href="-dita-use-conref-target" conref="other.dita#topic/img"/> Note that for conref processors it does not matter if a DTD or Schema actually defines the attribute as REQUIRED; processing is based on the token rather than the DTD/XSD. A longer explanation and full example are available in [1]. So on to Jarno's question: the specification today says contains the following language about resolving keys [2]: "The attributes that are common to a key definition element and a key reference element using that key, other than the @keys, @processing-role, and @id attributes, are combined as for content references, including the special processing for the @xml:lang, @dir, and @translate attributes. " This raised the question of whether the special processing for -dita-use-conref-target also applies to keys. Assume that I have the following key definition: <keydef keys="video" format="mp4" scope="local" href="tutorial.mp4" /> And the following references: 1. <xref keyref="video" scope="external"/> 2. <xref keyref="video" scope="-dita-use-conref-target"/> Based on the spec, in #1 the @scope attribute on <xref> overrides @scope on the referenced key, so the resolved element should be: <xref keyref="video" scope="external" format="mp4" href="tutorial.mp4"/> In #2, is it correct to assume that the "-dita-use-conref-target" works the same as it does for conref? If so, the resolved element should be: <xref keyref="video" scope="local" format="mp4" href="tutorial.mp4"/> Somewhat related to this, I'd be interested in following up on a related example that does not use the conref token. Assume I have the following key definition: <keydef keys="blobexample" href="localblob.dita" format="dita" scope="local"/> Now, I have a reference with fallback link information in case the key is undefined: <xref keyref="blobexample" href="http://www.example.com" format="html" scope="external"/> Based on the spec, it seems that the fallback @href is replaced, but @format and @scope override the key definition, giving the following resolved xref: <xref keyref="blobexample" href="localblob.dita" format="html" scope="external"/> Is that correct? I think this is what the spec would require, but in the past we've discussed how @format and @scope are unusual because they are so closely tied to the @href value. So, I just want to verify. Thanks - [1] http://docs.oasis-open.org/dita/v1.2/os/spec/common/ditauseconreftarget.html#usingthe-dita-use-conref-targetvalue [2] http://docs.oasis-open.org/dita/v1.2/os/spec/archSpec/processing_key_references.html Robert D Anderson IBM Authoring Tools Development Chief Architect, DITA Open Toolkit (http://dita-ot.sourceforge.net/)
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]