ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* xml cross-references in lua?
@ 2012-09-11 17:22 Thomas A. Schmitz
  2012-09-11 18:18 ` Hans Hagen
  0 siblings, 1 reply; 3+ messages in thread
From: Thomas A. Schmitz @ 2012-09-11 17:22 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Hi all,

I have a question about xml processing and I think that what I want/need 
can best be achieved by using lua code, but so far, I'm not really sure 
how to proceed, so any help from one of the resident lua gurus would be 
welcome.

So: the question. xml allows to provide elements with unique identifiers 
so that one can add cross-references within the document structure. Here 
is a sample xml file that shows what I mean:

<document>
   <bibitem xml:id="hagen2011">
     <author>Hans Hagen</author>
     <title>The Meaning of Life Is 42</title>
     <journal>The Rhetoric of Mathematics</journal>
     <date>2011</date>
   </bibitem>
   <bibitem xml:id="hagen2012">
     <author>Hans Hagen</author>
     <title>The New Meaning is Now 43</title>
     <journal>High Energy Metaphysics</journal>
     <date>2012</date>
   </bibitem>
   <text>
     <p>This has been successfully proven in papers by <bib
     ref="#hagen2011"/> and <bib ref="#hagen2012"/>.</p>
   </text>
</document>

[Note: the TEI guidelines add the hash character in the attribute value 
to such references, but after much googling, I'm still not sure if this 
is standard or necessary or bizarre.]

So: at the point of the reference (which may be empty, like here, or 
contain text), I want to refer back to the bibitems. The typesetting 
engine should then be instructed to pick up the information, so that 
this is, e.g., typeset as "This has been successfully proven in papers 
by Hans Hagen (2011) and Hans Hagen (2012)."

My idea: since the xml:id attributes must be unique across the document, 
it would be easiest to collect them into a lua table, with the xml:id as 
key, so their content could be accessed and typeset later. But 
unfortunately, I have no clue how to go about this... Could somebody 
provide a pointer?

Thanks for your interest, if you've read this far!

Thomas
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: xml cross-references in lua?
  2012-09-11 17:22 xml cross-references in lua? Thomas A. Schmitz
@ 2012-09-11 18:18 ` Hans Hagen
  2012-09-12  6:32   ` Thomas A. Schmitz
  0 siblings, 1 reply; 3+ messages in thread
From: Hans Hagen @ 2012-09-11 18:18 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Thomas A. Schmitz

On 11-9-2012 19:22, Thomas A. Schmitz wrote:
> Hi all,
>
> I have a question about xml processing and I think that what I want/need
> can best be achieved by using lua code, but so far, I'm not really sure
> how to proceed, so any help from one of the resident lua gurus would be
> welcome.
>
> So: the question. xml allows to provide elements with unique identifiers
> so that one can add cross-references within the document structure. Here
> is a sample xml file that shows what I mean:
>
> <document>
>    <bibitem xml:id="hagen2011">
>      <author>Hans Hagen</author>
>      <title>The Meaning of Life Is 42</title>
>      <journal>The Rhetoric of Mathematics</journal>
>      <date>2011</date>
>    </bibitem>
>    <bibitem xml:id="hagen2012">
>      <author>Hans Hagen</author>
>      <title>The New Meaning is Now 43</title>
>      <journal>High Energy Metaphysics</journal>
>      <date>2012</date>
>    </bibitem>
>    <text>
>      <p>This has been successfully proven in papers by <bib
>      ref="#hagen2011"/> and <bib ref="#hagen2012"/>.</p>
>    </text>
> </document>
>
> [Note: the TEI guidelines add the hash character in the attribute value
> to such references, but after much googling, I'm still not sure if this
> is standard or necessary or bizarre.]
>
> So: at the point of the reference (which may be empty, like here, or
> contain text), I want to refer back to the bibitems. The typesetting
> engine should then be instructed to pick up the information, so that
> this is, e.g., typeset as "This has been successfully proven in papers
> by Hans Hagen (2011) and Hans Hagen (2012)."
>
> My idea: since the xml:id attributes must be unique across the document,
> it would be easiest to collect them into a lua table, with the xml:id as
> key, so their content could be accessed and typeset later. But
> unfortunately, I have no clue how to go about this... Could somebody
> provide a pointer?
>
> Thanks for your interest, if you've read this far!

If the number of bib items is not that large hashing does not save much. 
(In x-xfdf.mkiv you can see another example).

\starttext

\startbuffer[demo]
<document>
   <bibitem xml:id="hagen2011">
     <author>Hans Hagen</author>
     <title>The Meaning of Life Is 42</title>
     <journal>The Rhetoric of Mathematics</journal>
     <date>2011</date>
   </bibitem>
   <bibitem xml:id="hagen2012">
     <author>Hans Hagen</author>
     <title>The New Meaning is Now 43</title>
     <journal>High Energy Metaphysics</journal>
     <date>2012</date>
   </bibitem>
   <text>
     <p>This has been successfully proven in papers by <bib
     ref="#hagen2011"/> and <bib ref="#hagen2012"/>.</p>
   </text>
</document>
\stopbuffer

\startxmlsetups xml:define
     \xmlsetsetup{#1}{*}{xml:*}
\stopxmlsetups

\startxmlsetups xml:document
     \xmlall{#1}{/text}
\stopxmlsetups
\startxmlsetups xml:text
     \xmlflush{#1}
\stopxmlsetups
\startxmlsetups xml:p
     \xmlflush{#1}
     \par
\stopxmlsetups

\startxmlsetups xml:bib
    \BibAuthor{#1}{\xmlatt{#1}{ref}}
\stopxmlsetups

\startxmlsetups xml:author
     [[\xmlflush{#1}]]
\stopxmlsetups

\def\BibAuthor#1#2{[1:\xmlfirst{whatever}{/document/bibitem[@xml:id==string.sub('#2',2)]/author}]}

\xmlregistersetup{xml:define}

\xmlprocessbuffer{whatever}{demo}{}

\startluacode
     userdata = userdata or { }
     userdata.bibitems = { }
\stopluacode

\startxmlsetups xml:document
     \xmlflush{#1}
\stopxmlsetups

\startxmlsetups xml:bibitem
     \ctxlua{userdata.bibitems["\letterhash\xmlatt{#1}{xml:id}"] = "#1"}
\stopxmlsetups

\def\BibAuthor#1#2{[2:\xmlfirst{\cldcontext{userdata.bibitems['#2']}}{/author}]}

\xmlprocessbuffer{whatever}{demo}{}

\stoptext

(I ran into a recently introduced side effect of an optimization so I'll 
generate you a new beta. Older versions should work anyway as no special 
trickery is used.)

Hans


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
                                              | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: xml cross-references in lua?
  2012-09-11 18:18 ` Hans Hagen
@ 2012-09-12  6:32   ` Thomas A. Schmitz
  0 siblings, 0 replies; 3+ messages in thread
From: Thomas A. Schmitz @ 2012-09-12  6:32 UTC (permalink / raw)
  To: mailing list for ConTeXt users; +Cc: Hans Hagen

On 09/11/2012 08:18 PM, Hans Hagen wrote:

>
> If the number of bib items is not that large hashing does not save
> much. (In x-xfdf.mkiv you can see another example).
>
> \starttext
>
> \startbuffer[demo] <document> <bibitem xml:id="hagen2011">
> <author>Hans Hagen</author> <title>The Meaning of Life Is 42</title>
> <journal>The Rhetoric of Mathematics</journal> <date>2011</date>
> </bibitem> <bibitem xml:id="hagen2012"> <author>Hans Hagen</author>
> <title>The New Meaning is Now 43</title> <journal>High Energy
> Metaphysics</journal> <date>2012</date> </bibitem> <text> <p>This has
> been successfully proven in papers by <bib ref="#hagen2011"/> and
> <bib ref="#hagen2012"/>.</p> </text> </document> \stopbuffer
>
> \startxmlsetups xml:define \xmlsetsetup{#1}{*}{xml:*} \stopxmlsetups
>
> \startxmlsetups xml:document \xmlall{#1}{/text} \stopxmlsetups
> \startxmlsetups xml:text \xmlflush{#1} \stopxmlsetups \startxmlsetups
> xml:p \xmlflush{#1} \par \stopxmlsetups
>
> \startxmlsetups xml:bib \BibAuthor{#1}{\xmlatt{#1}{ref}}
> \stopxmlsetups
>
> \startxmlsetups xml:author [[\xmlflush{#1}]] \stopxmlsetups
>
> \def\BibAuthor#1#2{[1:\xmlfirst{whatever}{/document/bibitem[@xml:id==string.sub('#2',2)]/author}]}
>
>
>
> \xmlregistersetup{xml:define}
>
> \xmlprocessbuffer{whatever}{demo}{}
>
> \startluacode userdata = userdata or { } userdata.bibitems = { }
> \stopluacode
>
> \startxmlsetups xml:document \xmlflush{#1} \stopxmlsetups
>
> \startxmlsetups xml:bibitem
> \ctxlua{userdata.bibitems["\letterhash\xmlatt{#1}{xml:id}"] = "#1"}
> \stopxmlsetups
>
> \def\BibAuthor#1#2{[2:\xmlfirst{\cldcontext{userdata.bibitems['#2']}}{/author}]}
>
>
>
> \xmlprocessbuffer{whatever}{demo}{}
>
> \stoptext
>
> (I ran into a recently introduced side effect of an optimization so
> I'll generate you a new beta. Older versions should work anyway as no
> special trickery is used.)
>
> Hans
>

Ah, wonderful, Hans, I can play with this! Thanks a lot for the swift
reply and for the help, this will get me going!
All best

Thomas
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://tex.aanhet.net
archive  : http://foundry.supelec.fr/projects/contextrev/
wiki     : http://contextgarden.net
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2012-09-12  6:32 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-09-11 17:22 xml cross-references in lua? Thomas A. Schmitz
2012-09-11 18:18 ` Hans Hagen
2012-09-12  6:32   ` Thomas A. Schmitz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).