Model-driven Rule-based Mediation in XML Data Exchange



Similar documents
+ <xs:element name="productsubtype" type="xs:string" minoccurs="0"/>

Introduction to XML. Data Integration. Structure in Data Representation. Yanlei Diao UMass Amherst Nov 15, 2007

Service Description: NIH GovTrip - NBS Web Service

Modernize your NonStop COBOL Applications with XML Thunder September 29, 2009 Mike Bonham, TIC Software John Russell, Canam Software

No Trade Secrets. Microsoft does not claim any trade secret rights in this documentation.

[MS-DVRD]: Device Registration Discovery Protocol. Intellectual Property Rights Notice for Open Specifications Documentation

User manual for e-line DNB: the XML import file. User manual for e-line DNB: the XML import file

04 XML Schemas. Software Technology 2. MSc in Communication Sciences Program in Technologies for Human Communication Davide Eynard

DRAFT. Standard Definition. Extensible Event Stream. Christian W. Günther Fluxicon Process Laboratories

ETSI TS V1.7.1 ( )

Designing the Service Contract

keyon Luna SA Monitor Service Administration Guide 1 P a g e Version Autor Date Comment

[MS-FSDAP]: Forms Services Design and Activation Web Service Protocol

Oracle Java CAPS Message Library for EDIFACT User's Guide

Model Driven Interoperability through Semantic Annotations using SoaML and ODM

EFSOC Framework Overview and Infrastructure Services

[MS-SAMLPR]: Security Assertion Markup Language (SAML) Proxy Request Signing Protocol Specification

XML Data Integration in OGSA Grids

No Trade Secrets. Microsoft does not claim any trade secret rights in this documentation.

ASPIRE Programmable Language and Engine

D4.1.2 Cloud-based Data Storage (Prototype II)

Conceptual Level Design of Semi-structured Database System: Graph-semantic Based Approach

Relational Database Basics Review

An Empirical Study on XML Schema Idiosyncrasies in Big Data Processing

Principal MDM Components and Capabilities

Security for industrial automation and control systems: Patch compatibility information

XIII. Service Oriented Computing. Laurea Triennale in Informatica Corso di Ingegneria del Software I A.A. 2006/2007 Andrea Polini

T Network Application Frameworks and XML Web Services and WSDL Tancred Lindholm

Topics. Introduction to Database Management System. What Is a DBMS? DBMS Types

JOURNAL OF OBJECT TECHNOLOGY

DocuSign Connect Guide

2 (18) - SOFTWARE ARCHITECTURE Service Oriented Architecture - Sven Arne Andreasson - Computer Science and Engineering.

Languages for Data Integration of Semi- Structured Data II XML Schema, Dom/SAX. Recuperación de Información 2007 Lecture 3.

Spring 2011 Conference Sandanski, May 13th 15th 2011 Oracle SOA Suite 11g Rapid service integration and process automation with a no-coding approach

Object Oriented Databases. OOAD Fall 2012 Arjun Gopalakrishna Bhavya Udayashankar

SAML v2.0 for.net Developer Guide

Federated, Generic Configuration Management for Engineering Data

SOA Success is Not a Matter of Luck

Case Study: Semantic Integration as the Key Enabler of Interoperability and Modular Architecture for Smart Grid at Long Island Power Authority (LIPA)

Service Oriented Architecture Based Integration. Mike Rosen CTO, AZORA Technologies, Inc.

Gplus Adapter 8.0. for Siebel CRM. Developer s Guide

Motivation Definitions EAI Architectures Elements Integration Technologies. Part I. EAI: Foundations, Concepts, and Architectures

DATA INTEGRATION CS561-SPRING 2012 WPI, MOHAMED ELTABAKH

The Direct Project. Implementation Guide for Direct Project Trust Bundle Distribution. Version March 2013

Standardized Multimedia Retrieval in Distributed Heterogenous Database Systems. Dr. Mario Döller

Lesson 8: Introduction to Databases E-R Data Modeling

Enterprise Application Designs In Relation to ERP and SOA

Data Integration Hub for a Hybrid Paper Search

Java (12 Weeks) Introduction to Java Programming Language

Quiz! Database Indexes. Index. Quiz! Disc and main memory. Quiz! How costly is this operation (naive solution)?

Introduction to Service-Oriented Architecture for Business Analysts

3. Data Models for Engineering Data. Conventional and Specific Ways to Describe Engineering Data

Chapter 6: Programming Languages

XML for RPG Programmers: An Introduction

Data Modeling Basics

CHAPTER 6: TECHNOLOGY

Formal Engineering for Industrial Software Development

Guiding Principles for Modeling and Designing Reusable Services

Archivio Sp. z o.o. Schema XSD opisująca typy dokumentów obsługiwane w Systemie Invo24

Open Grid Services Infrastructure (OGSI) Version 1.0

XML. Document Type Definitions XML Schema

II. PREVIOUS RELATED WORK

Introduction to Service Oriented Architectures (SOA)

CS2Bh: Current Technologies. Introduction to XML and Relational Databases. Introduction to Databases. Why databases? Why not use XML?

Data Integration and Exchange. L. Libkin 1 Data Integration and Exchange

CHAPTER 9: DATAPORT AND XMLPORT CHANGES

MD Link Integration MDI Solutions Limited

Developer Guide. Christian W. Günther Library version: 1.0 RC7 Revision: 7

Realization of Inventory Databases and Object-Relational Mapping for the Common Information Model

An Approach to Eliminate Semantic Heterogenity Using Ontologies in Enterprise Data Integeration

An Oracle White Paper October Oracle Data Integrator 12c New Features Overview

Advanced Information Management

Service-centric Software Engineering. Ian Sommerville 2006 Software Engineering, 8th edition. Chapter 31 Slide 1

Analysis and Design of Software Systems Practical Session 01. System Layering

MASTER DATA INTEGRATION

Tecnologie per XML. Sara Comai Politecnico di Milano. Tecnologie legate a XML

Metadata for the OASIS Security Assertion Markup Language (SAML) V2.0

Using the SID in OSS/BSS Integration Challenges and Solutions to Implementing the TM Forum Shared Information /Data Model

PEPPOL Deliverable D1.1 Requirements for Use of Signatures in Public Procurement Processes Part 5: XKMS v2 Interface Specification

BUSINESS RULES CONCEPTS... 2 BUSINESS RULE ENGINE ARCHITECTURE By using the RETE Algorithm Benefits of RETE Algorithm...

Semantic Web Languages: RDF vs. SOAP Serialisation

C#5.0 IN A NUTSHELL. Joseph O'REILLY. Albahari and Ben Albahari. Fifth Edition. Tokyo. Sebastopol. Beijing. Cambridge. Koln.

Introduction to UDDI: Important Features and Functional Concepts

Programming and Software Development CTAG Alignments

XML Databases 6. SQL/XML

Transcription:

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