[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
=?UTF-8?Q?Re=3A_=5Bxml-dev=5D_Convert_one_XML_format_to_another_and?==?UTF-8?Q?_verify_the_conversion_=E2=80=A6_how_to_=E2=80=9Cverify_the_conve?==?UTF-8?B?cnNpb27igJ0/?=
- From: Thomas Passin <list1@tompassin.net>
- To: xml-dev@lists.xml.org
- Date: Sat, 29 Jun 2024 14:07:07 -0400
On 6/29/2024 11:59 AM, Roger L Costello wrote:
Hi Folks,
I am writing a program that converts an old XML format to a new XML
format. In addition to doing the conversion, I also need to */verify the
conversion/*. I have two questions:
1.What does it mean to “verify the conversion”? Does XSD validation
constitute verifying the conversion? My sense is no. My sense is that
each */action/* taken during the conversion must be verified. Do you
agree with that?
2.As I do the conversion, I simultaneously output (to a separate file)
metadata for each conversion action. What metadata should I generate to
enable the conversion to be verified?
Allow me to explain …
My program converts this old format:
<Airport_Name>Boston Logan Airport</Airport_Name>
to this new format:
<name>Boston Logan Airport</name>
Old format:
<Airport_Elevation>19</Airport_Elevation>
New format:
<elevation>19</elevation>
Old:
<Airport_Reference_Point_Latitude>N42214660</Airport_Reference_Point_Latitude>
New:
<latitude>
<deg>42</deg>
<min>21</min>
<sec>46</sec>
<hSec>60</hSec>
<northSouth>North</northSouth>
</latitude>
Not only am I responsible for converting the old format to the new
format, I am also required to */verify the conversion/*.
Truthfully, I am unclear what it means to “verify the conversion.” There
is an XML Schema for the new format. I could (and certainly will)
validate the file that is generated by my program. Is XSD-validation
verifying the conversion? My sense is no. I think that “verify the
conversion” means verify each */action/* taken during the conversion. Do
you agree with that?
“… verify each */action/* taken during the conversion.” Here’s my plan
of attack: My program will output -- to another, different file --
metadata that describes the actions that were taken during the conversion.
Once again, I am unclear. What metadata is needed to verify an action?
The metadata will be machine processed, so I am thinking that the
metadata had better contain predicates (expressions that evaluate to
true or false) since they can be easily evaluated by a machine.
Here’s the metadata that I am currently generating when I convert
Airport_Name to name:
<mapping>
<description>Map Airport_Name to name</description>
<legacy-elmt-name>Airport_Name</legacy-elmt-name>
<legacy-elmt-value>GENERAL EDWARD LAWRENCE LOGAN </legacy-elmt-value>
<new-elmt-name>name</new-elmt-name>
<new-elmt-value>GENERAL EDWARD LAWRENCE LOGAN</new-elmt-value>
<predicate>Airport_Name = name</predicate>
</mapping>
The value of <predicate> is a predicate expression (does the value of
Airport_Name equal the value of name).
Here’s the metadata that I generate when I convert Airport_Elevation to
elevation:
<mapping>
<description>Map Airport_Elevation to elevation</description>
<legacy-elmt-name>Airport_Elevation</legacy-elmt-name>
<legacy-elmt-value>19</legacy-elmt-value>
<new-elmt-name>elevation</new-elmt-name>
<new-elmt-value>19</new-elmt-value>
<predicate>Airport_Elevation = elevation</predicate>
</mapping>
Here’s the metadata that I generate when I convert
Airport_Reference_Point_Latitude to latitude:
<mapping>
<description>Map Airport_Reference_Point_Latitude to latitude</description>
<legacy-elmt-name>Airport_Reference_Point_Latitude</legacy-elmt-name>
<legacy-elmt-value>N42214660</legacy-elmt-value>
<new-elmt-name>latitude</new-elmt-name>
<new-elmt-value>
<latitude>
<deg>42</deg>
<min>21</min>
<sec>46</sec>
<hSec>60</hSec>
<northSouth>North</northSouth>
</latitude>
</new-elmt-value>
<predicate>
substring(Airport_Reference_Point_Latitude,2,2) = latitude/deg and
substring(Airport_Reference_Point_Latitude,4,2) = latitude/min and
substring(Airport_Reference_Point_Latitude,6,2) = latitude/sec and
substring(Airport_Reference_Point_Latitude,8,2) = latitude/hSec and
(
(substring(Airport_Reference_Point_Latitude,1,1) = 'N' and
latitude/NorthSouth = 'North') or
(substring(Airport_Reference_Point_Latitude,1,1) = 'S' and
latitude/NorthSouth = 'South') or
(empty(latitude/NorthSouth))
)
</predicate>
</mapping>
Is that the metadata I should generate to enable the conversion to be
verified?
/Roger
It seems to me that in the end only two things matter:
1. Does the result validate using the new schema?
2. Do the right data values (like airport names or longitude values) get
put into the right places in the output? For example, the latitude and
longitude values could have gotten switched, but if they aren't
constrained by the schema (and in some cases even if they are), schema
validation won't catch that.
Outputting all that metadata won't mean anything unless you can prove
that the intended steps would be correct and then can verify that the
steps were generated correctly. That sounds like a lot of work, and
could be prone to bugs. Such metadata could be useful as a debugging
tool for you, as opposed to part of the verification to be delivered to
a customer.
It's much like formally proving that a program meets its requirements.
Good, but it doesn't account for bugs in the requirements. Here the
equivalent would be bugs in the requirements for the steps captured by
the metadata.
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]