ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* Ctx & XML
@ 2014-12-10 22:08 Lukáš Procházka
  2014-12-11  1:24 ` Hans Hagen
  0 siblings, 1 reply; 6+ messages in thread
From: Lukáš Procházka @ 2014-12-10 22:08 UTC (permalink / raw)
  To: ConTeXt

Hello,

I'm having problem using LuaXml library with Ctx, both using Lua ver. 5.2.

LuaXml works fine with Lua standalone programs/scripts;
but something weird occurs when used from within Ctx (e.g. a .xml file can be read successfully from standalone Lua with LuaXml lib; but the same code doesn't give the desired result when used in combination with Ctx; a problem might be version mismatch - I'm still using both Lua 5.1 and 5.2 including 3rd party modules in my scripts - but my latest tests with Ctx & LuaXml should have avoid this; or namespace mismatch...?).

Anyway, does native Ctx XML API (has it its own namespace, like 'context.xml'?) provide a function to load a .xml file and to return its XML tree as a table, with nodes (as a table with node attributes as table members) in a proper sequence... something like LuaXml's 'xml.load("file.xml")' does?

Or how to achieve this in a best way under Ctx: XML file -> Lua table/tree?

Best regards,

Lukas


-- 
Ing. Lukáš Procházka | mailto:LPr@pontex.cz
Pontex s. r. o.      | mailto:pontex@pontex.cz | http://www.pontex.cz
Bezová 1658
147 14 Praha 4

Tel: +420 241 096 751
Fax: +420 244 461 038

___________________________________________________________________________________
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: Ctx & XML
  2014-12-10 22:08 Ctx & XML Lukáš Procházka
@ 2014-12-11  1:24 ` Hans Hagen
  2014-12-11  7:33   ` Procházka Lukáš Ing. - Pontex s. r. o.
  0 siblings, 1 reply; 6+ messages in thread
From: Hans Hagen @ 2014-12-11  1:24 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On 12/10/2014 11:08 PM, Lukáš Procházka wrote:
> Hello,
>
> I'm having problem using LuaXml library with Ctx, both using Lua ver. 5.2.
>
> LuaXml works fine with Lua standalone programs/scripts;
> but something weird occurs when used from within Ctx (e.g. a .xml file
> can be read successfully from standalone Lua with LuaXml lib; but the
> same code doesn't give the desired result when used in combination with
> Ctx; a problem might be version mismatch - I'm still using both Lua 5.1
> and 5.2 including 3rd party modules in my scripts - but my latest tests
> with Ctx & LuaXml should have avoid this; or namespace mismatch...?).

I don't know (and as we have quite some code on-board I don't care too 
much either about clashes in namespaces).

> Anyway, does native Ctx XML API (has it its own namespace, like
> 'context.xml'?) provide a function to load a .xml file and to return its
> XML tree as a table, with nodes (as a table with node attributes as
> table members) in a proper sequence... something like LuaXml's
> 'xml.load("file.xml")' does?

I assume that you also want the content of elements, not just the 
attributes.

> Or how to achieve this in a best way under Ctx: XML file -> Lua table/tree?

It all depends on what kin dof table you want (if the content is an 
indexed table and attributes keys then you have the problem that the 
element cannot be a key too as it can clash) .. anyway, it's no big deal 
to provide a stupid table, so I can provide something because after all 
the loaded xml file is a table already.

local x = xml.load("file.xml")

local t = xml.totable(x)

where x is an index/hash mix plus _tag, _type and _namespace fields as 
well (after all I assume that you need to know that too).

(btw, I bet that you can do what you want with the existing 
functionality as well, so there is not much benefit in such a table)

Probably in the next upload,

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

* Re: Ctx & XML
  2014-12-11  1:24 ` Hans Hagen
@ 2014-12-11  7:33   ` Procházka Lukáš Ing. - Pontex s. r. o.
  2014-12-11  9:10     ` Hans Hagen
  0 siblings, 1 reply; 6+ messages in thread
From: Procházka Lukáš Ing. - Pontex s. r. o. @ 2014-12-11  7:33 UTC (permalink / raw)
  To: mailing list for ConTeXt users

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

Hello,

On Thu, 11 Dec 2014 02:24:24 +0100, Hans Hagen <pragma@wxs.nl> wrote:

> On 12/10/2014 11:08 PM, Lukáš Procházka wrote:
>
> I assume that you also want the content of elements, not just the
> attributes.

Yes...

>> Or how to achieve this in a best way under Ctx: XML file -> Lua table/tree?
>
> It all depends on what kin dof table you want (if the content is an
> indexed table and attributes keys then you have the problem that the
> element cannot be a key too as it can clash) .. anyway, it's no big deal
> to provide a stupid table, so I can provide something because after all
> the loaded xml file is a table already.

It would be great.

> local x = xml.load("file.xml")
>
> local t = xml.totable(x)
>
> where x is an index/hash mix plus _tag, _type and _namespace fields as
> well (after all I assume that you need to know that too).
>
> (btw, I bet that you can do what you want with the existing
> functionality as well, so there is not much benefit in such a table)
>
> Probably in the next upload,

... Means - some functionality (for me to test or to play with) might be available tomorrow morning?

> Hans

BTW, I prepared a really-simple-XML-test which shows XML -> Lua table/tree conversion, which I'd like to achieve (and which (approx.) provides LuaXml lib).

---- XML
<a aaa="AAA">
   <b bbb="B1"/>
   <b bbb="B2">
     c
   </b>
</a>
----

---- Lua representation
{ [0] = "a", -- Element name
   { [0] = "b", -- Element name
     -- No nested members
     bbb = "B1", -- Atts
   },
   { [0] = "b", -- Element name
     { "c", }, -- Nested member
     bbb = "B2", -- Atts
   },
   aaa = "AAA", -- Atts
}
----

Thanks again.

Best regards,

Lukas


-- 
Ing. Lukáš Procházka | mailto:LPr@pontex.cz
Pontex s. r. o.      | mailto:pontex@pontex.cz | http://www.pontex.cz
Bezová 1658
147 14 Praha 4

Tel: +420 241 096 751
Fax: +420 244 461 038

[-- Attachment #2: t.xml --]
[-- Type: text/xml, Size: 303 bytes --]

<a aaa="AAA">
  <b bbb="B1"/>
  <b bbb="B2">
    c
  </b>
</a>

<!--
{ [0] = "a", -- Element name
  { [0] = "b", -- Element name
    -- No nested members
    bbb = "B1", -- Atts
  },
  { [0] = "b", -- Element name
    { "c", }, -- Nested member
    bbb = "B2", -- Atts
  },
  aaa = "AAA", -- Atts
}
-->

[-- Attachment #3: Type: text/plain, Size: 485 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: Ctx & XML
  2014-12-11  7:33   ` Procházka Lukáš Ing. - Pontex s. r. o.
@ 2014-12-11  9:10     ` Hans Hagen
  2014-12-11 11:25       ` Procházka Lukáš Ing. - Pontex s. r. o.
  0 siblings, 1 reply; 6+ messages in thread
From: Hans Hagen @ 2014-12-11  9:10 UTC (permalink / raw)
  To: ntg-context

On 12/11/2014 8:33 AM, Procházka Lukáš Ing. - Pontex s. r. o. wrote:
> Hello,
>
> On Thu, 11 Dec 2014 02:24:24 +0100, Hans Hagen <pragma@wxs.nl> wrote:
>
>> On 12/10/2014 11:08 PM, Lukáš Procházka wrote:
>>
>> I assume that you also want the content of elements, not just the
>> attributes.
>
> Yes...
>
>>> Or how to achieve this in a best way under Ctx: XML file -> Lua
>>> table/tree?
>>
>> It all depends on what kin dof table you want (if the content is an
>> indexed table and attributes keys then you have the problem that the
>> element cannot be a key too as it can clash) .. anyway, it's no big deal
>> to provide a stupid table, so I can provide something because after all
>> the loaded xml file is a table already.
>
> It would be great.
>
>> local x = xml.load("file.xml")
>>
>> local t = xml.totable(x)
>>
>> where x is an index/hash mix plus _tag, _type and _namespace fields as
>> well (after all I assume that you need to know that too).
>>
>> (btw, I bet that you can do what you want with the existing
>> functionality as well, so there is not much benefit in such a table)
>>
>> Probably in the next upload,
>
> .... Means - some functionality (for me to test or to play with) might
> be available tomorrow morning?
>
>> Hans
>
> BTW, I prepared a really-simple-XML-test which shows XML -> Lua
> table/tree conversion, which I'd like to achieve (and which (approx.)
> provides LuaXml lib).
>
> ---- XML
> <a aaa="AAA">
>    <b bbb="B1"/>
>    <b bbb="B2">
>      c
>    </b>
> </a>
> ----
>
> ---- Lua representation
> { [0] = "a", -- Element name
>    { [0] = "b", -- Element name
>      -- No nested members
>      bbb = "B1", -- Atts
>    },
>    { [0] = "b", -- Element name
>      { "c", }, -- Nested member
>      bbb = "B2", -- Atts
>    },
>    aaa = "AAA", -- Atts
> }
> ----

that already makes assumptions that it's just data ... the context xml 
parser is a roundtrip one so a bit more control is provided:

local str = [[
<?xml version="1.0" ?>
<a one="1">
     <!-- rubish -->
   <b two="1"/>
   <b two="2">
     c &gt; d
   </b>
</a>
]]

I've added some flags:

inspect(xml.totable(xml.convert(str)))

table={
  {
   "xml version=\"1.0\" ",
   ["_type"]="instruction",
  },
  "\
",
  {
   "\
     ",
   {
    " rubish ",
    ["_type"]="comment",
   },
   "\
   ",
   {
    ["_tag"]="b",
    ["_type"]="_element",
    ["two"]="1",
   },
   "\
   ",
   {
    "\
     c > d\
   ",
    ["_tag"]="b",
    ["_type"]="_element",
    ["two"]="2",
   },
   "\
",
   ["_tag"]="a",
   ["_type"]="_element",
   ["one"]="1",
  },
  ["_type"]="root",
}

inspect(xml.totable(xml.convert(str),true))

table={
  {
   "xml version=\"1.0\"",
   ["_type"]="instruction",
  },
  {
   {
    "rubish",
    ["_type"]="comment",
   },
   {
    ["_tag"]="b",
    ["_type"]="_element",
    ["two"]="1",
   },
   {
    "c > d",
    ["_tag"]="b",
    ["_type"]="_element",
    ["two"]="2",
   },
   ["_tag"]="a",
   ["_type"]="_element",
   ["one"]="1",
  },
  ["_type"]="root",
}

inspect(xml.totable(xml.convert(str),true,true))

table={
  {
   [0]="a",
   {
    [0]="b",
    ["two"]="1",
   },
   {
    [0]="b",
    "c > d",
    ["two"]="2",
   },
   ["one"]="1",
  },
}

The last one is yours. Of course in all cases you loose info that is 
present in the original representation (where you can also access the
nodes via expressions). Don't expect additional helpers for this 
'totable' variant.

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

* Re: Ctx & XML
  2014-12-11  9:10     ` Hans Hagen
@ 2014-12-11 11:25       ` Procházka Lukáš Ing. - Pontex s. r. o.
  2014-12-11 13:09         ` Hans Hagen
  0 siblings, 1 reply; 6+ messages in thread
From: Procházka Lukáš Ing. - Pontex s. r. o. @ 2014-12-11 11:25 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Hello Hans,

On Thu, 11 Dec 2014 10:10:16 +0100, Hans Hagen <pragma@wxs.nl> wrote:

>
> that already makes assumptions that it's just data ... the context xml
> parser is a roundtrip one so a bit more control is provided:
>
> local str = [[
> <?xml version="1.0" ?>
> <a one="1">
>      <!-- rubish -->
>    <b two="1"/>
>    <b two="2">
>      c &gt; d
>    </b>
> </a>
> ]]
>
> I've added some flags:
>
> inspect(xml.totable(xml.convert(str)))
>
> table={
>   {
>    "xml version=\"1.0\" ",
>    ["_type"]="instruction",
>   },
>   "\
> ",
>   {
>    "\
>      ",
>    {
>     " rubish ",
>     ["_type"]="comment",
>    },
>    "\
>    ",
>    {
>     ["_tag"]="b",
>     ["_type"]="_element",
>     ["two"]="1",
>    },
>    "\
>    ",
>    {
>     "\
>      c > d\
>    ",
>     ["_tag"]="b",
>     ["_type"]="_element",
>     ["two"]="2",
>    },
>    "\
> ",
>    ["_tag"]="a",
>    ["_type"]="_element",
>    ["one"]="1",
>   },
>   ["_type"]="root",
> }
>
> inspect(xml.totable(xml.convert(str),true))
>
> table={
>   {
>    "xml version=\"1.0\"",
>    ["_type"]="instruction",
>   },
>   {
>    {
>     "rubish",
>     ["_type"]="comment",
>    },
>    {
>     ["_tag"]="b",
>     ["_type"]="_element",
>     ["two"]="1",
>    },
>    {
>     "c > d",
>     ["_tag"]="b",
>     ["_type"]="_element",
>     ["two"]="2",
>    },
>    ["_tag"]="a",
>    ["_type"]="_element",
>    ["one"]="1",
>   },
>   ["_type"]="root",
> }
>
> inspect(xml.totable(xml.convert(str),true,true))
>
> table={
>   {
>    [0]="a",
>    {
>     [0]="b",
>     ["two"]="1",
>    },
>    {
>     [0]="b",
>     "c > d",
>     ["two"]="2",
>    },
>    ["one"]="1",
>   },
> }
>
> The last one is yours. Of course in all cases you loose info that is
> present in the original representation (where you can also access the
> nodes via expressions). Don't expect additional helpers for this
> 'totable' variant.

this is great. I'll try it...

Thank you.

BTW: In your example, you are using the following enum of "_type":

"instruction",
"comment",
"_element", <-- REALLY UNDERSCORE here?
"root",

Best regards,

Lukas

>
> Hans


-- 
Ing. Lukáš Procházka | mailto:LPr@pontex.cz
Pontex s. r. o.      | mailto:pontex@pontex.cz | http://www.pontex.cz
Bezová 1658
147 14 Praha 4

Tel: +420 241 096 751
Fax: +420 244 461 038

___________________________________________________________________________________
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: Ctx & XML
  2014-12-11 11:25       ` Procházka Lukáš Ing. - Pontex s. r. o.
@ 2014-12-11 13:09         ` Hans Hagen
  0 siblings, 0 replies; 6+ messages in thread
From: Hans Hagen @ 2014-12-11 13:09 UTC (permalink / raw)
  To: ntg-context

On 12/11/2014 12:25 PM, Procházka Lukáš Ing. - Pontex s. r. o. wrote:

> BTW: In your example, you are using the following enum of "_type":
>
> "instruction",
> "comment",
> "_element", <-- REALLY UNDERSCORE here?
> "root",

of course, as you can have an attribute with name 'element'

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

end of thread, other threads:[~2014-12-11 13:09 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-12-10 22:08 Ctx & XML Lukáš Procházka
2014-12-11  1:24 ` Hans Hagen
2014-12-11  7:33   ` Procházka Lukáš Ing. - Pontex s. r. o.
2014-12-11  9:10     ` Hans Hagen
2014-12-11 11:25       ` Procházka Lukáš Ing. - Pontex s. r. o.
2014-12-11 13:09         ` 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).