Model-driven Rule-based Mediation in XML Data Exchange Yongxin Liao, Dumitru Roman, Arne J. Berre SINTEF ICT, Oslo, Norway October 5, 2010 ICT 1
Outline Intro to XML Data Exchange FloraMap: Flora2-based XML data transformation Technique: steps and examples Implementation and experiments Generic XML Data Exchange Framework Related Work Conclusions and Future Work ICT 2
Outline Intro to XML Data Exchange FloraMap: Flora2-based XML data transformation Technique: steps and examples Implementation and experiments Generic XML Data Exchange Framework Related Work Conclusions and Future Work ICT 3
XML Data Exchange Ubiquitous in B2B collaborations Need for agile interoperability and scalability in B2B collaborations Automate as much as possible XML data exchange between enterprise systems XML data cannot be directly and fully automatically exchanged between B2B systems Lack of standardized XML canonical models or schemas Semantic differences and inconsistencies between conceptual models Option: provide techniques and tools to support humans in reconciling the differences and inconsistencies between the data models of the parties involved in a data exchange ICT 4
Generic XML Data Exchange Company X Source XSD Transformation Layer Company Y Target XSD Schema transformations Design-time Run-time Instance transformations Source XML (Instances) Target XML (Instances) ICT 5
Overall Approach Overall Approach A lifting mechanism of XML schemas and instances to an objectoriented model Use an object oriented rule language/engine g g as the underlying mechanism for providing an abstract, object-oriented model of XML schemas and instances, as well as for specification and execution of the mappings at the model level Benefits: Allow the mappings creator to focus on the semantic, object- oriented model behind the XSD schemas and specify the mappings at a more abstract, semantic level Allow both specification and execution of data mappings (i.e. design- and run-time mapping) in a single, unifying framework ICT 6
Outline Intro to XML Data Exchange FloraMap: Flora2-based XML data transformation Technique: steps and examples Implementation and experiments Generic XML Data Exchange Framework Related Work Conclusions and Future Work ICT 7
Why Flora2? http://flora.sourceforge.net/ Flora2 Declarative, object-oriented knowledge base language Open source programming environment Features: Formal logical foundations, semantics Frame-based Rule-based Higher-order Declarative treatment of actions, database dynamics Powerful introspection: querying schema, rules Powerful meta-programming facilities Typing, modularization Powerful compositional aggregation ICT 8
Flora2 Simple examples object Id attribute Object description: John[name -> John Doe, phones -> {6313214, 6313214}, children -> {Bob, Mary}] Mary[name -> Mary Doe, phones -> {2121234, 2121237}, children -> {Anne, Alice}] ISA hierarchy: John : Person Mary : Person alice : Student Student :: Person Type signature: class membership subclass relationship Person[ born => integer, ageasof(integer) => integer, name => string, address => string, children => person]. rule definition Rule:?X : Redcar :-?X:Car,?X[color -> red]. /\, and Syntax basics: Object ids: Terms like in Prolog John, abc, f(john,34), Car(red,20000) IsA hierarchy: O:C object O is a member of class C C::S C is a subclass of S Structure (object-atoms): O [Method > Value] invocation of method Type (signature-atoms): i Class [Method => Class] a method signature Combinations of the above: \/, /\, negation, quantifiers Query: John s children who were born when he was 30+ years old:? John[born ->?Y, children ->?C], C[born ->?B],?B >?Y+30. ICT 9
FloraMap Semantic-based transformation of XML data Source XSD Target XSD Source XSD Mediation Engine Target XSD Design-time Run-time Semantic Mapping (specification and execution) Source XML Target XML Source XML (Instances) Target XML (Instances) ICT 10
Source XSD: Company X <element name="invoicecompanyx"> <complextype> <sequence> 1 <element name="bizszam" type="xs:string /> <element name="ev" type="xs:string /> 6 <element name="kanyvho" type="xs:string /> 2 <element name="bizkelt" type="xs:string /> 3 <element name="city" type="string" minoccurs="0"/> <element name="zip" type="int" minoccurs="0"/> 4 <element name="street" type="string" minoccurs="0"/> 5 </sequence> </complextype> </element> Mapping rules InvoiceCompanyX in source is mapped to InvoiceCompanyY in target: 1. Bizszam in source is the same as InvoiceNumber in target 2. Bizkelt in source is the same as InvoiceDate in target 3. city in source is the same as DeliveryAddress.city in target 4. zip in source is the same as DeliveryAddress.zip in target 5. street in source is the same as DeliveryAddress.street in target 6. AccDate in target is a concatenation of Ev in the source, a delimiter, Kanyvho in the source, a delimiter, and the string 01, i.e. AccDate = (Ev+ _ +Kanyvho+ _ + 01 ) Target XSD: Company Y <element name="invoicecompanyy"> <complextype> <sequence> <element name="invoicenumber" type="string"/> <element name="accdate" type="string"/> <element name="invoicedate" type="string"/> <element name="deliveryaddress" minoccurs="0"> <complextype> <sequence> <element name="city" type="string" minoccurs="0"/> <element name="zip" type="string" minoccurs="0"/> <element name="doorno" type="string" minoccurs="0"/> <element name="street" type="string" minoccurs="0"/> </sequence> </complextype> </element> </sequence> </complextype> </element> ICT 11
Example XML Data Exchange Target XML: Company Y Source XML: Company X <InvoiceCompanyX> <Bizszam>I_001</Bizszam> <Ev>2010</Ev> <Kanyvho>05</Kanyvho> <Bizkelt>2010-05-18</Bizkelt> 05 18</Bizkelt> <city>oslo</city> <zip>1234</zip> <street>first Street</street> </InvoiceCompanyX> <?xml version="1.0"?> < InvoiceCompanyY > <InvoiceNumber>I_001</InvoiceNumber> <AccDate>2010_05_01</AccDate> <InvoiceDate>2010-05-18</InvoiceDate> <DeliveryAddress> <city>oslo</city> <zip>1234</zip> <DoorNo> </DoorNo> <street>first Street </street> </DeliveryAddress> </ InvoiceCompanyY> ICT 12
XSD to Flora2 Source XSD Target XSD Source XSD Mediation Engine Target XSD Semantic Mapping (specification and execution) Source XML Target XML Source XML (Instances) Target XML (Instances) ICT 13
XSD to Flora2 mapping Situation XSD Flora2 Abstract Flora2 Special (the clean conceptual model of the schema, i.e. no XML/XSD assumptions) (XML/XSD specific information, needed for generating structure of target instances) Top-level Element with BaseType <Element name= name type= string /> name[name {1:1} *=>string]. Top-level Element with ComplexType <Element name= name > <ComplexType> <Sequence> <Element name= firstname type= string /> <Element name= lastname type= string /> <Sequence> </ComplexType> </Element> name[firstname {1:1} *=>string]. name[lastname {1:1} 1} *=> string]. Elements[name->firstname]. Elements[name->lastname]. l t Sequences[name->[firstname,lastname]]. Top-level Element with SimpleType <Attribute name= age > <SimpleType> <restriction base="int"> <maxinclusive value="200"/> </restriction> </SimpleType> </Attribute > age[base {1:1} *=>int]. age[maxinclusive-> 200 ]. Top-level Attribute with BaseType <Attribute name= age type= integer /> age[age {1:1} *=>integer]. Top-level Attribute with SimpleType <Attribute name= age > <SimpleType> <restriction base="int"> <maxinclusive value="200"/> <mininclusive value="0"/> </restriction> </SimpleType> </Attribute > age[base {1:1} *=>int]. age[maxinclusive-> 200 ]. age[mininclusive-> 0 ]. ICT 14
XSD to Flora2 mapping (cont ) Situation XSD Flora2 Abstract Flora2 Special Top-level ComplexType <ComplexType type= nametype > <Sequence> <Element name= firstname type= string > <Element name= lastname type= string > <Sequence> </ComplexType> nametype[firstname {1:1} *=>string]. nametype[lastname {1:1} *=>string]. Elements[nameType->firstname]. Elements[nameType->lastname]. Sequences[nameType->[firstname, [firstname, lastname]]. Top-level <SimpleType name= nametype > SimpleType <restriction base="string"> string <enumeration value= A"> <enumeration value= B"> </restriction> </SimpleType> nametype[base {1:1} *=>string]. nametype[enumeration-> A ] >A]. nametype[enumeration-> B ]. Top-level Group <group name="namegroup"> namegroup namegroup[firstname {1:1} *=>string] >string]. Groups[nameGroup->nameGroup] <sequence> <element name="firstname" type="string"/> <element ref="lastname"/> </sequence> </group> namegroup[lastname*=> lastname]. Elements[nameGroup->fristname]. Elements[nameGroup->lastname]. Sequences[nameGroup - >[firstname,lastname]]. Top-level AttributeGroup <attributegroup name="identifygroup"> <attribute name="job" type="string"/> <attribute ref="title"/> </attributegroup > IdentifyGroup [job {1:1} *=>string]. IdentifyGroup [title {1:1} *=>title]. attributegroups[identifygroup -> IdentifyGroup]. Attributes[IdentifyGroup -> job]. Attributes[IdentifyGroup -> title]. Include <include schemalocation="person.xsd"/> #include path/person_ Abstract.flr #include path/person_special.flr ICT 15
XSD to Flora2 mapping (cont ) Situation XSD Flora2 Abstract Flora2 Special Sequence,Choice, <Element name= name > name[firstname {1:1} 1} *=> string]. Elements[name->firstname]. t All <ComplexType> <Sequence> <Element name= firstname type= string > <Choice> <Element name= title type= string > <Element name= job type= string > </Choice> <Sequence> </ComplexType> </Element> name[title {1:1} *=> string]. name[job {1:1} *=> string]. Elements[name->title]. Elements[name->job]. Sequences[name->[firstname, Sub_name3]]. Choices[Sub_name3 name3->[title,job]]. Extension (simplecontent, complexcontent) <ComplexType name= nametype > <simplecontent> <extension base="personnametype"> <attribute name="title" type="string"/> </extension> </simplecontent> </ComplexType> name :: PersonNameType. nametype [title {1:1} *=> string]. Attribute[nameType->title]. ICT 16
XSD to Flora2 mapping (cont ) XSD import to Flora2 import Import namespace in XSD [ filename_abstract.flr >>namespace] t fl in Flora2 abstract t file [ filename_special.flr >>namespace] in Flora2 special file Keep the element name and replace the : with _ in the type XSD Import Flora2 Abstract Flora2 Special <schema xmlns:ccts= abcd"> <import namespace= abcd" schemalocation="../information.xsd"/> <element name= person > <complextype> <sequence> <element name= name type= ccts:nametype /> <element ref= ccts:age /> <element name= work > <complextype> <simplecontent> <extension base= ccts:worktype /> </simplecontent> </complextype> </element> </sequence> </complextype> </element> </schema>?- [ path/information_ Abstract.flr >>ccts] person[name {1:1} *=> ccts_nametype]. person[ ccts:age {1:1} *=> ccts_age]. person[work {1:1} *=> personwork]. personwork[ ccts:worktype {1:1} *=> ccts_worktype].?- [ path/information_special.flr >>ccts] Elements[person -> name]. Elements[person -> ccts:age ]. Elements[person -> work]. ICT 17
Example Flora2 Abstract: Company X Source XSD: Company X <xs:element name="invoicecompanyx"> <xs:complextype> <xs:sequence> <xs:element name="bizszam" type="xs:string /> <xs:element name="ev" type="xs:string /> <xs:element name="kanyvho" type="xs:string /> <xs:element name="bizkelt" type="xs:string /> <xs:element name="city" type="xs:string" minoccurs="0"/> <xs:element name="zip" type="xs:int" sint" minoccurs="0"/> <xs:element name="street" type="xs:string" minoccurs="0"/> </xs:sequence> </xs:complextype> </xs:element> Namespace[value->'xs:']. InvoiceCompanyX [Bizszam{1:1}*=>'xs:string']. InvoiceCompanyX [Ev{1:1}*=>'xs:string']. InvoiceCompanyX [Kanyvho{1:1}*=>'xs:string']. InvoiceCompanyX [Bizkelt{1:1}*=>'xs:string']. InvoiceCompanyX [city{0:*}*=>'xs:string']. InvoiceCompanyX [zip{0:*}*=>'xs:int']. InvoiceCompanyX [street{0:*}*=>'xs:string']. Flora2 Special: Company X Sequences[InvoiceCompanyX ->['Bizszam','Ev', 'Kanyvho', Bizkelt','city','zip','street']]. Elements[InvoiceCompanyX ->Bizszam]. Elements[InvoiceCompanyX ->Ev]. Elements[InvoiceCompanyX ->Kanyvho]. Elements[InvoiceCompanyX ->Bizkelt]. Elements[InvoiceCompanyX ->city]. Elements[InvoiceCompanyX ->zip]. Elements[InvoiceCompanyX ->street]. ICT 18
Example Target XSD: Company Y <xs:element name="invoicecompanyy"> <xs:complextype> <xs:sequence> <xs:element name="invoicenumber" type="xs:string"/> <xs:element name="accdate" type="xs:string"/> <xs:element name="invoicedate" type="xs:string"/> <xs:element name="deliveryaddress" minoccurs="0"> <xs:complextype> <xs:sequence> <xs:element name="city" type="xs:string" minoccurs="0"/> <xs:element name="zip" type="xs:string" minoccurs="0"/> <xs:element name="doorno" type="xs:string" minoccurs="0"/> <xs:element name="street" type="xs:string" minoccurs="0"/> </xs:sequence> </xs:complextype> </xs:element> </xs:sequence> </xs:complextype> </xs:element> Flora2 Abstract: Company Y Namespace[value->'xs:']. YInvoice[DocumentNumber{1:1}*=>'xs:string']. YInvoice[DocumentDate{1:1}*=>'xs:string']. YInvoice[InvoiceDate{1:1}*=>'xs:string']. YInvoice[DeliveryAddress{1:1}*=>YInvoiceDeliveryAddress] YInvoiceDeliveryAddress[city{1:1}*=>'xs:string']. YInvoiceDeliveryAddress[country{1:1}*=>'xs:string']. YInvoiceDeliveryAddress[zip{1:1}*=>'xs:string'] ]. YInvoiceDeliveryAddress[DoorNumber{1:1}*=>'xs:string']. YInvoiceDeliveryAddress[StreetNumber{1:1}*=>'xs:string']. Flora2 Special: Company Y Sequences[LogoInvoice->['DocumentNumber','DocumentDate ','InvoiceDate','DeliveryAddress',TheOrderEnd]]. Elements[YInvoice->DocumentNumber]. Elements[YInvoice->DocumentDate]. Elements[YInvoice->InvoiceDate]. Elements[YInvoice->DeliveryAddress]. Sequences[YInvoiceDeliveryAddress->['city','country','zip', DoorNumber','StreetNumber',TheOrderEnd]]. Elements[YInvoiceDeliveryAddress->city]. Elements[YInvoiceDeliveryAddress->country]. Elements[YInvoiceDeliveryAddress->zip]. Elements[YInvoiceDeliveryAddress->DoorNumber]. Elements[YInvoiceDeliveryAddress->StreetNumber]. ICT 19
XML source to Flora2 Source XSD Target XSD Source XSD Mediation Engine Target XSD Semantic Mapping (specification and execution) Source XML Target XML Source XML (Instances) Target XML (Instances) ICT 20
XML source instances to Flora2 objects Steps: XML instance file loaded in Flora2, resulting in a Flora2 tree Flora2 abstract source file loaded in Flora2 Generate the Flora2 object structure according to the Flora2 abstract and query the value from Flora2 tree Object names are constructed by concatenating obj_ + a unique number (e.g. 1_1_2) generated from the unique location in the tree XML instance (person.xml) Flora2 tree Flora2 objects <person> <name> <firstname>dumitru</firstname> <lastname>roman</lastname> </name> <age>30</age> <address>oslo, Norway</address> </person> obj_:person[name->{obj_1}]. obj_1:personname[firstname-> Dumitru ]. obj_1:personname[lastname-> Roman ]. obj_:person[age->30]. obj_:person[address-> Oslo, Norway ]. ICT 21
Example Source XML: Company X <InvoiceCompanyX> <Bizszam>I_001</Bizszam> <Ev>2010</Ev> <Kanyvho>05</Kanyvho> <Bizkelt>2010-05-18</Bizkelt> <city>oslo</city> <zip>1234</zip> <street>first Street</street> </InvoiceCompanyX> Flora2 Abstract: Company X Namespace[value->'xs:']. InvoiceCompanyX [Bizszam{1:1}*=>'xs:string']. InvoiceCompanyX [Ev{1:1}*=>'xs:string']. InvoiceCompanyX [Kanyvho{1:1}*=>'xs:string']. InvoiceCompanyX [Bizkelt{1:1}*=>'xs:string']. g] InvoiceCompanyX [city{0:*}*=>'xs:string']. InvoiceCompanyX [zip{0:*}*=>'xs:int']. InvoiceCompanyX [street{0:*}*=>'xs:string']. Flora2 Objects: Company X obj: InvoiceCompanyX ['Bizszam'->'I_001']. obj: InvoiceCompanyX ['Ev'->'2010']. obj: InvoiceCompanyX ['Kanyvho'->'05']. obj: InvoiceCompanyX ['Bizkelt'->'2010-05-18']. obj: InvoiceCompanyX ['city'->'oslo']. ' 'O '] obj: InvoiceCompanyX ['zip'->'1234']. ICT 22
Semantic Mapping Source XSD Target XSD Source XSD Mediation Engine Target XSD Semantic Mapping (specification and execution) Source XML Target XML Source XML (Instances) Target XML (Instances) ICT 23
Example (design time) Schema Mapping Rules: CompanyX2CompanyY OneToOne([InvoiceCompanyX],[ O X][InvoiceCompanyY]). OneToOne([InvoiceCompanyX,Bizszam],[ InvoiceCompanyY,InvoiceNumber ]). OneToOne([InvoiceCompanyX,Bizkelt],[InvoiceCompanyY,InvoiceDate ]). OneToOne([InvoiceCompanyX,City],[InvoiceCompanyY,DeliveryAddress, city]). OneToOne([InvoiceCompanyX,Zip],[InvoiceCompanyY,DeliveryAddress, zip]). OneToOne([InvoiceCompanyX,Street],[InvoiceCompanyY,DeliveryAddress, p y, y, stree]). ManyToOne([[InvoiceCompanyX,EV], _,[InvoiceCompanyX,KANYVHO], _, 01 ],[InvoiceCompanyY, AccDate]). Flora2 Abstract: Company Y Flora2 Abstract: Company X Namespace[value->'xs:'] xs:]. InvoiceCompanyX [Bizszam{1:1}*=>'xs:string']. InvoiceCompanyX [Ev{1:1}*=>'xs:string']. InvoiceCompanyX [Kanyvho{1:1}*=>'xs:string']. InvoiceCompanyX [Bizkelt{1:1}*=>'xs:string']. InvoiceCompanyX [city{0:*}*=>'xs:string']. InvoiceCompanyX [zip{0:*}*=>'xs:int'] ]. InvoiceCompanyX [street{0:*}*=>'xs:string']. Namespace[value->'xs:']. YInvoice[DocumentNumber{1:1}*=>'xs:string'] ]. YInvoice[DocumentDate{1:1}*=>'xs:string']. YInvoice[InvoiceDate{1:1}*=>'xs:string']. YInvoice[DeliveryAddress{1:1}*=>YInvoiceDeliveryAddress] YInvoiceDeliveryAddress[city{1:1}*=>'xs:string']. YInvoiceDeliveryAddress[country{1:1}*=>'xs:string']. y{ YInvoiceDeliveryAddress[zip{1:1}*=>'xs:string']. YInvoiceDeliveryAddress[DoorNumber{1:1}*=>'xs:string']. YInvoiceDeliveryAddress[StreetNumber{1:1}*=>'xs:string']. Executable Mapping Rules:CompanyX2Company Y?- [ InvoiceCompanyX.flr'>>SourceInstances].?-?h: CompanyX@SourceInstances,newoid{?t},newoid{?t_4}, insert{?t: InvoiceCompanyY[InvoiceNumber->?t_1],?t: InvoiceCompanyY [AccDate->?t_2],?t: InvoiceCompanyY [InvoiceDate->?t_3],?t: InvoiceCompanyY Y[DeliveryAddress->?t_4],?t_4: InvoiceCompanyYDeliveryAddress[city->?t_4_1],?t_4: InvoiceCompanyYDeliveryAddress[zip->?t_4_2],?t_4: InvoiceCompanyYDeliveryAddress[street->?t_4_4]?t_1=?h.Bizszam@SourceInstances, flora_concat_items([?h.ev@sourceinstances,_,?h.kanyvho@sourceinstances,_01],?t_2)@_plg(flrporting),?t_3=?h.bizkelt@sourceinstances,?t_4_1=?h.city@sourceinstances,?t_4_2=?h.zip@sourceinstances,?t_4_4=?h.street@sourceinstances}. ICT 24
Example (run time) Flora2 Objects: Company X Executable Mapping Rules:CompanyX2Company Y obj: InvoiceCompanyX ['Bizszam'->'I_001'].?- [ InvoiceCompanyX.flr'>>SourceInstances]. obj: InvoiceCompanyX ['Ev'->'2010'].?-?h: CompanyX@SourceInstances,newoid{?t},newoid{?t_4}, } obj: InvoiceCompanyX ['Kanyvho'->'05']. insert{?t: InvoiceCompanyY[InvoiceNumber->?t_1], obj: InvoiceCompanyX ['Bizkelt'->'2010-05-18'].?t: InvoiceCompanyY [AccDate->?t_2], obj: InvoiceCompanyX ['city'->'oslo'].?t: InvoiceCompanyY [InvoiceDate->?t_3], obj: InvoiceCompanyX ['zip'->'1234'].?t: InvoiceCompanyY [DeliveryAddress->?t_4], obj: InvoiceCompanyX ['street'->'first Street'].?t_4: InvoiceCompanyYDeliveryAddress[city->?t >?t_4_1],?t_4: InvoiceCompanyYDeliveryAddress[zip->?t_4_2],?t_4: InvoiceCompanyYDeliveryAddress[street->?t_4_4] Flora2 Objects : Company Y Obj:CanonicalModelInvoice[InvoiceNumber-> I_001 ].?t_1=?h.bizszam@sourceinstances, Obj:CanonicalModelInvoice[AccDate->'2010_05_01']. flora_concat_items([?h.ev@sourceinstances,_, Obj:CanonicalModelInvoice[InvoiceDate-> 2010-05-18']. 05 18?h.Kanyvho@SourceInstances,_01],?t_2)@_plg(flrporting), Obj:CanonicalModelInvoice[DeliveryAddress->{obj_4}].?t_3=?h.Bizkelt@SourceInstances, obj_4:canonicalmodelinvoicedeliveryaddress[city-> Oslo,?t_4_1=?h.city@SourceInstances, Norway'].?t_4_2=?h.zip@SourceInstances, obj_4:canonicalmodelinvoicedeliveryaddress[zip-> 1234'].?t_4_4=?h.street@SourceInstanc}. obj_4:canonicalmodelinvoicedeliveryaddress[street-> First Street']. ICT 25
Flora2 target objects to XML target instances Source XSD Target XSD Source XSD Mediation Engine Target XSD Semantic Mapping (specification and execution) Source XML Target XML Source XML (Instances) Target XML (Instances) ICT 26
Example Flora2 Abstract: Company Y Flora2 Objects: Company Y Namespace[value->'xs:']. Obj:CanonicalModelInvoice[InvoiceNumber-> I_001 ]. YInvoice[DocumentNumber{1:1}*=>'xs:string']. Obj:CanonicalModelInvoice[AccDate->'2010_05_01']. YInvoice[DocumentDate{1:1}*=>'xs:string'] ]. Obj:CanonicalModelInvoice[InvoiceDate-> > 2010-05-1805 18'] ]. YInvoice[InvoiceDate{1:1}*=>'xs:string']. YInvoice[DeliveryAddress{1:1}*=>YInvoiceDeliveryAddress] YInvoiceDeliveryAddress[city{1:1}*=>'xs:string']. YInvoiceDeliveryAddress[country{1:1}*=>'xs:string']. YInvoiceDeliveryAddress[zip{1:1}*=>'xs:string']. YInvoiceDeliveryAddress[DoorNumber{1:1}*=>'xs:string']. YInvoiceDeliveryAddress[StreetNumber{1:1}*=>'xs:string']. Obj:CanonicalModelInvoice[DeliveryAddress->{obj_4}]. obj_4:canonicalmodelinvoicedeliveryaddress[city-> Oslo, Norway']. obj_4:canonicalmodelinvoicedeliveryaddress[zip-> 1234']. obj_4:canonicalmodelinvoicedeliveryaddress[street-> First Street']. Flora2 Special: Company Y XML Instances: Company Y Sequences[LogoInvoice->['DocumentNumber','DocumentDate ','InvoiceDate','DeliveryAddress',TheOrderEnd]]. Elements[YInvoice->DocumentNumber]. Elements[YInvoice->DocumentDate]. Elements[YInvoice->InvoiceDate] >InvoiceDate]. Elements[YInvoice->DeliveryAddress]. Sequences[YInvoiceDeliveryAddress->['city','country','zip', DoorNumber','StreetNumber',TheOrderEnd]]. Elements[YInvoiceDeliveryAddress->city]. Elements[YInvoiceDeliveryAddress->country]. Elements[YInvoiceDeliveryAddress->zip]. Elements[YInvoiceDeliveryAddress->DoorNumber]. Elements[YInvoiceDeliveryAddress->StreetNumber]. <?xml version="1.0"?> < InvoiceCompanyY > <InvoiceNumber>I_001</InvoiceNumber> <AccDate>2010_05_01</AccDate> <InvoiceDate>2010-05-18</InvoiceDate> 05 18</InvoiceDate> <DeliveryAddress> <city>oslo</city> <zip>1234</zip> <DoorNo> </DoorNo> <street>first Street </street> </DeliveryAddress> </ InvoiceCompanyY> ICT 27
Implementation in Flora2 XSD source XSD target XSD to OO Flora2 Schema source Flora2 Instance source OO to OO Flora2 Schema target Flora2 Instance target XSD/XML file Flora2 program (rules) Flora2 file (facts) XML to OO OO to XML XML source XML target ICT 28
Experiment: XSDs to Flora 500 XSDs2Flora 450 400 350 300 250 200 150 100 50 0 SimpleEx SimpleEx Info SimpleEx CM Infomatix DISystemer NES LOGO Time(Seconds) 0.249 0.219 0.242 3.84 59.295 430.518 ICT
Experiment: Complete mapping 700 600 500 400 300 200 100 0 XMLs2Flora 1 100 500 1000 2000 3000 4000 80 70 60 50 40 30 20 10 0 Flora2XML 1 100 500 1000 2000 3000 4000 450 400 350 300 250 200 150 100 50 0 Flora Mappings 1 100 500 1000 2000 3000 4000 1000 800 600 400 200 0 Total Mapping Time 1 100 500 1000 2000 3000 4000 Time(Seconds) ICT 30
Outline Intro to XML Data Exchange FloraMap: Flora2-based XML data transformation Technique: steps and examples Implementation and experiments Generic XML Data Exchange Framework Related Work Conclusions and Future Work ICT 31
Generic M-N desing- and run-time XML data transformation Source XSD 1 Target XSD 1 Source XSD 2 Source XSD n Canonical Model (CM) XSD Target XSD m Target XSD 2 Design-time Run-time Source XML i (Instances) CM XML (Instances) Target XML j (Instances) ICT 32
XML data transformation in B2B Overview (General scenario) ERP Vendor Layer (design-time) ERP Vendor A XSD R A R B ERP Vendor B XSD Instance Application Layer (design-time) Canonical Model (CM) XSD R A + R B + IA An XSD IA A1 XSD IA B1 XSD IA Bn XSD A B Are R A+ and R B+ consistent? Yes (with possible warnings) No (with errors) Collaboration Party Agreement (IA A1,IA B1 ) (R A+, R B+ ) Revise R A+ and R + B Instance Application Layer (run-time) IA A1 XML CM XML R X mapping rules at the ERP Vendor Layer R X+ mapping rules at the Instance Application Layer IA B1 XML Steps: 1. Design of R A and R B 2. Design of R A+ and R + B 3. Consistency check of R A+ and R + B a) If inconsistent, revise R A+ and/or R + B b) else, run-time transformation B1 g A B ICT 33
Generic Mapping Framework Schemas End User Layer Informal Instances Instances Mapping Rules Mediation Layer formalization formalization formalization Formalized Formalized Schemas Schemas Formalized Mapping Rules (Schemas) automatic generation Formalized Mapping Rules (Objects) Formalized Instances Consitency Checker Mapping Execution (Reasoner) (Reasoner) Formalized Instances Design time Run time ICT 34
Outline Intro to XML Data Exchange FloraMap: Flora2-based XML data transformation Technique: steps and examples Implementation and experiments Generic XML Data Exchange Framework Related Work Conclusions and Future Work ICT 35
Areas of Related Work Object-oriented representations of XML/XSD MDE model transformations The use of rule-based logical systems for data mapping/exchange hasn t been yet widely investigated t in the community ICT 36
Outline Intro to XML Data Exchange FloraMap: Flora2-based XML data transformation Technique: steps and examples Implementation and experiments Generic XML Data Exchange Framework Related Work Conclusions and Future Work ICT 37
Conclusions and Future Work FloraMap promising technique for XML data exchange Allows both specification and execution of data mappings in a single, unifying framework End-to-end solution to the problem of XML data exchange Planned extensions: End-to-end mappings between multiple sources and multiple targets Consistency checking Inclusion of other types of schemas (not only XSDs) (Semi-)Automated t generation of executable mapping rules ICT 38
Thank you! Q&A ICT 39