Problem Using conkeyref with glossentry
Post here questions and problems related to editing and publishing DITA content.
-
- Posts: 106
- Joined: Wed Dec 18, 2013 3:07 am
Problem Using conkeyref with glossentry
Hello,
Using V19.0, if I try to insert a glossentry by conkeyref using the Reuse Content page, I get a "Conref was not expanded" error.
It seems that Oxygen isn't picking up the referenced id in the "Reference to" field - just the key name. When I select a target ID and click "Insert", Oxygen inserts a glossentry with the key name but no /id after it. For example, if the key name is "canon", I get:
The same thing happens if I double-click a target ID.
I've tested this inserting a few other elements (but not all) and it doesn't seem to happen.
Am I doing something wrong?
Cheers,
Eddie.
Using V19.0, if I try to insert a glossentry by conkeyref using the Reuse Content page, I get a "Conref was not expanded" error.
It seems that Oxygen isn't picking up the referenced id in the "Reference to" field - just the key name. When I select a target ID and click "Insert", Oxygen inserts a glossentry with the key name but no /id after it. For example, if the key name is "canon", I get:
Code: Select all
<glossentry id="id_i4x_cnt_4bb" conkeyref="canon">
<glossterm/>
</glossentry>
I've tested this inserting a few other elements (but not all) and it doesn't seem to happen.
Am I doing something wrong?
Cheers,
Eddie.
-
- Posts: 9439
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Problem Using conkeyref with glossentry
Hi Eddie,
A <glossentry> element is a DITA topic specialization. So it is not a DITA element, but a DITA topic.
According to the DITA specification:
http://docs.oasis-open.org/dita/dita/v1 ... fattribute
For example let's say I have a DITA file containing inside a glossentry:
and in the DITA Map I define a key for it:
then I can create another DITA file containing a glossentry which has a conkeyref to the first one:
But I may not understand your current setup. For example did you add multiple glossentries in the same DITA topic and now you are trying to conkeyref to them from other places?
Regards,
Radu
A <glossentry> element is a DITA topic specialization. So it is not a DITA element, but a DITA topic.
According to the DITA specification:
http://docs.oasis-open.org/dita/dita/v1 ... fattribute
For content references from map elements to map elements or topic elements to topic elements, the value of the @conkeyref attribute is a key name, where the key must be bound to a map element (for references from map elements) or a topic element (for references from topic elements).
Because a <glossentry> is actually a topic (specialized from the base DITA <topic> element), the first quote applies to it. So whenever you add a conkeyref on a glossentry, you must not add an element ID after the key name, the key should be enough information to point to the target glossentry.For all other elements, the value of the @conkeyref attribute is a key name, an optional slash ("/"), and the ID of the target element, where the key name must be bound to the map or topic that contains the topic element.
For example let's say I have a DITA file containing inside a glossentry:
Code: Select all
<!DOCTYPE glossentry PUBLIC "-//OASIS//DTD DITA Glossary//EN" "glossary.dtd">
<glossentry id="flowers.genus">
<glossterm>Genus</glossterm>
<glossdef>A low-level taxonomic rank used in the classification of living and fossil organisms.
Other well-known taxonomic ranks are domain, kingdom, phylum, class, order, family, and
species, with <term>genus</term> fitting between family and species. The scientific name of
a genus may be called the generic name: it is always capitalized.</glossdef>
</glossentry>
Code: Select all
<topicref href="concepts/glossaryGenus.dita" keys="genus"/>
Code: Select all
<!DOCTYPE glossentry PUBLIC "-//OASIS//DTD DITA Glossary//EN" "glossary.dtd">
<glossentry id="glossary" conkeyref="genus">
<glossterm>Glossary</glossterm>
<glossdef></glossdef>
</glossentry>
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 106
- Joined: Wed Dec 18, 2013 3:07 am
Re: Problem Using conkeyref with glossentry
Hello Radu.
Thanks for the quick reply. We noticed this because we have someone creating a general manual for some printing software, as well as specific manuals for specific printers (Canon, Ricoh, etc). Each of those manuals has a glossary file (created with multiple glossentries in a glossgroup).
They want to make a glossary for the general manual that pulls some content from the product-specific glossaries using conkeyref at glossentry level.
Is it better to use conref in this case? (It seems to work OK.)
You said "you must not add an element ID after the key name", but I tried doing this in text view and it works fine - no errors and the output is OK.
Cheers,
Eddie
Thanks for the quick reply. We noticed this because we have someone creating a general manual for some printing software, as well as specific manuals for specific printers (Canon, Ricoh, etc). Each of those manuals has a glossary file (created with multiple glossentries in a glossgroup).
They want to make a glossary for the general manual that pulls some content from the product-specific glossaries using conkeyref at glossentry level.
Is it better to use conref in this case? (It seems to work OK.)
You said "you must not add an element ID after the key name", but I tried doing this in text view and it works fine - no errors and the output is OK.
Cheers,
Eddie
-
- Posts: 9439
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Problem Using conkeyref with glossentry
Hi Eddie,
In my opinion I think that according to the DITA specfication in this case the publishing should fail, I added an issue for it maybe the DITA OT developers could give me their opinion on this:
https://github.com/dita-ot/dita-ot/issues/2816
Coming back to how your case could be made to work, if you have a glossgroup looking like this:
you can define in the DITA Map multiple keys, each pointing to an individual topic (glossentry) in the glossgroup:
and make the conkeyrefs point directly to those specific keys.
Regards,
Radu
Actually I said (or wanted to say) something like "you must not add a topic ID after the key name". The glossentry is a topic. You could have used this "keyName/idValue" construct to refer to an ID of an element inside the glossentry, for example to a paragraph located there.You said "you must not add an element ID after the key name", but I tried doing this in text view and it works fine - no errors and the output is OK.
In my opinion I think that according to the DITA specfication in this case the publishing should fail, I added an issue for it maybe the DITA OT developers could give me their opinion on this:
https://github.com/dita-ot/dita-ot/issues/2816
Coming back to how your case could be made to work, if you have a glossgroup looking like this:
Code: Select all
<!DOCTYPE glossgroup PUBLIC "-//OASIS//DTD DITA Glossary Group//EN" "glossgroup.dtd">
<glossgroup id="glossgroup">
<title>GlossGroup</title>
<glossentry id="entry1">
<glossterm>Genus</glossterm>
<glossdef></glossdef>
</glossentry>
<glossentry id="entry2">
<glossterm>Genus</glossterm>
<glossdef></glossdef>
</glossentry>
</glossgroup>
Code: Select all
<keydef keys="keyToGLEntry1" href="topics/glossgroup.dita#entry1"/>
<keydef keys="keyToGLEntry2" href="topics/glossgroup.dita#entry2"/>
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 106
- Joined: Wed Dec 18, 2013 3:07 am
Re: Problem Using conkeyref with glossentry
Hello Radu,
Thanks again for the reply.
I understand the reasoning behind not allowing ids after the key name now, although the way the file was originally constructed makes sense to me. (It seems cumbersome to define a key for every glossentry.)
A couple of follow-up questions based on this:
Should the topic be passing validation if it is written like this? (glossentry conkeyref="keyname/id")
Shouldn't the behaviour be the same with conref?
Thanks for posting the question to DITA OT on github. I'll keep an eye on it.
Cheers,
Eddie
Thanks again for the reply.
I understand the reasoning behind not allowing ids after the key name now, although the way the file was originally constructed makes sense to me. (It seems cumbersome to define a key for every glossentry.)
A couple of follow-up questions based on this:
Should the topic be passing validation if it is written like this? (glossentry conkeyref="keyname/id")
Shouldn't the behaviour be the same with conref?
Thanks for posting the question to DITA OT on github. I'll keep an eye on it.
Cheers,
Eddie
-
- Posts: 9439
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Problem Using conkeyref with glossentry
Hi Eddie,
So:
it is considered as if the key is mapped to the first topic ID found inside the "glossgroup.dita".
Regards,
Radu
So:
Oxygen's "Validate and check for completeness" action from the DITA Maps Manager should complain about this type of conkeyref. At least it does for me, I'm using Oxygen 19.1.Should the topic be passing validation if it is written like this? (glossentry conkeyref="keyname/id")
No. A key is defined as pointing directly to an individual topic element. So even if you define a key like this:Shouldn't the behaviour be the same with conref?
Code: Select all
<keydef keys="keyToGLEntry1" href="topics/glossgroup.dita"/>
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 106
- Joined: Wed Dec 18, 2013 3:07 am
Re: Problem Using conkeyref with glossentry
Hello Radu,
About picking up the error when validating glossentry conkeyref="keyname/id", this seems to be an improvement in V19.1.
I installed it yesterday evening and validating at map level does pick it up. (But validating the individual topic does not.) Until then, I'm sure Oxygen wasn't picking up the error. I installed over V19.0, so I can't go back and check, but I do still have V18.1 installed and this allows the file to pass validation at both map and individual topic level.
(Not a criticism, by the way, just a partial explanation of why we were confused.)
Appreciate the help as always.
Eddie.
About picking up the error when validating glossentry conkeyref="keyname/id", this seems to be an improvement in V19.1.
I installed it yesterday evening and validating at map level does pick it up. (But validating the individual topic does not.) Until then, I'm sure Oxygen wasn't picking up the error. I installed over V19.0, so I can't go back and check, but I do still have V18.1 installed and this allows the file to pass validation at both map and individual topic level.
(Not a criticism, by the way, just a partial explanation of why we were confused.)
Appreciate the help as always.
Eddie.
-
- Posts: 9439
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Problem Using conkeyref with glossentry
Hi Eddie,
Yes, it's possible we fixed a bug sometime between Oxygen 18.1 and 19.1.
About topic-level validation, this kind of validation only checks the current file. It never goes and parses the conkeyreffed file to see if that referenced ID is the ID of an element or of a topic. We do that for performance reasons, as there might be lots of conrefs/conkeyrefs, hrefs or keyrefs in the topic and automatic validation is done very often, every time you type, possibly on topics which also may not reside on the local disk drive.
So if you want full validation you should always go with the "Validate and check for completeness".
Regards,
Radu
Yes, it's possible we fixed a bug sometime between Oxygen 18.1 and 19.1.
About topic-level validation, this kind of validation only checks the current file. It never goes and parses the conkeyreffed file to see if that referenced ID is the ID of an element or of a topic. We do that for performance reasons, as there might be lots of conrefs/conkeyrefs, hrefs or keyrefs in the topic and automatic validation is done very often, every time you type, possibly on topics which also may not reside on the local disk drive.
So if you want full validation you should always go with the "Validate and check for completeness".
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 106
- Joined: Wed Dec 18, 2013 3:07 am
Re: Problem Using conkeyref with glossentry
Hello Radu,
Apologies for bringing this up again.
I tried creating a glossary the way you suggested (multiple keys, each pointing to an individual topic (glossentry) in the glossgroup) and, as far as I can tell, it's not allowed. The reason being, the key points to the glossgroup, but you have to specify the glossentry id if you want to pull any glossentry besides the first one in the group.
The only ways I can see of reusing glossentries with conkeyref are as follows:
1. Create each glossEntry as an individual glossEntry topic. Define a key for each glossEntry.
2. Create each glossEntry as an individual glossGroup topic (only one entry per group). Define a key for each glossGroup.
Either way, it seems unnecessarily bulky.
Cheers,
Eddie.
Apologies for bringing this up again.
I tried creating a glossary the way you suggested (multiple keys, each pointing to an individual topic (glossentry) in the glossgroup) and, as far as I can tell, it's not allowed. The reason being, the key points to the glossgroup, but you have to specify the glossentry id if you want to pull any glossentry besides the first one in the group.
The only ways I can see of reusing glossentries with conkeyref are as follows:
1. Create each glossEntry as an individual glossEntry topic. Define a key for each glossEntry.
2. Create each glossEntry as an individual glossGroup topic (only one entry per group). Define a key for each glossGroup.
Either way, it seems unnecessarily bulky.
Cheers,
Eddie.
-
- Posts: 9439
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Problem Using conkeyref with glossentry
Hi Eddie,
In one of the examples I gave you above, you had a glossgroup containing gloss entries, one of the glossentries had id="entry1" and in the DITA Map there was a keydef like this:
Did you try that approach?
Regards,
Radu
In one of the examples I gave you above, you had a glossgroup containing gloss entries, one of the glossentries had id="entry1" and in the DITA Map there was a keydef like this:
Code: Select all
<keydef keys="keyToGLEntry1" href="topics/glossgroup.dita#entry1"/>
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 106
- Joined: Wed Dec 18, 2013 3:07 am
Re: Problem Using conkeyref with glossentry
Hello Radu,
Yes, I tried what you suggested. For example, the main glossary reuses some entries from the Canon glossary, so I have these keys in the map:
And glossentries in canon-gloss.dita with IDs "canon-gloss-1" etc.
If I try to insert any of those entries in the main glossary using conkeyref, I get the same error:
Cheers,
Eddie.
Yes, I tried what you suggested. For example, the main glossary reuses some entries from the Canon glossary, so I have these keys in the map:
Code: Select all
<keydef keys="canon-1" href="canon-gloss.dita#canon-gloss-1"/>
<keydef keys="canon-2" href="canon-gloss.dita#canon-gloss-2"/>
<keydef keys="canon-3" href="canon-gloss.dita#canon-gloss-3"/>
<keydef keys="canon-4" href="canon-gloss.dita#canon-gloss-4"/>
If I try to insert any of those entries in the main glossary using conkeyref, I get the same error:
Which, although inconvenient, makes sense according to what you explained earlier.Key reference to topic must not contain topic ID "canon-gloss-1".
Cheers,
Eddie.
-
- Posts: 9439
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Problem Using conkeyref with glossentry
Hi Eddie,
I tested a similar situation on my side, with the conkeyref looking like this:
In my opinion the "Validate and check for completeness" should not report an error in this case because it's a valid situation so I added an internal issue to report an error in this case.
But the publishing works so you should continue with this approach.
Regards,
Radu
I tested a similar situation on my side, with the conkeyref looking like this:
Code: Select all
<glossentry id="ddl" conkeyref="canon-1">
<glossterm></glossterm>
<glossdef></glossdef>
</glossentry>
But the publishing works so you should continue with this approach.
Regards,
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
-
- Posts: 9439
- Joined: Fri Jul 09, 2004 5:18 pm
Re: Problem Using conkeyref with glossentry
Hi,
We just released Oxygen XML Editor 20 which no longer reports an error in this case listed above:
Regards,
Radu
We just released Oxygen XML Editor 20 which no longer reports an error in this case listed above:
Code: Select all
<glossentry id="ddl" conkeyref="canon-1">
<glossterm></glossterm>
<glossdef></glossdef>
</glossentry>
Radu
Radu Coravu
<oXygen/> XML Editor
http://www.oxygenxml.com
<oXygen/> XML Editor
http://www.oxygenxml.com
Return to “DITA (Editing and Publishing DITA Content)”
Jump to
- Oxygen XML Editor/Author/Developer
- ↳ Feature Request
- ↳ Common Problems
- ↳ DITA (Editing and Publishing DITA Content)
- ↳ SDK-API, Frameworks - Document Types
- ↳ DocBook
- ↳ TEI
- ↳ XHTML
- ↳ Other Issues
- Oxygen XML Web Author
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Content Fusion
- ↳ Feature Request
- ↳ Common Problems
- Oxygen JSON Editor
- ↳ Feature Request
- ↳ Common Problems
- Oxygen PDF Chemistry
- ↳ Feature Request
- ↳ Common Problems
- Oxygen Feedback
- ↳ Feature Request
- ↳ Common Problems
- Oxygen XML WebHelp
- ↳ Feature Request
- ↳ Common Problems
- XML
- ↳ General XML Questions
- ↳ XSLT and FOP
- ↳ XML Schemas
- ↳ XQuery
- NVDL
- ↳ General NVDL Issues
- ↳ oNVDL Related Issues
- XML Services Market
- ↳ Offer a Service