[Pharo-project] Writing API for XML (WAX) - Bibliography example

Hannes Hirzel hannes.hirzel at gmail.com
Wed Nov 3 19:28:13 CET 2010


Is XMLWriter in the upcoming 1.2 image? It is not in the 1.1 image.

--Hannes

On 11/3/10, Hannes Hirzel <hannes.hirzel at gmail.com> wrote:
> Thank you Stef, for pointing this out.
>
> I had a look at Torsten's email of July 6th about XMLWriter and the
> subsequent discussion.
>
> Yes, an alternative approach would be to model an XML  generation API
> along the lines of Seaside html rendering -- with blocks instead of
> start/end messages.
>
> Has there some work going on elsewhere besides what Torsten did?
> http://squeaksource.com/PharoGoodies/XMLWriter-tbn.5.mcz
>
> --Hannes
>
> N.B. This is only about 'XML writing' NOT about XML parsing. The idea
> is to have an API which allows to have readable XML generation code
> with an implementation which does not consume much memory. And with
> enough examples and tests.
>
>
> On 11/2/10, Stéphane Ducasse <stephane.ducasse at inria.fr> wrote:
>> Thanks hannes
>> I think that the XMLWriter offers a bit something similar influenced by
>> seaside DSL.
>>
>> Stef
>>
>> On Nov 1, 2010, at 10:58 PM, Hannes Hirzel wrote:
>>
>>> Hello
>>>
>>> I read the post by Stephane Ducasse about writing XML (see below) with
>>> a bibliography example.
>>>
>>> Recently I (re)-discovered the port to Squeak/Pharo of the Writing API
>>> for XML (WAX) (http://java.ociweb.com/mark/programming/WAX.html) and
>>> could put it to good use for writing an XML file a bit more complex
>>> than the bibliography example.
>>>
>>> From the web site
>>> WAX has the following characteristics:
>>>
>>>    * focuses on writing XML, not reading it
>>>    * requires less code than other approaches
>>>    * uses less memory than other approaches
>>>      (because it outputs XML as each method is called rather than
>>>      storing it in a DOM-like structure and outputting it later)
>>>    * writes all XML node types
>>>    * always outputs well-formed XML or throws an exception unless
>>> running in "trust me" mode
>>>    * knows how to associate DTDs, XML Schemas and XSLT stylesheets
>>> with the XML it outputs
>>>    * is well-suited for writing XML request and response messages for
>>> REST-based and SOAP-based services
>>>
>>> However I do not know how far these points apply to the Squeak/Pharo
>>> port.
>>> http://www.squeaksource.com/WAX
>>> It needs the VB Regex package (http://www.squeaksource.com/Regex)
>>>
>>> As an exercise I did the code to produce the example Stephane gave. It
>>> worked fine; see below.
>>>
>>> Regards
>>> Hannes
>>>
>>>
>>>
>>>
>>>
>>> ==========================================================
>>>
>>> 	WAX  new
>>> 		stream: (FileStream newFileNamed: 'myBibliography.xml');
>>> 	      writeXMLDeclaration: #1.0;
>>> 	      start: 'BDBase';
>>> 			attr: 'date' value: '25 May 2010';
>>> 			attr: 'note' value: 'nil';
>>> 			
>>> 			start: 'bd';
>>> 				attr: 'authors' value: 'Larcenet';
>>> 				attr: 'editor' value: 'Dargaud';
>>> 				attr: 'entryCreationDate' value: '25 March 2006';
>>> 				attr: 'entryNumber' value: '1';
>>> 				attr: 'number' value: '1';
>>> 				attr: 'original' value: 'true';
>>> 				attr: 'serie' value: 'Nic oumouk';
>>> 				attr: 'serieComplete' value: 'false';
>>> 				attr: 'title' value: 'Total souk pour nic oumouk';
>>> 				attr: 'year' value: '2005';
>>> 			end;
>>> 			
>>> 			start: 'bd';
>>> 				attr: 'authors' value: 'Greg';
>>> 				attr: 'editor' value: 'Dargaud';
>>> 				attr: 'entryCreationDate' value: '5 May 2006';
>>> 				attr: 'entryNumber' value: '2';
>>> 				attr: 'notes' value: 'sur le 4eme de couv aventure a manhattan';
>>> 				attr: 'number' value: '9';
>>> 				attr: 'original' value: 'true';
>>> 				attr: 'serie' value: 'Achille Talon';
>>> 				attr: 'title' value: 'Les petits desseins d''Achille Talon';
>>> 				attr: 'year' value: '1974';
>>> 			end;
>>> 			
>>> 			start: 'bd';
>>> 				attr: 'authors' value: 'Greg';
>>> 				attr: 'editor' value: 'Dargaud';
>>> 				attr: 'entryCreationDate' value: '5 May 2006';
>>> 				attr: 'entryNumber' value: '3';
>>> 				attr: 'notes' value: 'sur la couverture une histoire du journal
>>> tintin';
>>> 				attr: 'number' value: '13';
>>> 				attr: 'original' value: 'true';
>>> 				attr: 'serie' value: 'Achille Talon';
>>> 				attr: 'title' value: 'Pas de pitié pour Achille Talon';
>>> 				attr: 'year' value: '1976';
>>> 			end;
>>> 		end;
>>>       close.
>>>
>>> ==========================================================
>>> Output
>>> <?xml version="1.0" encoding="UTF-8"?>
>>> <BDBase date="25 May 2010" note="nil">
>>>  <bd authors="Larcenet" editor="Dargaud" entryCreationDate="25 March
>>> 2006" entryNumber="1" number="1" original="true" serie="Nic oumouk"
>>> serieComplete="false" title="Total souk pour nic oumouk" year="2005"/>
>>>  <bd authors="Greg" editor="Dargaud" entryCreationDate="5 May 2006"
>>> entryNumber="2" notes="sur le 4eme de couv aventure a manhattan"
>>> number="9" original="true" serie="Achille Talon" title="Les petits
>>> desseins d&apos;Achille Talon" year="1974"/>
>>>  <bd authors="Greg" editor="Dargaud" entryCreationDate="5 May 2006"
>>> entryNumber="3" notes="sur la couverture une histoire du journal
>>> tintin" number="13" original="true" serie="Achille Talon" title="Pas
>>> de pitié pour Achille Talon" year="1976"/>
>>> </BDBase>
>>>
>>>
>>>
>>> ==========================================================
>>>
>>> On 10/31/10, stephane ducasse <stephane.ducasse at free.fr> wrote:
>>>> How can I control that each of the node of my document get printed a cr
>>>> at
>>>> its end?
>>>>
>>>> In the past I got that
>>>>
>>>> <?xml  version="1.0" encoding="UTF-8" ?>
>>>> <BDBase date="25 May 2010" entriesNumber="2440" note="nil">
>>>> <bd authors="Larcenet" editor="Dargaud" entryCreationDate="25 March
>>>> 2006"
>>>> entryNumber="1" number="1" original="true" serie="Nic oumouk"
>>>> serieComplete="false" title="Total souk pour nic oumouk" year="2005"/>
>>>> <bd authors="Greg" editor="Dargaud" entryCreationDate="5 May 2006"
>>>> entryNumber="2" notes="sur le 4eme de couv aventure a manhattan"
>>>> number="9"
>>>> original="true" serie="Achille Talon" title="Les petits desseins
>>>> d'Achille
>>>> Talon" year="1974"/>
>>>> <bd authors="Greg" editor="Dargaud" entryCreationDate="5 May 2006"
>>>> entryNumber="3" notes="sur la couverture une histoire du journal
>>>> tintin"
>>>> number="13" original="true" serie="Achille Talon" title="Pas de pitié
>>>> pour
>>>> Achille Talon" year="1976"/>
>>>> <bd aut
>>>>
>>>> Now I get
>>>>
>>>> <?xml version="1.0" encoding="UTF-8"?><Base date="31 October 2010"
>>>> entriesNumber="2448" note="nil"><bd serieComplete="false"
>>>> editor="Dargaud"
>>>> entryCreationDate="25 March 2006" entryNumber="1" authors="Larcenet"
>>>> title="Total souk pour nic oumouk" serie="Nic oumouk" original="true"
>>>> number="1" year="2005" /><bd serieComplete="false" editor="Dargaud"
>>>> entryCreationDate="5 May 2006" entryNumber="2" authors="Greg"
>>>> title="Les
>>>> petits desseins d'Achille Talon" serie="Achille Talon" original="true"
>>>> notes="sur le 4eme de couv aventure a manhattan" number="9" year="1974"
>>>> /><bd serieComplete="false" editor="Dargaud" entryCreationDate="5 May
>>>> 2006"
>>>> entryNumber="3" authors="Greg" title="Pas de pitié pour Achille Talon"
>>>> serie="Achille Talon" original="true" notes="sur la couverture une
>>>> histoire
>>>> du journal tintin" number="13" year="1976" /><bd serieComplete="false"
>>>> editor="Dargaud" entryCreationDate="5 May 2006" entryNumber="4"
>>>> authors="Greg" title
>>>>
>>>> Thanks
>>>>
>>>> Stef
>>>>
>>>
>>
>>
>>
>




More information about the Pharo-project mailing list