XML Mapping - How do I do it ?

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
17 messages Options
Reply | Threaded
Open this post in threaded view
|

XML Mapping - How do I do it ?

Marten Feldtmann-2
Within a XML data file I have the following two attributes:

<comments>http://blog.tagesschau.de/.......</comments>
<slash:comments>12</slash:comments>

both are using an attribute named "comments", but from different namespaces.

I've defined two attribute mappings like:

<AttributeMapping
        ClassAttribute="comments"
    <Attribute>comments</Attribute>
</AttributeMapping>

<AttributeMapping
   ClassAttribute="numberOfComments"
   NameSpaceURI="http://purl.org/rss/1.0/modules/slash/">
   <Attribute>comments</Attribute>
</AttributeMapping>

but both attributes are mapped to "numberOfComments" ..... :-(

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/7sDNUoFcmjsJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
dfe
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

dfe
Hi Marten,

It would be helpful if you could post your complete mapping specification and the xml file you are trying to parse.  Also a schema if you are using one.

Diane

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/VdnVU6kdx4wJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

Marten Feldtmann-2
I reduced the stuff to the minimum just to show the error. The whole mapping is used to map RSS feed information into an object structure.

After loading the classes in your image you may execute:


| domSource mapSpec orderObject|
"Parse the input XML"
domSource := (AbtXmlDOMParser newNonValidatingParser)
                            parseURI: 'd:\tools\out2.txt'.
                           
"Create a mapping specification from the mapping XML"
mapSpec := AbtXmlMappingSpec from: 'd:\tools\rssmapping2.txt'.

"Create objects from input DOM by applying rules from the mapping spec"
orderObject := domSource mapUsing: mapSpec.

The problem is, that the document contains two attributes named "comments" and "slash:comments". The documentation does not give any example how to handle these namedspace oriented attributes, but I think, I made it work, because in the much larger example other attributes from other name spaces are mapped correctly.

The attribute <slash:comments> contains an integer and is mapped to an integer attribute "numberOfComments". The attribute <comments> are strings and is mapped to a string attribute.

After executing the code you will see, that "numberOfComments" contains always "0" (numerical zero). The reason is, that the real string from <comments> is used to map into the integer attribute. Conversion of a string not holding a numerical value results in a "0".







--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/EeGNiy0qogoJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.

out2.txt (951 bytes) Download Attachment
rssmapping2.txt (1K) Download Attachment
classes.st (21K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

Marten Feldtmann-2
I posted a wrong file. outs2.txt should look like:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
    xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:wfw="http://wellformedweb.org/CommentAPI/"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:atom="http://www.w3.org/2005/Atom"
    xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    >

<channel>
    <title>blog.tagesschau.de</title>
    <generator>http://wordpress.org/?v=3.1.2</generator>
        <item>
        <title>Mecklenburg-Vorpommern &#8211; gehen oder bleiben?</title>
        <comments>http://blog.tagesschau.de/2011/08/31/mecklenburg-vorpommern-gehen-oder-bleiben/#comments</comments>
        <slash:comments>12</slash:comments>       
        </item>
    </channel>
</rss>

<!-- Dynamic page generated in 0.381 seconds. -->
<!-- Cached page generated by WP-Super-Cache on 2011-09-03 11:23:42 -->

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/80Ho2ju356wJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
dfe
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

dfe
Hi Marten,

Thanks for the information.  I think I have been able to get the example to work they way you wanted.  I did two things:

1.  Added a namespaceURI attribute to the mapping specification itself in the MappingSpec tag.   This allows the mapping spec to be looked up by the mapping parser.

2.  Used the AbtXmlMappingParser to do the work.

Here is the workspace I used:

| mappingDom mappingSpec orderObject  parser|

"Create a mapping specification from the mapping XML"
mappingDom := AbtXmlDOMParser newValidatingParser parseURI: 'C:\aaVastDev2011\MartenXmlProb\input.map'.
mappingSpec := AbtXmlMappingSpec fromMappingDOM:  mappingDom.


parser := AbtXmlMappingParser new mappingSpec: mappingSpec.

orderObject :=  parser parseURI: 'C:\aaVastDev2011\MartenXmlProb\input.xml'.
                       
orderObject  abtXmlMappedObject inspect

Here is the mapping specification (input.map):

<?xml version="1.0"?>
<!DOCTYPE XmlMappingSpec SYSTEM "abtxmap.dtd">
<XmlMappingSpec Name="Rss20Mappings"   NameSpaceURI="Vast">

<ClassElementMapping ElementTagName="rss" ClassName="RssSpecification">

<AttributeMapping ClassAttribute="channel" >
  <SubElement>channel</SubElement>
</AttributeMapping>

</ClassElementMapping>

<ClassElementMapping ElementTagName="channel" ClassName="RssChannel">

  <AttributeMapping ClassAttribute="title" >
    <Attribute>title</Attribute>
  </AttributeMapping>

 <AttributeMapping ClassAttribute="items" >
    <SubElement>item</SubElement>


  </AttributeMapping>

</ClassElementMapping>

<ClassElementMapping ElementTagName="item" ClassName="RssChannelItem">

  <AttributeMapping ClassAttribute="title" >
    <Attribute>title</Attribute>
  </AttributeMapping>

  <AttributeMapping
        ClassAttribute="numberOfComments" >
    <Attribute>comments</Attribute>
  </AttributeMapping>

  <AttributeMapping
        ClassAttribute="comments"
        NameSpaceURI="http://purl.org/rss/1.0/modules/slash/">
    <Attribute>comments</Attribute>
  </AttributeMapping>

</ClassElementMapping>


</XmlMappingSpec>


Here is the xml I used --I changed it a little, but it should make no difference (input.xml):

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
   
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    >

<channel>
    <title>blog.tagesschau.de</title>
    <generator>http://wordpress.org/?v=3.1.2</generator>
        <item>
        <title>Mecklenburg</title>
        <comments>http://blog.tagesschau.de/2011/08/31/mecklenburg</comments>

        <slash:comments>12</slash:comments>       
        </item>
    </channel>
</rss>

I attached a screen shot of the deserialized object which was created.   Let me know if this is a good solution for you.

Regards,

Diane Engles

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/EY-ufv8H6ckJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.

RssSpecification.jpg (71K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

Marten Feldtmann-2
In reply to this post by Marten Feldtmann-2
I used your files and yes it seemed to work and then I used your changes to test it against the full XML document and it did not work at all ....

Then I look at your example and it seems strange that "numberOfComments" got a string and the other "comments" attribute got the number. Therefore I changed the position of the NameSpaceURl to:

  <AttributeMapping
        ClassAttribute="numberOfComments"
        NameSpaceURI="http://purl.org/rss/1.0/modules/slash/">
    <Attribute>comments</Attribute>
  </AttributeMapping>

  <AttributeMapping
        ClassAttribute="comments" >
    <Attribute>comments</Attribute>
  </AttributeMapping>

and now the number 12 is mapped to "numberOfComments" (which is ok), but the Smalltalk attribute "comments" gets no value at all.

The main reason for this is, that BOTH XML "comments" attributes are mapped to the SAME Smalltalk attribute (regardless of namespace or not). You can verify it by simply changing the position of the XML attributes in the XML data file.

Therefore after all:  no solution.

By the way: for these special tests I used the VA 8.5, but I think, that under 8.03 it's the same.

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/4YJGHaqffWkJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

Marten Feldtmann-2
Any new informations about this problem ?

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/9oblqJo5c4MJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
dfe
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

dfe
Hi Marten,

I have been researching the problem you pointed out, but have not homed in on exactly where the problem is occurring.  It seems that the mapping spec correctly contains the namespaceURI, but sometimes the get and set selector are not properly set  in the Attribute Specification.

For instance,

with this xml:

 <?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
  
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/" >

<channel>
    <title>blog.tagesschau.de</title>
    <generator>http://wordpress.org/?v=3.1.2</generator>
    <item>
        <title>Mecklenburg</title>
 
       <slash:comments>shdAppearIn numberOfComments</slash:comments>
       <comments>12</comments>
                   
     </item>

    </channel>
</rss>




and this mapping specification (only RssChannelItem included for brevity):

<ClassElementMapping ElementTagName="item" ClassName="RssChannelItem">

  <AttributeMapping ClassAttribute="title" >
    <Attribute>title</Attribute>
  </AttributeMapping>

  <AttributeMapping ClassAttribute="comments" >       
      <Attribute>comments</Attribute>
   </AttributeMapping>

 <AttributeMapping
        ClassAttribute="numberOfComments"
       NameSpaceURI="http://purl.org/rss/1.0/modules/slash/">
 <Attribute>comments</Attribute>
</AttributeMapping>
 
</ClassElementMapping>

The XML correctly deserializes with numberOfComments set to the string 'shdAppearIn numberOfComments' and comments set to the string'12'. 

However, if you simply reverse the order of the attributes in the mapping spec and leave the xml the same:

</ClassElementMapping>

<ClassElementMapping ElementTagName="item" ClassName="RssChannelItem">

  <AttributeMapping ClassAttribute="title" >
    <Attribute>title</Attribute>
  </AttributeMapping>

 <AttributeMapping
        ClassAttribute="numberOfComments"
        NameSpaceURI="http://purl.org/rss/1.0/modules/slash/">
 <Attribute>comments</Attribute>

</AttributeMapping>


  <AttributeMapping
        ClassAttribute="comments" >
       
   <Attribute>comments</Attribute>
   </AttributeMapping>
</ClassElementMapping>


 numberOfComments is set to '12' and comments is nil.  Here is the workspace -- the attached screen shot is showing the orderObject (an instance of AbtXmlMappedRootElement) expanded to show the mapping specification instance for comments and numberOfComments:

| mappingDom mappingSpec orderObject  parser|

"Create a mapping specification from the mapping XML"
mappingDom := AbtXmlDOMParser newValidatingParser parseURI: 'C:\aaVastDev2011\MartenXmlProb\origExample.map'.
mappingSpec := AbtXmlMappingSpec fromMappingDOM:  mappingDom.


parser := AbtXmlMappingParser new mappingSpec: mappingSpec.

orderObject :=  parser parseURI: 'C:\aaVastDev2011\MartenXmlProb\origExample.xml'.

orderObject inspect.
                      
orderObject  abtXmlMappedObject inspect



I will continue to investigate this problem -- in the meantime, if you control the generated xml, you could use a unique tag for number ofComments such as <numComments>  to work around it.


--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/vGAgpNDaMF8J.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.

mappedRootElement.jpg (247K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

Marten Feldtmann-2
An answer - not related to your latest answer:

AbtDOMElement>>getElementsByTagName: aName nameSpaceURI: aNamespaceURI

seems to have a strange behaviour - when reading the comment of that method and much more interesting is a method called indirectly from that method:

AbtXmlUtility isUriCompatible: nil with: 'http://purl.org/rss/1.0/modules/slash/'

returns TRUE (!). And this means, that <comment> (which has the namespace nil) and <slash:comments> (which has the namespace 'http://...') is identical for the VA mapping code.

I can imagine, that this may be the reason for all these problems - have to investigate it more later this day.


--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/Ywn4gaxM2dQJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

Marten Feldtmann-2
Another answer:

* when correcting isUriCompatible.... method, my mapping is working, when using a newNonValidatingParser

* it still fails, when using your code to map the stuff via validatingParser .... therefore changing the parsing code slightly leads to very different results.

I've changed the method (did not think very much about it) to:

    | alias1 alias2  |
    aUri1 = aUri2
        ifTrue: [^true].

    " Check the object cache to see if the passed uri defines an alias "
    (alias1 := AbtXmlObjectCache current aliasFor: aUri1) isNil
        ifTrue: [ alias1 := aUri1 ].

    alias1 = aUri2
        ifTrue: [ ^true ].

    " Check the object cache to see if the passed uri defines an alias "
    (alias2 := AbtXmlObjectCache current aliasFor: aUri2) isNil
        ifTrue: [ alias2 := aUri2 ].

    ^alias2 = alias1


--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/dS3FqqLq5loJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

Marten Feldtmann-2
In reply to this post by dfe
Any idea ? Bug fix number opened ?

Marten

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/nD2QITp5Z94J.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

Marten Feldtmann-2
In reply to this post by Marten Feldtmann-2
Ok, this fix breaks other mapping code ...

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/gvVzNmA8R-8J.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
dfe
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

dfe
Hello Marten,

I'm not surprised that modifying that method breaks other mapping --it's been in place for a long time and is used in many places. 

I have opened case number 48740 to pursue this issue.

I do not  have a solution at the moment, but I do know that the AbtXmlMappingParser functions best in the presence of both a schema and a mapping specification, so perhaps a solution can be worked out that way, or perhaps a custom handler can be created for the slash:comments tag using the non-validating parser.

Regards,

Diane Engles



--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/6UvS5Bte9z0J.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

Marten Feldtmann-2
Ok, thanks Diane.

To summarize: all mapping stuff, where equally named attributes from different namespaces are available has the potential risc to fail - even pretty easy (in terms of human thinking) structures.

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/3hkpGK1Y94kJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

Marten Feldtmann-2
In reply to this post by Marten Feldtmann-2
Instantiations has now found a way to get rid of this problem:

Introduce a default namespace in your mapping specifications and tell the XML parser about this default name space.

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/3BwhZeUiIpwJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

jtuchel
does it mean I need to have a namespace declaration in the XML file?
If so, this still is not a solution, because I may have little to no control of the XML I need to process...

--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/U7sx2gUNLOoJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.
dfe
Reply | Threaded
Open this post in threaded view
|

Re: XML Mapping - How do I do it ?

dfe
Hi Joachim,


You do not need to have a namespace declaration in the xml file.  However, the  issue with regards to the VA Smalltalk framework is that the rss feed xml does not declare a namespace for itself, only for elements coming from other namespaces. When the xml is parsed, no namespaceURI is assigned to any of the elements with the exception of the slash:comments element in the example below.

If you set a default namespaceURI for the parser,  the xml elements will have the default namespace.  Default namespaces have an empty string as a lookup key.

parser nameSpaceSupport declarePrefix: '' uri: 'rss20'.

Then you need to add the  same namespaceURI to the mapping specification so that it will be correctly used for processing the xml.

<XmlMappingSpec Name="Rss20Mappings" NameSpaceURI="rss20" >

Once this is done, the deserialization framework can discriminate between the two comments tags and invoke the correct selector specified in the mapping specification.

Below is a small example based on Marten's earlier post.  You will need to save the xml and the mapping specification as files on your system and use the class definitions from the earlier posts or create the classes yourself to see complete deserialization.

Hope that helps.

Diane

Workspace:

| mappingDom mappingSpec orderObject parser|

"my workspace"
"Create a mapping specification from the mapping XML"
mappingDom := AbtXmlDOMParser newValidatingParser parseURI: 'C:\aaVastDev2011\MartenXmlProb\martenExample.map'.
mappingSpec := AbtXmlMappingSpec fromMappingDOM: mappingDom.
"mappingSpec inspect."

parser := AbtXmlMappingParser new mappingSpec: mappingSpec.

"declare a default namespace prefix which is an empty string so that the rss feed xml has a namespaceURI assigned to it in VA Smalltalk"
parser nameSpaceSupport declarePrefix: '' uri: 'rss20'.

orderObject := parser parseURI: 'C:\aaVastDev2011\MartenXmlProb\martenXml.xml'.
orderObject inspect.

orderObject abtXmlMappedObject inspect

Xml:

<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
>

<channel>
<title>blog.tagesschau.de</title>
<generator>http://wordpress.org/v=3.1.2</generator>
<item>
<title>Mecklenburg-Vorpommern</title>
<comments>http://blog.tagesschau.de/2011/08/31/mecklenburg-vorpommern-gehen-oder-bleiben/#comments</comments>

<slash:comments>12</slash:comments>
</item>
</channel>
</rss>

Mapping Specification:

<?xml version="1.0"?>
<!DOCTYPE XmlMappingSpec SYSTEM "abtxmap.dtd">
<XmlMappingSpec Name="Rss20Mappings" NameSpaceURI="rss20" >

<ClassElementMapping ElementTagName="rss" ClassName="RssSpecification">

<AttributeMapping ClassAttribute="channel" >
<SubElement>channel</SubElement>
</AttributeMapping>

</ClassElementMapping>

<ClassElementMapping ElementTagName="channel" ClassName="RssChannel">

<AttributeMapping ClassAttribute="title" >
<Attribute>title</Attribute>
</AttributeMapping>

<AttributeMapping ClassAttribute="items" >
<SubElement>item</SubElement>
</AttributeMapping>

</ClassElementMapping>

<ClassElementMapping ElementTagName="item" ClassName="RssChannelItem">

<AttributeMapping ClassAttribute="title" >
<Attribute>title</Attribute>
</AttributeMapping>

<AttributeMapping
ClassAttribute="numberOfComments"
NameSpaceURI="http://purl.org/rss/1.0/modules/slash/" >
<Attribute>comments</Attribute>
</AttributeMapping>

<AttributeMapping
ClassAttribute="comments" >
<Attribute>comments</Attribute>
</AttributeMapping>

</ClassElementMapping>

</XmlMappingSpec>


--
You received this message because you are subscribed to the Google Groups "VA Smalltalk" group.
To view this discussion on the web visit https://groups.google.com/d/msg/va-smalltalk/-/4klmCAwZidYJ.
To post to this group, send email to [hidden email].
To unsubscribe from this group, send email to [hidden email].
For more options, visit this group at http://groups.google.com/group/va-smalltalk?hl=en.