conceptual xml for systems analysis reema al-kamha phd dissertation defense supported by nsf

Post on 20-Jan-2016

216 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Conceptual XML for Systems Analysis

Reema Al-KamhaPhD Dissertation Defense

Supported by NSF

2

Motivation

SinceXML is now a standard for data representation

There is a need for A simple conceptual model for XML Tools to

Develop schemas for XML data storage Reverse-engineer XML storage structures to a conceptual

model for further development

3

Dissertation Contributions Conceptual-XML (C-XML) Transformations

C-XML to XML Schema (to develop schemas for XML data storage)

XML Schema to C-XML (to reverse-engineer XML storage structures to a conceptual model for further development)

Observations and recommendations

4

C-XML

5

Conceptual XML (C-XML) C-XML has good conceptual-modeling characteristics Satisfies conceptual modeling requirements [Nec06,

SW06,Wild05] Graphical notation Formal foundation Structural independence Reflection of the mental model n-ary relationship sets Cardinality for all participants Ordering Allowance for irregular and heterogeneous structure …

6

Transforming C-XML to XML Schema

7

<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"> <xs:element name="Root"> <xs:complexType> <xs:all> <xs:element ref="Students"/> <xs:element ref="Courses"/> <xs:element ref="GradStudents"/> <xs:element ref="UndergradStudents"/> </xs:all> </xs:complexType> <xs:keyref name="UndergradStudentOID-Keyref" refer="StudentOID-Key"> <xs:selector xpath="./UndergradStudents/UndergradStudent"/> <xs:field xpath="@UndergradStudentOID"/> </xs:keyref> <xs:keyref name="GradStudentOID-Keyref" refer="StudentOID-Key"> <xs:selector xpath="./GradStudents/GradStudent"/> <xs:field xpath="@GradStudentOID"/> </xs:keyref> </xs:element> <xs:element name="Students"> <xs:complexType> <xs:sequence> <xs:element name="Student" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:choice minOccurs="1" maxOccurs="1"> <xs:element name="StudentName" type="xs:string"/> <xs:sequence> <xs:element name="FirstName" type="xs:string"/> <xs:element name="MiddleNames"> <xs:complexType> <xs:sequence> <xs:element name="MiddleName" minOccurs="0" maxOccurs="2"> <xs:complexType> <xs:attribute name="MiddleName" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="MiddleName-Key"> <xs:selector xpath="./MiddleName"/> <xs:field xpath="@MiddleName"/> </xs:key> </xs:element> <xs:element name="LastName" type="xs:string"/> </xs:sequence> </xs:choice> <xs:element name="Semester-Course-Grades"> <xs:complexType> <xs:sequence> <xs:element name="Semester-Course-Grade" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="Semester" use="required"/> <xs:attribute ref="Course" use="required"/> <!-- C-XML: forall x (Course(x)=>exists [0:*] <x1, x2, x3> (Course(x) Student(x1) Semester(x2) Grade(x3) )) --> <xs:attribute name="Grade" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="Semester-Course-Grade-Key"> <xs:selector xpath="./Semester-Course-Grade"/> <xs:field xpath="@Semester"/> <xs:field xpath="@Course"/> <xs:field xpath="@Grade"/> </xs:key> </xs:element> </xs:sequence> <xs:attribute name="StudentOID" type="xs:string" use="required"/> <xs:attribute name="StudentID" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="StudentOID-Key"> <xs:selector xpath="./Student"/> <xs:field xpath="@StudentOID"/> </xs:key> <xs:key name="StudentID-Key"> <xs:selector xpath="./Student"/> <xs:field xpath="@StudentID"/> </xs:key> </xs:element> <xs:element name="Courses"> <xs:complexType> <xs:sequence> <xs:element name="Course" maxOccurs="unbounded"> <xs:complexType> <xs:attribute ref="Course" use="required"/> <xs:attribute name="Department" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="Course-Key"> <xs:selector xpath="./Course"/> <xs:field xpath="@Course"/> </xs:key> </xs:element> <xs:element name="GradStudents"> <xs:complexType> <xs:sequence> <xs:element name="GradStudent" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="GradStudentOID" type="xs:string" use="required"/> <xs:attribute name="Advisor" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="GradStudentOID-Key"> <xs:selector xpath="./GradStudent"/> <xs:field xpath="@GradStudentOID"/> </xs:key> </xs:element> <xs:element name="UndergradStudents"> <xs:complexType> <xs:sequence> <xs:element name="UndergradStudent" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="UndergradStudentOID" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="UndergradStudentOID-Key"> <xs:selector xpath="./UndergradStudent"/> <xs:field xpath="@UndergradStudentOID"/> </xs:key> </xs:element> <xs:attribute name="Course" type="xs:string"/></xs:schema>

C-XML XML Schema

8

Algorithm Overview Generate a forest of scheme trees Translate an individual object set Translate an individual node Create a root node Add global uniqueness constraints Translate generalization/specialization hierarchies

9

(Student, StudentID, StudentName, FirstName, LastName, (MiddleName)*, (Course, Semester, Grade)*)*

Generate Scheme Trees

10

(Course, Department)*

Generate Scheme Trees

11

(GradStudent, Advisor)*(UndergradStudent)*

Generate Scheme Trees

12

(Student, StudentID, StudentName, FirstName, LastName, (MiddleName)*, (Course, Semester, Grade)*)*

(Course, Department)*

(GradStudent, Advisor)* (UndergradStudent)*

Generate Scheme Trees

13

Student, StudentID, StudentName, FirstName, LastName

MiddleName Course, Semester, Grade

Course, Department GradStudent, Advisor UndergradStudent

(Student, StudentID, StudentName, FirstName, LastName, (MiddleName)*, (Course, Semester, Grade)*)*

(Course, Department)*

(GradStudent, Advisor)* (UndergradStudent)*

Generate Scheme Trees

14

Individual Object Sets

<xs:attribute name="Department" type="xs:string"/><xs:attribute name="Course" type="xs:string"/><xs:attribute ref="Course"/><xs:element name="FirstName" type="xs:string"/><xs:element name="Student"> <xs:complexType> ... <xs:attribute name="StudentOID" type="xs:string" use="required"/> </xs:complexType></xs:element>

15

Nodes

Students

Courses GradStudents UndergradStudents

MiddleNames

Course-Semester-GradesMiddleNames

Students

Student

MiddleName

Course GradStudent UndergradStudent

Course-Semester-Grade

16

Nodes

<xs:element name="Students"> <xs:complexType> <xs:sequence> <xs:element name="Student" maxOccurs="unbounded"> <xs:complexType> ... </complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element>

<xs:element name="Semester-Course-Grades"> <xs:complexType> <xs:sequence> <xs:element name="Semester-Course-Grade" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> ... </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> ...</xs:element>

17

Nodes<xs:element name="Semester-Course-Grade" minOccurs="0" maxOccurs="unbounded"> <xs:complexType> <xs:attribute name="Semester" use="required"/> <xs:attribute ref="Course" use="required"/> <!-- C-XML: forall x (Course(x)=> exists [0:*] <x1, x2, x3> (Course(x) Student(x1) Semester(x2) Grade(x3) )) --> <xs:attribute name="Grade" type="xs:string" use="required"/> </xs:complexType></xs:element>

18

19

Root Element

Students

Courses GradStudents UndergradStudents

<xs:schema > <xs:element name="Root"> <xs:complexType> <xs:all> <xs:element ref="Students"/> <xs:element ref="Courses"/> <xs:element ref="GradStudents"/> <xs:element ref="UndergradStudents"/> </xs:all> </xs:complexType> ... </xs:element> ...</xs:schema>

20

Uniqueness Constraints<xs:element name="Students"> <xs:complexType> <xs:sequence> <xs:element name="Student" maxOccurs="unbounded"> <xs:complexType> ... </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> <xs:key name="StudentOID-Key"> <xs:selector xpath="./Student"/> <xs:field xpath="@StudentOID"/> </xs:key> <xs:key name="StudentID-Key"> <xs:selector xpath="./Student"/> <xs:field xpath="@StudentID"/> </xs:key> </xs:element>

21

Generalization/Specialization

<xs:keyref name="UndergradStudentOID-Keyref" refer="StudentOID-Key"> <xs:selector xpath="./UndergradStudents/UndergradStudent"/> <xs:field xpath="@UndergradStudentOID"/> </xs:keyref> <xs:keyref name="GradStudentOID-Keyref" refer="StudentOID-Key"> <xs:selector xpath="./GradStudents/GradStudent"/> <xs:field xpath="@GradStudentOID"/> </xs:keyref>

22

Transforming XML Schema to C-XML

23

XML Schema C- XML

24

Algorithm Overview Generate object sets for each element, attribute Specify built-in data types and simple types in the data

frame XML parent-child connections become binary

relationship sets minOccurs, maxOccurs, and use become participation

constraints

25

Attribute Transformation

26

Element Transformation

27

Choice Transformation

28

Sequence Transformation

29

Key Constraints Transformation

30

SubstitutionGroup & Extension

Transformation

31

Observation on Transformations Our transformations to and from C-XML are not

inverses of one another However,

C-XMLXML Schema

C-XML XML Schema

32

Observations & Recommendations

33

C-XML is More Expressive than XML SchemaExtra, unneeded sequence structure

<xs:all> <xs:element name=“e1” maxOccurs=“3”> <xs:sequence> … </xs:sequence> <xs:choice> … </xs:choice></xs:all>

34

C-XML is More Expressive than XML SchemaExtra, unneeded sequence structure

<xs:all> <xs:element name=“e1” maxOccurs=“3”> <xs:sequence> … </xs:sequence> <xs:choice> … </xs:choice></xs:all>

35

C-XML is More Expressive than XML SchemaExtra, unneeded sequence structure

<xs:sequence> <xs:element name=“e1” maxOccurs=“3”> <xs:sequence> … </xs:sequence> <xs:choice> … </xs:choice></xs:sequence>

36

C-XML is More Expressive than XML Schema

Generalization/specialization constraints

<!--C-XML:forall x (StudentOID(x) => UndergradStudentOID(x) or GradStudentOID(x))--> <!--C-XML:forall x (UndergradStudentOID(x) => not GradStudentOID(x))-->

<!--C-XML:forall x (Instructor(x) and Advisor(x)=> InstructorAdvisor(x))-->

37

C-XML is More Expressive than XML Schema

Participation constraints for child elements

<!-- C-XML: forall x (State(x) => exists[0:*] y(State(x) has Order(2) in Sequence-k(y))) -->

38

Recommendations

Extending XML Schema Extend the all structure Support generalization/specialization constraints

39

XML Schema is More Expressive than Traditional Conceptual Models

Traditional conceptual model languages do not support: Sequence structure Choice structure Mixed-content Any and anyAttribute structures

40

Recommendations

Enrich conceptual modeling languages Order lists of concepts Choose alternative from among several Specify mixed content Use content from another data model

41

Conclusions Extended conceptual modeling for XML Developed transformation algorithms:

C-XML to XML Schema XML Schema to C-XML

Explored the equivalence of C-XML and XML Schema Basic transformations are not inverses But inverse transformations exist

Observations and Insights Expressive Power Recommendations

42

Future Work

Provide mathematical proofs Make the prototype tool practical Continue with this work in several activities in

system analysis, design, development, and evolution XML database design and development Reverse Engineering Integration

top related