©2003 Altova GmbH. All Rights Reserved.
Architecting XML Schemas for Oracle XML DB
September 10th, 2003
Alexander Falk
President, CEO – Altova, Inc.Member W3C Advisory Committee
©2003 Altova GmbH. All Rights Reserved.
Alexander Falk Bio
► Co-founded ALTOVA in 1992
► Wrote XML Parser and XML Schema Validator used within XMLSPY
► Member of W3C XML Schema WG in 2001
► Member of W3C Advisory Committee
©2003 Altova GmbH. All Rights Reserved.
Agenda
► XML Schema Overview
► Schema Components
► Architecting XML Schemas
► Data Mapping & Transformations
► XML Schema & Oracle XML DB
► Tools for XML Schemas
► Live Demonstration
► Q&A
©2003 Altova GmbH. All Rights Reserved.
What is XML Schema?
► DTDs not sufficient for data modeling
► XML-Data, XDR, SOX, ... XML Schema
► Object-Oriented Features
Distinction between types and instances
Inheritance
Support for static vs. Dynamic types
► Make it easy to translate from programming languages to XML and vice versa
©2003 Altova GmbH. All Rights Reserved.
DTD‘s in a Nutshell
► Document Type Definitions (DTDs)
Uses special syntax (SGML-like)
Everything is a string (#PCDATA)
Reuse only through macros (parameter entities)
Concise syntax (although somewhat cryptic)
► Example:
<!ELEMENT Age (#PCDATA)>
©2003 Altova GmbH. All Rights Reserved.
Cross-Referencing XML with DTD’s
File “Person.xml” File “Person.dtd”
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Person SYSTEM "Person.dtd">
<Person>
<First>Alexander</First>
<Last>Falk</Last>
<Age>34</Age>
</Person>
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT Person (First, Middle?, Last, Age)>
<!ELEMENT First (#PCDATA)>
<!ELEMENT Middle (#PCDATA)>
<!ELEMENT Last (#PCDATA)>
<!ELEMENT Age (#PCDATA)>
©2003 Altova GmbH. All Rights Reserved.
Schema in a Nutshell
► XML Schema
Uses XML syntax
Uses Datatypes: built-in and custom-defined
Reuse through groups and inheritance
Verbose syntax (more easily readable)
► Example:
<element name=“Age” type=“integer”/>
©2003 Altova GmbH. All Rights Reserved.
Cross-Referencing XML with SchemasFile “Person.xml” File “Person.xsd”<?xml version="1.0" encoding="UTF-8"?>
<Person xmlns:xsi="http://www.w3.org/ 2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="Person.xsd">
<First>Alexander</First>
<Last>Falk</Last>
<Age>34</Age>
</Person>
<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/ XMLSchema"> <xs:element name="Person"> <xs:complexType> <xs:sequence> <xs:element name="First“ type="xs:string"/> <xs:element name="Middle“ type="xs:string“ minOccurs="0"/> <xs:element name="Last“ type="xs:string"/> <xs:element name="Age“ type="xs:integer"/> </xs:sequence> </xs:complexType> </xs:element></xs:schema>
©2003 Altova GmbH. All Rights Reserved.
XML Schema - Benefits
► Huge industry support (Oracle, BEA, Microsoft, IBM, etc.)
► Information modeling in XML
► Representing OO capabilities in XML data
► Offloading consistency checking to the validation process in the XML parser
► Cost-saving through reduced development time
©2003 Altova GmbH. All Rights Reserved.
Schema Components
►Elements and their content model
<element name="item"><annotation><documentation>One item of a purchase order with its
details</documentation></annotation><complexType><sequence><choice><element name="productName" type="string"/><element name="productName" type="string"/>
</choice><element name="quantity"><simpleType><restriction base="positiveInteger"><maxExclusive value="100"/>
</restriction></simpleType>
</element><element name="price" type="decimal"><annotation><documentation>Needs to be specified in
US$</documentation></annotation></element><element ref="ipo:comment" minOccurs="0" maxOccurs="5"/><element name="shipDate" type="date" minOccurs="0"/>
</sequence><attribute name="partNum" type="ipo:Sku"/>
</complexType></element>
©2003 Altova GmbH. All Rights Reserved.
Schema Components
►Attributes and Attribute Groups
<xs:attribute name="name" type="xs:NCName"/>
<xs:attribute name="mixed" type="xs:boolean" use="optional" default="false"/>
<xs:attribute name="abstract" type="xs:boolean" use="optional" default="false"/>
<xs:attribute name="final" type="xs:derivationSet"/>
<xs:attribute name="block" type="xs:derivationSet"/>
©2003 Altova GmbH. All Rights Reserved.
Schema Components►ComplexTypes and SubstitutionGroups
<xsd:complexType name="PersonType"><xsd:sequence><xsd:element name="First" type="xsd:string"/><xsd:element name="Last" type="xsd:string"/><xsd:element name="Title" type="xsd:string“ minOccurs="0"/>
<xsd:element name="PhoneExt" type="xsd:int"/><xsd:element ref="EMail"/>
</xsd:sequence></xsd:complexType><xsd:element name="Person" type="PersonType"/><xsd:element name="VIP“
substitutionGroup="Person"><xsd:complexType><xsd:complexContent><xsd:extension base="PersonType"><xsd:attribute name="IQ" type="xsd:int"/>
</xsd:extension></xsd:complexContent>
</xsd:complexType></xsd:element>
©2003 Altova GmbH. All Rights Reserved.
Schema Components
►Extension of ComplexType
<complexType name="Address"><sequence><element name="name" type="string“
minOccurs="0"/><element name="street“
type="string"/><element name="city" type="string"/>
</sequence></complexType><complexType name="US-Address"><complexContent><extension base="ipo:Address"><sequence><element name="state“
type="ipo:US-State"/><element name="zip“
type="positiveInteger"/></sequence>
</extension></complexContent>
</complexType>
©2003 Altova GmbH. All Rights Reserved.
Schema Components
►Defining your own SimpleTypes<xs:simpleType name="toddlerCounting"><xs:union><xs:simpleType><xs:restriction base="xs:int"><xs:minInclusive value="1"/><xs:maxInclusive value="3"/>
</xs:restriction></xs:simpleType><xs:simpleType><xs:restriction base="xs:string"><xs:enumeration value="many"/>
</xs:restriction></xs:simpleType>
</xs:union></xs:simpleType>
©2003 Altova GmbH. All Rights Reserved.
Architecting XML Schemas
► From Scratch
Using established OO methodologies, using Schema design tools, from OO class libraries (Java, C++, etc.)
► By Example (Use-Cases)
From any set of existing XML documents
► By Conversion
From existing DTD, DCD, or other schema
From SQL Database Schema
©2003 Altova GmbH. All Rights Reserved.
Data Mapping & Transformations
►Schema-based mapping
►Integrate data from different sources
►Web Services
©2003 Altova GmbH. All Rights Reserved.
XML Schema & Oracle XML DB
► XML Schema is central to Oracle 9i
► It describes how XML documents are stored inside the database
► It allows validation of XML documents in the database
©2003 Altova GmbH. All Rights Reserved.
Extending XML Schema for Oracle 9i
► Use SQLName to specify column names
► Use SQLType to specify storage datatype<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema“ xmlns:xdb="http://xmlns.oracle.com/xdb"> <xs:complexType name=“PersonType“ xdb:SQLType=“PERSON_TYPE"> <xs:sequence> <xs:element name="First“ type="xs:string“ xdb:SQLName=“FIRST_NM" xdb:SQLType=“NVARCHAR2"/> <xs:element name="Middle“ type="xs:string“ minOccurs="0" xdb:SQLName=“MIDDLE_NM" xdb:SQLType="NVARCHAR2"/> <xs:element name="Last“ type="xs:string" xdb:SQLName=“LAST_NM" xdb:SQLType="NVARCHAR2"/> <xs:element name="Age“ type="xs:short" xdb:SQLName=“PERSON_AGE" xdb:SQLType=“NUMBER"/> </xs:sequence> </xs:complexType></xs:schema>
©2003 Altova GmbH. All Rights Reserved.
XML Schema – Tools Overview
► Graphical Schema Editors Visual Studio .NET
xmlspy® 2004
► Mapping & Transformation Tools mapforce™ 2004
► Parsers Oracle XML DB
Xerces
MSXML 4.0 & System.XML (.NET Framework)
©2003 Altova GmbH. All Rights Reserved.
Demo Time
Live Demonstration
©2003 Altova GmbH. All Rights Reserved.
► Questions & Answers
XMLSPY, AUTHENTIC, STYLEVISION, MAPFORCE, MARKUP YOUR MIND, AXAD, NANONULL, and ALTOVA are trademarks of Altova GmbH (registered in numerous countries). All other trademarks are the property of their respective owners.