ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* XML - creating a list by hand (mkiv)
@ 2009-12-21 13:36 Peter Rolf
  2009-12-22 13:04 ` Hans Hagen
  0 siblings, 1 reply; 6+ messages in thread
From: Peter Rolf @ 2009-12-21 13:36 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Hi,

can someone give me a helping hand with the following example. I still 
have no general survey over the XML related code in ConTeXt (donno what 
functions to use). The last time I played with it is one and a half year 
ago and many things have changed (meaning that the old examples no 
longer work).

I simply want to create a XML document and insert some elements. My main 
problem is to insert an element at root level. I can insert an element 
before and after another element, but not into the element. I'm not 
sure, if I have understood the meaning of the pattern parameter 
correctly. Is this equal to XPath?


%-----
\starttext

\startluacode

local xmp = xml.convert("<?xml version='1.0' 
standalone='yes'?>\n<root>\n<bar>bla</bar>\n</root>")
--xml.before(xmp,"/root/bar","<sub>foo</sub>")

--xml.delete(xmp,"bar")
--xml.inject(xmp,"/sub","<sub>bar</sub>")-- only for xml-files?

xml.insert(xmp,"/root/bar","<sub/>")
--xml.inject(xmp,"/*/bar","<sub/>")

--xml.sprint(xml.filter(xmp,"/root/sub"))

xml.save(xmp,"test.xml")

\stopluacode

\stoptext
%-----


Best wishes,  Peter
___________________________________________________________________________________
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] 6+ messages in thread

* Re: XML - creating a list by hand (mkiv)
  2009-12-21 13:36 XML - creating a list by hand (mkiv) Peter Rolf
@ 2009-12-22 13:04 ` Hans Hagen
  2009-12-22 13:21   ` Peter Rolf
  0 siblings, 1 reply; 6+ messages in thread
From: Hans Hagen @ 2009-12-22 13:04 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Peter Rolf wrote:
> Hi,
> 
> can someone give me a helping hand with the following example. I still 
> have no general survey over the XML related code in ConTeXt (donno what 
> functions to use). The last time I played with it is one and a half year 
> ago and many things have changed (meaning that the old examples no 
> longer work).

http://www.pragma-ade.com/general/manuals/xml-mkiv.pdf

> I simply want to create a XML document and insert some elements. My main 
> problem is to insert an element at root level. I can insert an element 
> before and after another element, but not into the element. I'm not 
> sure, if I have understood the meaning of the pattern parameter 
> correctly. Is this equal to XPath?
> 
> 
> %-----
> \starttext
> 
> \startluacode
> 
> local xmp = xml.convert("<?xml version='1.0' 
> standalone='yes'?>\n<root>\n<bar>bla</bar>\n</root>")
> --xml.before(xmp,"/root/bar","<sub>foo</sub>")
> 
> --xml.delete(xmp,"bar")
> --xml.inject(xmp,"/sub","<sub>bar</sub>")-- only for xml-files?
> 
> xml.insert(xmp,"/root/bar","<sub/>")
> --xml.inject(xmp,"/*/bar","<sub/>")

this works

<sub></sub>

> --xml.sprint(xml.filter(xmp,"/root/sub"))
> 
> xml.save(xmp,"test.xml")
> 
> \stopluacode
> 
> \stoptext
> %-----
> 
> 
> Best wishes,  Peter
> ___________________________________________________________________________________ 
> 
> 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
> ___________________________________________________________________________________ 
> 


-- 

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
      tel: 038 477 53 69 | fax: 038 477 53 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] 6+ messages in thread

* Re: XML - creating a list by hand (mkiv)
  2009-12-22 13:04 ` Hans Hagen
@ 2009-12-22 13:21   ` Peter Rolf
  2009-12-22 13:33     ` Hans Hagen
  0 siblings, 1 reply; 6+ messages in thread
From: Peter Rolf @ 2009-12-22 13:21 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Am 22.12.2009 14:04, schrieb Hans Hagen:
> Peter Rolf wrote:
>> Hi,
>>
>> can someone give me a helping hand with the following example. I still
>> have no general survey over the XML related code in ConTeXt (donno
>> what functions to use). The last time I played with it is one and a
>> half year ago and many things have changed (meaning that the old
>> examples no longer work).
> 
> http://www.pragma-ade.com/general/manuals/xml-mkiv.pdf
> 
oeps, how could I missed that one... :(


>> I simply want to create a XML document and insert some elements. My
>> main problem is to insert an element at root level. I can insert an
>> element before and after another element, but not into the element.
>> I'm not sure, if I have understood the meaning of the pattern
>> parameter correctly. Is this equal to XPath?
>>
>>
>> %-----
>> \starttext
>>
>> \startluacode
>>
>> local xmp = xml.convert("<?xml version='1.0'
>> standalone='yes'?>\n<root>\n<bar>bla</bar>\n</root>")
>> --xml.before(xmp,"/root/bar","<sub>foo</sub>")
>>
>> --xml.delete(xmp,"bar")
>> --xml.inject(xmp,"/sub","<sub>bar</sub>")-- only for xml-files?
>>
>> xml.insert(xmp,"/root/bar","<sub/>")
>> --xml.inject(xmp,"/*/bar","<sub/>")
> 
> this works
> 
> <sub></sub>
> 
Mhh, not here. When I look into the saved file (test.xml) I get

<?xml version='1.0' standalone='yes'?>
<root>
<bar>bla</bar><error>invalid xml file - unparsed text</error>
</root>


But I guess that the linked PDF will give all the answers I need.

Thanks Hans!


>> --xml.sprint(xml.filter(xmp,"/root/sub"))
>>
>> xml.save(xmp,"test.xml")
>>
>> \stopluacode
>>
>> \stoptext
>> %-----
>>
>>
>> Best wishes,  Peter
>> ___________________________________________________________________________________
>>
>> 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
>> ___________________________________________________________________________________
>>
> 
> 

___________________________________________________________________________________
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] 6+ messages in thread

* Re: XML - creating a list by hand (mkiv)
  2009-12-22 13:21   ` Peter Rolf
@ 2009-12-22 13:33     ` Hans Hagen
  2010-01-12 14:47       ` Peter Rolf
  0 siblings, 1 reply; 6+ messages in thread
From: Hans Hagen @ 2009-12-22 13:33 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Peter Rolf wrote:
> Am 22.12.2009 14:04, schrieb Hans Hagen:
>> Peter Rolf wrote:
>>> Hi,
>>>
>>> can someone give me a helping hand with the following example. I still
>>> have no general survey over the XML related code in ConTeXt (donno
>>> what functions to use). The last time I played with it is one and a
>>> half year ago and many things have changed (meaning that the old
>>> examples no longer work).
>> http://www.pragma-ade.com/general/manuals/xml-mkiv.pdf
>>
> oeps, how could I missed that one... :(
> 
> 
>>> I simply want to create a XML document and insert some elements. My
>>> main problem is to insert an element at root level. I can insert an
>>> element before and after another element, but not into the element.
>>> I'm not sure, if I have understood the meaning of the pattern
>>> parameter correctly. Is this equal to XPath?
>>>
>>>
>>> %-----
>>> \starttext
>>>
>>> \startluacode
>>>
>>> local xmp = xml.convert("<?xml version='1.0'
>>> standalone='yes'?>\n<root>\n<bar>bla</bar>\n</root>")
>>> --xml.before(xmp,"/root/bar","<sub>foo</sub>")
>>>
>>> --xml.delete(xmp,"bar")
>>> --xml.inject(xmp,"/sub","<sub>bar</sub>")-- only for xml-files?
>>>
>>> xml.insert(xmp,"/root/bar","<sub/>")
>>> --xml.inject(xmp,"/*/bar","<sub/>")
>> this works
>>
>> <sub></sub>
>>
> Mhh, not here. When I look into the saved file (test.xml) I get

add some content (i need to look into the empty case (root only))

> <?xml version='1.0' standalone='yes'?>
> <root>
> <bar>bla</bar><error>invalid xml file - unparsed text</error>
> </root>
> 
> 
> But I guess that the linked PDF will give all the answers I need.

the most important change is that we now can have many handlers; when 
you are inside tex and want to manipulate xml without piping to tex, you 
need the xml:// path prefix but the manual mentions this

also, there are some tracing options that can be handy

Hans


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
      tel: 038 477 53 69 | fax: 038 477 53 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] 6+ messages in thread

* Re: XML - creating a list by hand (mkiv)
  2009-12-22 13:33     ` Hans Hagen
@ 2010-01-12 14:47       ` Peter Rolf
  2010-01-13 22:10         ` Hans Hagen
  0 siblings, 1 reply; 6+ messages in thread
From: Peter Rolf @ 2010-01-12 14:47 UTC (permalink / raw)
  To: mailing list for ConTeXt users

[-- Attachment #1: Type: text/plain, Size: 4333 bytes --]

Hi,

after a (too short) vacation I'm again trying to make this run.
(btw: inserting in empty root still does not work here)

I have attached a more detailed example (ugly XMP), that shows my
current problems. The result of the operations is saved in "xmp.xml".

And here are the problems...

1.
xml.replace(xmp,"xml://rdf:Description/dc:creator/rdf:Seq/rdf:li","<rdf:li>dc:CREATOR1</rdf:li>")

wanted:  .. <rdf:Seq> <rdf:li>dc:CREATOR1</rdf:li> </rdf:Seq> ..
I get :  .. <rdf:Seq> dc:CREATOR1 </rdf:Seq> ..

2.
How can I inject a piece of XML (file or text sequence) into the
existing XML tree? I have managed to get a valid lpath expression
("xml://rdf:..." does not work), but nothing is inserted.

3.
xml.insert(xmp,"xml://rdf:Description/dc:creator/rdf:Seq","<rdf:li>dc:CREATOR2</rdf:li>")

works only, if another (even empty) <rdf:li> element already exists. If
I delete this element beforehand, the string is inserted after <rdf:Seq>.

What does
 ["comment"]={ "auto-child replaced by auto-descendant" }
mean here?

---
The problems must be examined exclusively (comment other problems to test).

This is all very confusing, aside from the fact, that I'm used to think
in xpath and not lpath. So I'm quite unsure, if this is a ConTeXt
problem or just my ignorance of lpath. Anyhow, no fun ;)


Greetings, Peter

MTXrun | current version: 2010.01.11 14:57
This is LuaTeX, Version beta-0.50.0-2010011118



Am 22.12.2009 14:33, schrieb Hans Hagen:
> Peter Rolf wrote:
>> Am 22.12.2009 14:04, schrieb Hans Hagen:
>>> Peter Rolf wrote:
>>>> Hi,
>>>>
>>>> can someone give me a helping hand with the following example. I still
>>>> have no general survey over the XML related code in ConTeXt (donno
>>>> what functions to use). The last time I played with it is one and a
>>>> half year ago and many things have changed (meaning that the old
>>>> examples no longer work).
>>> http://www.pragma-ade.com/general/manuals/xml-mkiv.pdf
>>>
>> oeps, how could I missed that one... :(
>>
>>
>>>> I simply want to create a XML document and insert some elements. My
>>>> main problem is to insert an element at root level. I can insert an
>>>> element before and after another element, but not into the element.
>>>> I'm not sure, if I have understood the meaning of the pattern
>>>> parameter correctly. Is this equal to XPath?
>>>>
>>>>
>>>> %-----
>>>> \starttext
>>>>
>>>> \startluacode
>>>>
>>>> local xmp = xml.convert("<?xml version='1.0'
>>>> standalone='yes'?>\n<root>\n<bar>bla</bar>\n</root>")
>>>> --xml.before(xmp,"/root/bar","<sub>foo</sub>")
>>>>
>>>> --xml.delete(xmp,"bar")
>>>> --xml.inject(xmp,"/sub","<sub>bar</sub>")-- only for xml-files?
>>>>
>>>> xml.insert(xmp,"/root/bar","<sub/>")
>>>> --xml.inject(xmp,"/*/bar","<sub/>")
>>> this works
>>>
>>> <sub></sub>
>>>
>> Mhh, not here. When I look into the saved file (test.xml) I get
> 
> add some content (i need to look into the empty case (root only))
> 
>> <?xml version='1.0' standalone='yes'?>
>> <root>
>> <bar>bla</bar><error>invalid xml file - unparsed text</error>
>> </root>
>>
>>
>> But I guess that the linked PDF will give all the answers I need.
> 
> the most important change is that we now can have many handlers; when
> you are inside tex and want to manipulate xml without piping to tex, you
> need the xml:// path prefix but the manual mentions this
> 
> also, there are some tracing options that can be handy
> 
> Hans
> 
> 
> -----------------------------------------------------------------
>                                           Hans Hagen | PRAGMA ADE
>               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
>      tel: 038 477 53 69 | fax: 038 477 53 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
> ___________________________________________________________________________________
> 
> 


[-- Attachment #2: xmp.tex --]
[-- Type: text/plain, Size: 836 bytes --]

\starttext

\enabletrackers[xml.parse]
%\enabletrackers[xml.path] 
%\enabletrackers[xml.profile] -- exclusive
%\enabletrackers[xml.entities]

\startluacode

local xmp = xml.load("xmp-default.xml")

-- 1. replace empty <rdf:li/>; (results in "dc:CREATOR1" without <rdf:li> tags)
xml.replace(xmp,"xml://rdf:Description/dc:creator/rdf:Seq/rdf:li","<rdf:li>dc:CREATOR1</rdf:li>")
-- 2. inject XML sequence; (how?)
--xml.inject (xmp,"xml:///rdf:Description/dc:creator/rdf:Seq","<rdf:li>dc:CREATOR1</rdf:li>")

-- delete the first <rdf:li> entry
--xml.delete(xmp,"xml://rdf:Description/dc:creator/rdf:Seq/rdf:li")
-- 3. insert element into <rdf:Seq>; (only after/before, but not into empty)
--xml.insert (xmp,"xml:///rdf:Description/dc:creator/rdf:Seq","<rdf:li>dc:CREATOR2</rdf:li>")


xml.save(xmp,"xmp.xml")

\stopluacode
\null

\stoptext

[-- Attachment #3: xmp-default.xml --]
[-- Type: text/xml, Size: 1585 bytes --]

<x:xmpmeta xmlns:x="adobe:ns:meta/">
    <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
        <rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/">
            <dc:format>application/pdf</dc:format>
            <dc:creator>
                <rdf:Seq>
                  <rdf:li></rdf:li>
                </rdf:Seq>
            </dc:creator>
            <dc:description/>
            <dc:title>
                <rdf:Alt>
                    <rdf:li xml:lang="x-default"/>
                </rdf:Alt>
            </dc:title>
        </rdf:Description>
        <rdf:Description rdf:about="" xmlns:pdfx="http://ns.adobe.com/pdfx/1.3/">
            <pdfx:ConTeXt.Jobname/>
            <pdfx:ConTeXt.Time/>
            <pdfx:ConTeXt.Url/>
            <pdfx:ConTeXt.Version/>
            <pdfx:ID/>
            <pdfx:PTEX.Fullbanner/>
        </rdf:Description>
        <rdf:Description rdf:about="" xmlns:xmp="http://ns.adobe.com/xap/1.0/">
            <xmp:CreateDate/>
            <xmp:CreatorTool/>
            <xmp:ModifyDate/>
            <xmp:MetadataDate/>
        </rdf:Description>
        <rdf:Description rdf:about="" xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
            <pdf:Keywords/>
            <pdf:Producer/>
            <pdf:Trapped/>
        </rdf:Description>
        <rdf:Description rdf:about="" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/">
            <xmpMM:DocumentID/>
            <xmpMM:InstanceID/>
            <xmpMM:RenditionClass/>
            <xmpMM:VersionID/>
        </rdf:Description>
    </rdf:RDF>
</x:xmpmeta>

[-- Attachment #4: Type: text/plain, Size: 486 bytes --]

___________________________________________________________________________________
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] 6+ messages in thread

* Re: XML - creating a list by hand (mkiv)
  2010-01-12 14:47       ` Peter Rolf
@ 2010-01-13 22:10         ` Hans Hagen
  0 siblings, 0 replies; 6+ messages in thread
From: Hans Hagen @ 2010-01-13 22:10 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On 12-1-2010 15:47, Peter Rolf wrote:
> Hi,
>
> after a (too short) vacation I'm again trying to make this run.
> (btw: inserting in empty root still does not work here)
>
> I have attached a more detailed example (ugly XMP), that shows my
> current problems. The result of the operations is saved in "xmp.xml".

when i have time i'll have a look at it

keep in mind that the manipulation of the tree (remove, replace etc) is 
somewhat experimental and might even be broken as i didn't check it when 
i rewrote the lpath code

Hans

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
      tel: 038 477 53 69 | fax: 038 477 53 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] 6+ messages in thread

end of thread, other threads:[~2010-01-13 22:10 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-12-21 13:36 XML - creating a list by hand (mkiv) Peter Rolf
2009-12-22 13:04 ` Hans Hagen
2009-12-22 13:21   ` Peter Rolf
2009-12-22 13:33     ` Hans Hagen
2010-01-12 14:47       ` Peter Rolf
2010-01-13 22:10         ` Hans Hagen

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).