Re: [xml-dev] Convert one XML format to another a nd verify the conversion … how to “verify the c onversion”?
Michael Kay <[email protected]> Sat, 29 Jun 2024 23:28:54 +0100
| Newsgroups | gmane.text.xml.devel |
|---|---|
| Message-ID | <[email protected]> |
--Apple-Mail=_D5AFEA7C-E24E-4C17-AD02-12169F274BCE Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8 "Verifying the conversion" means testing that your code is doing what it = is supposed to do. If you have a good specification then you can construct tests by testing = that every statement in the specification is satisfied. But it's unusual = to have a good specification, in which casse it's up to you to fill in = the gaps. Ideally, the tests will be written by a different person, to = ensure that the spec is being read and interpreted in the same way by = two independent people. Verifying that the output conforms to a particular schema is likely to = be useful but is unlikely to be sufficient, since the schema knows = nothing about the input. I'm not sure that your "metadata" contributes anything useful to this = exercise. Michael Kay Saxonica > On 29 Jun 2024, at 16:59, Roger L Costello <[email protected]> wrote: >=20 > Hi Folks, >=20 > 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: > =20 > 1. What does it mean to =E2=80=9Cverify the conversion=E2=80=9D? = 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? > =20 > Allow me to explain =E2=80=A6 > =20 > My program converts this old format: > =20 > <Airport_Name>Boston Logan Airport</Airport_Name> > =20 > to this new format: > =20 > <name>Boston Logan Airport</name> > =20 > Old format: > =20 > <Airport_Elevation>19</Airport_Elevation> > =20 > New format: > =20 > <elevation>19</elevation> > =20 > Old: > =20 > = <Airport_Reference_Point_Latitude>N42214660</Airport_Reference_Point_Latit= ude> > =20 > New: > =20 > <latitude> > <deg>42</deg> > <min>21</min> > <sec>46</sec> > <hSec>60</hSec> > <northSouth>North</northSouth> > </latitude> > =20 > Not only am I responsible for converting the old format to the new = format, I am also required to verify the conversion.=20 > =20 > Truthfully, I am unclear what it means to =E2=80=9Cverify the = conversion.=E2=80=9D 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 = =E2=80=9Cverify the conversion=E2=80=9D means verify each action taken = during the conversion. Do you agree with that? > =20 > =E2=80=9C=E2=80=A6 verify each action taken during the conversion.=E2=80= =9D Here=E2=80=99s my plan of attack: My program will output -- to = another, different file -- metadata that describes the actions that were = taken during the conversion. > =20 > 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. > =20 > Here=E2=80=99s the metadata that I am currently generating when I = convert Airport_Name to name: > =20 > <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 =3D name</predicate> > </mapping> > =20 > The value of <predicate> is a predicate expression (does the value of = Airport_Name equal the value of name). >=20 > Here=E2=80=99s the metadata that I generate when I convert = Airport_Elevation to elevation: >=20 > <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 =3D elevation</predicate> > </mapping> > =20 >=20 > Here=E2=80=99s the metadata that I generate when I convert = Airport_Reference_Point_Latitude to latitude: >=20 > <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) =3D = latitude/deg and > substring(Airport_Reference_Point_Latitude,4,2) =3D = latitude/min and > substring(Airport_Reference_Point_Latitude,6,2) =3D = latitude/sec and > substring(Airport_Reference_Point_Latitude,8,2) =3D = latitude/hSec and > ( > (substring(Airport_Reference_Point_Latitude,1,1) =3D 'N' and = latitude/NorthSouth =3D 'North') or > (substring(Airport_Reference_Point_Latitude,1,1) =3D 'S' and = latitude/NorthSouth =3D 'South') or > (empty(latitude/NorthSouth)) > ) > </predicate> > </mapping> > =20 >=20 > Is that the metadata I should generate to enable the conversion to be = verified? >=20 > /Roger >=20 --Apple-Mail=_D5AFEA7C-E24E-4C17-AD02-12169F274BCE Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8 <html><head><meta http-equiv=3D"content-type" content=3D"text/html; = charset=3Dutf-8"></head><body style=3D"overflow-wrap: break-word; = -webkit-nbsp-mode: space; line-break: after-white-space;">"Verifying the = conversion" means testing that your code is doing what it is supposed to = do.<div><br></div><div>If you have a good specification then you can = construct tests by testing that every statement in the specification is = satisfied. But it's unusual to have a good specification, in which casse = it's up to you to fill in the gaps. Ideally, the tests will be written = by a different person, to ensure that the spec is being read and = interpreted in the same way by two independent = people.</div><div><br></div><div>Verifying that the output conforms to a = particular schema is likely to be useful but is unlikely to be = sufficient, since the schema knows nothing about the = input.</div><div><br></div><div>I'm not sure that your "metadata" = contributes anything useful to this = exercise.</div><div><br></div><div>Michael Kay</div><div>Saxonica<br = id=3D"lineBreakAtBeginningOfMessage"><div><br><blockquote = type=3D"cite"><div>On 29 Jun 2024, at 16:59, Roger L Costello = <[email protected]> wrote:</div><br = class=3D"Apple-interchange-newline"><div><meta charset=3D"UTF-8"><div = class=3D"WordSection1" style=3D"page: WordSection1; caret-color: rgb(0, = 0, 0); font-family: Helvetica; font-size: 13px; font-style: normal; = font-variant-caps: normal; font-weight: 400; letter-spacing: normal; = text-align: start; text-indent: 0px; text-transform: none; white-space: = normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; = text-decoration: none;"><p class=3D"MsoNormal" style=3D"margin: 0in 0in = 8pt; line-height: 15.4px; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, sans-serif;">Hi = Folks,<o:p></o:p></span></p><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-family: Calibri, sans-serif;">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<span = class=3D"Apple-converted-space"> </span><b><i>verify the = conversion</i></b>. I have two questions:<o:p></o:p></span></div><div = style=3D"margin: 0in; line-height: normal; font-size: 11pt; font-family: = Aptos, sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in 0in = 0in 0.5in; line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif; text-indent: -0.25in;"><span style=3D"font-family: Calibri, = sans-serif;"><span>1.<span style=3D"font-style: normal; = font-variant-caps: normal; font-weight: normal; font-stretch: normal; = font-size: 7pt; line-height: normal; font-family: "Times New = Roman"; font-size-adjust: none; font-kerning: auto; = font-variant-alternates: normal; font-variant-ligatures: normal; = font-variant-numeric: normal; font-variant-east-asian: normal; = font-variant-position: normal; font-variant-emoji: normal; = font-feature-settings: normal; font-optical-sizing: auto; = font-variation-settings: = normal;"> <span = class=3D"Apple-converted-space"> </span></span></span></span><span = style=3D"font-family: Calibri, sans-serif;">What does it mean to = =E2=80=9Cverify the conversion=E2=80=9D? Does XSD validation constitute = verifying the conversion? My sense is no. My sense is that each<span = class=3D"Apple-converted-space"> </span><b><i>action</i></b><span = class=3D"Apple-converted-space"> </span>taken during the conversion = must be verified. Do you agree with that?<o:p></o:p></span></div><div = style=3D"margin: 0in 0in 0in 0.5in; line-height: normal; font-size: = 11pt; font-family: Aptos, sans-serif; text-indent: -0.25in;"><span = style=3D"font-family: Calibri, sans-serif;"><span>2.<span = style=3D"font-style: normal; font-variant-caps: normal; font-weight: = normal; font-stretch: normal; font-size: 7pt; line-height: normal; = font-family: "Times New Roman"; font-size-adjust: none; = font-kerning: auto; font-variant-alternates: normal; = font-variant-ligatures: normal; font-variant-numeric: normal; = font-variant-east-asian: normal; font-variant-position: normal; = font-variant-emoji: normal; font-feature-settings: normal; = font-optical-sizing: auto; font-variation-settings: = normal;"> <span = class=3D"Apple-converted-space"> </span></span></span></span><span = style=3D"font-family: Calibri, sans-serif;">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?<o:p></o:p></span></div><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-family: Calibri, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, sans-serif;">Allow me = to explain =E2=80=A6<o:p></o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, sans-serif;">My = program converts this old format:<o:p></o:p></span></div><div = style=3D"margin: 0in; line-height: normal; font-size: 11pt; font-family: = Aptos, sans-serif;"><span style=3D"font-size: 12pt; font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, sans-serif; = background: white;"><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"><Airport_Name></span><span style=3D"font-family: = "Times New Roman", serif; background: white;">Boston Logan = Airport</span><span style=3D"font-family: "Times New Roman", = serif; color: rgb(0, 0, 150); background: = white;"></Airport_Name></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><o:p></o:p></span></div><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, sans-serif;">to this = new format:<o:p></o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-size: 12pt; font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, sans-serif; = background: white;"><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"><name></span><span style=3D"font-family: "Times New = Roman", serif; background: white;">Boston Logan Airport</span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></name></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><o:p></o:p></span></div><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, sans-serif;">Old = format:<o:p></o:p></span></div><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-size: 12pt; font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, sans-serif; = background: white;"><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"><Airport_Elevation></span><span style=3D"font-family: = "Times New Roman", serif; background: white;">19</span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></Airport_Elevation></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><o:p></o:p></span></div><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-size: 12pt; font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, sans-serif;">New = format:<o:p></o:p></span></div><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-size: 12pt; font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, sans-serif; = background: white;"><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"><elevation></span><span style=3D"font-family: "Times = New Roman", serif; background: white;">19</span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></elevation></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><o:p></o:p></span></div><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-size: 12pt; font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;">Old:<o:p></o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-size: 12pt; font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, sans-serif; = background: white;"><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"><Airport_Reference_Point_Latitude></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">N42214660</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></Airport_Reference_Point_Latitude></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><o:p></o:p></span></div><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-size: 12pt; font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;">New:<o:p></o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-size: 12pt; font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, sans-serif; = background: white;"><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"><latitude></span><span style=3D"font-family: "Times = New Roman", serif; background: white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><deg></span><span style=3D"font-family:= "Times New Roman", serif; background: white;">42</span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></deg></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><min></span><span style=3D"font-family:= "Times New Roman", serif; background: white;">21</span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></min></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><sec></span><span style=3D"font-family:= "Times New Roman", serif; background: white;">46</span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></sec></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><hSec></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">60</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></hSec></span><span style=3D"font-family: "Times New = Roman", serif; background: white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><northSouth></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">North</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></northSouth></span><span style=3D"font-family: = "Times New Roman", serif; background: white;"><br></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></latitude></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><o:p></o:p></span></div><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, sans-serif;">Not only = am I responsible for converting the old format to the new format, I am = also required to<span = class=3D"Apple-converted-space"> </span><b><i>verify the = conversion</i></b>.<span = class=3D"Apple-converted-space"> </span><o:p></o:p></span></div><div = style=3D"margin: 0in; line-height: normal; font-size: 11pt; font-family: = Aptos, sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;">Truthfully, I am unclear what it means to =E2=80=9Cverify = the conversion.=E2=80=9D 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 =E2=80=9Cverify the conversion=E2=80=9D means verify = each<span = class=3D"Apple-converted-space"> </span><b><i>action</i></b><span = class=3D"Apple-converted-space"> </span>taken during the = conversion. Do you agree with that?<o:p></o:p></span></div><div = style=3D"margin: 0in; line-height: normal; font-size: 11pt; font-family: = Aptos, sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, sans-serif;">=E2=80=9C=E2= =80=A6 verify each<span = class=3D"Apple-converted-space"> </span><b><i>action</i></b><span = class=3D"Apple-converted-space"> </span>taken during the = conversion.=E2=80=9D Here=E2=80=99s my plan of attack: My program will = output -- to another, different file -- metadata that describes the = actions that were taken during the = conversion.<o:p></o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, sans-serif;">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.<o:p></o:p></span></div><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-family: Calibri, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, sans-serif;">Here=E2=80=99= s the metadata that I am currently generating when I convert = Airport_Name to name:<o:p></o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;"><o:p> </o:p></span></div><div style=3D"margin: 0in; = line-height: normal; font-size: 11pt; font-family: Aptos, sans-serif; = background: white;"><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"><mapping></span><span style=3D"font-family: "Times = New Roman", serif; background: white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><description></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">Map Airport_Name to name</span><span style=3D"font-family: = "Times New Roman", serif; color: rgb(0, 0, 150); background: = white;"></description></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><legacy-elmt-name></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">Airport_Name</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></legacy-elmt-name></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><legacy-elmt-value></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">GENERAL EDWARD LAWRENCE LOGAN<span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></legacy-elmt-value></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><new-elmt-name></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">name</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></new-elmt-name></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><new-elmt-value></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">GENERAL EDWARD LAWRENCE LOGAN</span><span style=3D"font-family: = "Times New Roman", serif; color: rgb(0, 0, 150); background: = white;"></new-elmt-value></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><predicate></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">Airport_Name =3D name</span><span style=3D"font-family: = "Times New Roman", serif; color: rgb(0, 0, 150); background: = white;"></predicate></span><span style=3D"font-family: "Times = New Roman", serif; background: white;"><br></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></mapping></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><o:p></o:p></span></div><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-family: Arial, = sans-serif;"><o:p> </o:p></span></div><p class=3D"MsoNormal" = style=3D"margin: 0in 0in 8pt; line-height: 15.4px; font-size: 11pt; = font-family: Aptos, sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;">The value of <predicate> is a predicate expression = (does the value of Airport_Name equal the value of = name).<o:p></o:p></span></p><p class=3D"MsoNormal" style=3D"margin: 0in = 0in 8pt; line-height: 15.4px; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-family: Calibri, sans-serif;">Here=E2=80=99= s the metadata that I generate when I convert Airport_Elevation to = elevation:<o:p></o:p></span></p><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif; background: = white;"><span style=3D"font-family: "Times New Roman", serif; = color: rgb(0, 0, 150); background: white;"><mapping></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><description></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">Map Airport_Elevation to elevation</span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></description></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><legacy-elmt-name></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">Airport_Elevation</span><span style=3D"font-family: "Times = New Roman", serif; color: rgb(0, 0, 150); background: = white;"></legacy-elmt-name></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><legacy-elmt-value></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">19</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></legacy-elmt-value></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><new-elmt-name></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">elevation</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></new-elmt-name></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><new-elmt-value></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">19</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></new-elmt-value></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><predicate></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">Airport_Elevation =3D elevation</span><span style=3D"font-family: = "Times New Roman", serif; color: rgb(0, 0, 150); background: = white;"></predicate></span><span style=3D"font-family: "Times = New Roman", serif; background: white;"><br></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></mapping></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><o:p></o:p></span></div><p class=3D"MsoNormal" style=3D"margin: = 0in 0in 8pt; line-height: 15.4px; font-size: 11pt; font-family: Aptos, = sans-serif;"><span style=3D"font-size: 12pt; line-height: 16.799999px; = font-family: Arial, sans-serif;"><o:p> </o:p></span></p><p = class=3D"MsoNormal" style=3D"margin: 0in 0in 8pt; line-height: 15.4px; = font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-family: Calibri, sans-serif;">Here=E2=80=99s the metadata = that I generate when I convert Airport_Reference_Point_Latitude to = latitude:<o:p></o:p></span></p><div style=3D"margin: 0in; line-height: = normal; font-size: 11pt; font-family: Aptos, sans-serif; background: = white;"><span style=3D"font-family: "Times New Roman", serif; = color: rgb(0, 0, 150); background: white;"><mapping></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><description></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">Map Airport_Reference_Point_Latitude to latitude</span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></description></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><legacy-elmt-name></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">Airport_Reference_Point_Latitude</span><span style=3D"font-family:= "Times New Roman", serif; color: rgb(0, 0, 150); background: = white;"></legacy-elmt-name></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><legacy-elmt-value></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">N42214660</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></legacy-elmt-value></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><new-elmt-name></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">latitude</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></new-elmt-name></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><new-elmt-value></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><latitude></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> &n= bsp;<span class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><deg></span><span style=3D"font-family:= "Times New Roman", serif; background: white;">42</span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></deg></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> &n= bsp;<span class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><min></span><span style=3D"font-family:= "Times New Roman", serif; background: white;">21</span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></min></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> &n= bsp;<span class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><sec></span><span style=3D"font-family:= "Times New Roman", serif; background: white;">46</span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></sec></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> &n= bsp;<span class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><hSec></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">60</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></hSec></span><span style=3D"font-family: "Times New = Roman", serif; background: = white;"><br> &n= bsp;<span class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"><northSouth></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">North</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></northSouth></span><span style=3D"font-family: = "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></latitude></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: white;"></new-elmt-value></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; color: rgb(0, = 0, 150); background: = white;"><predicate><o:p></o:p></span></div><div style=3D"margin: = 0in; line-height: normal; font-size: 11pt; font-family: Aptos, = sans-serif; background: white;"><span style=3D"font-family: "Times = New Roman", serif; color: rgb(0, 0, 150); background: = white;"> <span = class=3D"Apple-converted-space"> </span></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;">substring(Airport_Reference_Point_Latitude,2,2) =3D latitude/deg = and<br> = substring(Airport_Reference_Point_Latitude,4,2) =3D latitude/min = and<br> = substring(Airport_Reference_Point_Latitude,6,2) =3D latitude/sec = and<br> = substring(Airport_Reference_Point_Latitude,8,2) =3D latitude/hSec = and<br> = (<br> = (substring(Airport_Reference_Point_Latitude,1,1) =3D 'N' and = latitude/NorthSouth =3D 'North') = or<br> = (substring(Airport_Reference_Point_Latitude,1,1) =3D 'S' and = latitude/NorthSouth =3D 'South') or<br> = (empty(latitude/NorthSouth))<br> = )</span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"><br> </predicate></span><span = style=3D"font-family: "Times New Roman", serif; background: = white;"><br></span><span style=3D"font-family: "Times New = Roman", serif; color: rgb(0, 0, 150); background: = white;"></mapping></span><span style=3D"font-family: "Times = New Roman", serif; background: white;"><o:p></o:p></span></div><p = class=3D"MsoNormal" style=3D"margin: 0in 0in 8pt; line-height: 15.4px; = font-size: 11pt; font-family: Aptos, sans-serif;"><span = style=3D"font-size: 12pt; line-height: 16.799999px; font-family: Arial, = sans-serif;"><o:p> </o:p></span></p><p class=3D"MsoNormal" = style=3D"margin: 0in 0in 8pt; line-height: 15.4px; font-size: 11pt; = font-family: Aptos, sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;">Is that the metadata I should generate to enable the = conversion to be verified?<o:p></o:p></span></p><p class=3D"MsoNormal" = style=3D"margin: 0in 0in 8pt; line-height: 15.4px; font-size: 11pt; = font-family: Aptos, sans-serif;"><span style=3D"font-family: Calibri, = sans-serif;">/Roger</span></p></div></div></blockquote></div><br></div></b= ody></html>= --Apple-Mail=_D5AFEA7C-E24E-4C17-AD02-12169F274BCE--