TUTORIAL 4 XP WORKING WITH SCHEMAS New Perspectives on XML, 2nd Edition Tutorial 4 1 XP SCHEMAS • A schema is an XML document that defines the content and structure of one or more XML documents. • The XML document containing the content is called the instance document. New Perspectives on XML, 2nd Edition Tutorial 4 2 COMPARING SCHEMAS AND DTDS XP This figure compares schemas and DTDs New Perspectives on XML, 2nd Edition Tutorial 4 3 XP SCHEMA VOCABULARIES • There is no single schema form. Several schema “vocabularies” have been developed in the XML language. • Support for a particular schema depends on the XML parser being used for validation. New Perspectives on XML, 2nd Edition Tutorial 4 4 XP SCHEMA VOCABULARIES This figure shows a few schema vocabularies New Perspectives on XML, 2nd Edition Tutorial 4 5 XP STARTING A SCHEMA FILE • A schema is always placed in a separate XML document that is referenced by the instance document. New Perspectives on XML, 2nd Edition Tutorial 4 6 XP Example Schema <?xml version="1.0"?> < xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="note"> <xs:complexType> <xs:sequence> <xs:element name="to" type="xs:string"/> <xs:element name="from" type="xs:string"/> <xs:element name="heading" type="xs:string"/> <xs:element name="body" type="xs:string"/> </xs:sequence> </xs:complexType> < /xs:element> < /xs:schema> New Perspectives on XML, 2nd Edition Tutorial 4 7 XP ELEMENTS AND ATTRIBUTES OF THE PATIENTS DOCUMENT This figure shows the elements and attributes of the patients.xml document See pages 147 and 148 New Perspectives on XML, 2nd Edition Tutorial 4 8 XP SCHEMA TYPES • XML Schema recognize two categories of types: – Simple type contains only a single value • Value of an attribute • Or the textual content of an element – Complex type • Contains a structure New Perspectives on XML, 2nd Edition Tutorial 4 9 XP SCHEMA TYPES This figure shows types of elements New Perspectives on XML, 2nd Edition Tutorial 4 10 XP SIMPLE TYPE ELEMENTS • Use the following syntax to declare a simple type element in XML Schema: <element name=“name” type =“type”/> name = the name of the element in the instance document type = the data type of the element. • Example: <xs:element name = “lastName” type = “xs:string” /> Unlike DTD, schema is an XML language New Perspectives on XML, 2nd Edition Tutorial 4 11 XP UNDERSTANDING DATA TYPES • XML Schema supports two data types – A built-in data type is part of the XML Schema specifications and is available to all XML Schema authors. – A user-derived data type is created by the XML Schema author for specific data values in the instance document. New Perspectives on XML, 2nd Edition Tutorial 4 12 XP DECLARING AN ATTRIBUTE • An attribute is another example of a simple type. The syntax to define an attribute is <xs:attribute name=“name” type="type” default=“default” fixed=“fixed” /> By convention, use xs for namespace for XML Schma namespace optional name = the name of the attribute type = the data type, default = the attribute’s default value fixed = a fixed value for the attribute • For examle: <xs:attribute name=“Gender” type=“xs:string” default=“female” /> New Perspectives on XML, 2nd Edition Tutorial 4 13 ASSOCIATING ATTRIBUTES XP AND ELEMENTS • The basic structure for defining a complex type with XML Schema is <xs:element name="name"> <xs:complexType> declarations </xs:complexType> </xs:element> name = the name of the element declarations = schema commands specific to the type of complex element being defined. New Perspectives on XML, 2nd Edition Tutorial 4 14 ASSOCIATING ATTRIBUTES XP AND ELEMENTS • Four complex type elements that usually appear in an instance document are the following: – The element is an empty element and contains only attributes. – The element contains textual content and attributes but no child elements. – The element contains child elements but not attributes. – The element contains both child elements and attributes. The following slides describe each of these New Perspectives on XML, 2nd Edition Tutorial 4 EMPTY ELEMENTS AND ATTRIBUTES XP • The code to declare the attributes of an empty element is <xs:element name="name"> <xs:complexType> attributes </xs:complexType> </xs:element> attributes = the set of declarations that define the attributes associated with the element New Perspectives on XML, 2nd Edition Tutorial 4 16 EMPTY ELEMENTS AND ATTRIBUTES XP • For example: <xs: element name=“subject”> <xs:complexType> <xs:attriubute name=“name” type=“xs:string” /> <xs:attriubute name=“age” type=“xs:string” /> </xs: complexType> </xs:element> • describes the following empty element: <subject name=“Cynthia Dibbs” age=“62” /> New Perspectives on XML, 2nd Edition Tutorial 4 17 SIMPLE CONTENT AND ATTRIBUTES XP • If an element is not empty and contains textual content (but no child elements), the structure of the complex type element is slightly different. <xs:element name="name"> <xs:complexType> <xs:simpleContent> <xs:extension base="type"> attributes </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> New Perspectives on XML, 2nd Edition Tutorial 4 18 SIMPLE CONTENT AND ATTRIBUTES • • • XP Indicates text no child For example: but <xs:element name=“performance”> <xs:complexType> <xs:simpleContent> <xs:extension base=“xs:string”> <xs:attribute name=“scale” type=“xs:string”/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> defines <performance scale=“Karnofskyk”>0.81</performance> New Perspectives on XML, 2nd Edition Tutorial 4 Extended to include an attribute 19 SPECIFYING THE USE OF AN ATTRIBUTE XP • An attribute may or may not be required with a particular element. To indicate whether an attribute is required, you add the use attribute to the element declaration or reference. The use attribute has the following values: – required—The attribute must always appear with the element – optional—(default) The use of the attribute is optional with the element – prohibited—The attribute cannot be used with the element • For example, the previous attribute declaration is modified as: <xs:attribute name=“scale” type=“xs:string” use=“required”/> New Perspectives on XML, 2nd Edition Tutorial 4 20 REFERENCING AN ELEMENTXP OR ATTRIBUTE • Rather than nesting the attribute declaration within the element, you can create a reference to it. The code to create a reference to an element or attribute declaration is <xs:element ref="elemName" /> <xs:attribute ref="attName" /> where elemName = the name used in an element declaration attName = the name used in an attribute declaration New Perspectives on XML, 2nd Edition Tutorial 4 21 REFERENCING AN ELEMENTXP OR ATTRIBUTE <xs:attribute name=“scale” type=“xs:string” /> <xs:element name=“performance”> <xs:complexType> <xs:simpleContent> <xs:extension base = “xs:string> <xs:attribute> ref=“scale” use=“required” /> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> New Perspectives on XML, 2nd Edition Tutorial 4 22 WORKING WITH CHILD ELEMENTS XP • Another kind of complex type element contains child elements, but no attributes. To define these child elements, use the code structure <xs:element name="name"> <xs:complexType> <xs:compositor> elements </xs:compositor> </xs:complexType> </xs:element> where elements =the list of simple type element declarations for each child element compositor = defines how the child elements are organized. New Perspectives on XML, 2nd Edition Tutorial 4 23 XP USING COMPOSITORS • XML Schema supports the following compositors: – sequence defines a specific order for the child elements – choice allows any one of the child elements to appear in the instance document – all allows any of the child elements to appear in any order in the instance document; however, they must appear either only once or not all. New Perspectives on XML, 2nd Edition Tutorial 4 24 XP USING COMPOSITORS <element name=“address”> <xs:complexType> Must be in sequence <xs:sequence> <xs:element name = “street” type = “xs:string”/> <xs:element name = “city” type = “xs:string”/> <xs:element name = “state” type = “xs:string”/> </xs:sequence> <xs:complexType> </element> New Perspectives on XML, 2nd Edition Tutorial 4 25 XP USING COMPOSITORS <element name=“Family”> <xs:complexType> <xs:all> <xs:element name = “Father” type = “xs:string”/> <xs:element name = “Mother” type = “xs:string”/> </xs:all> <xs:complexType> Family may contain Father </element> and/or Mother in no particular order New Perspectives on XML, 2nd Edition Tutorial 4 26 XP SPECIFYING THE OCCURENCES OF AN ITEM • <xs:element name=“patient” type=“xs:string” minOccurs=“1” maxOccurs=“3”/> New Perspectives on XML, 2nd Edition Tutorial 4 27 WORKING WITH CHILD XP ELEMENTS AND ATTRIBUTES • The code for a complex type element that contains both attributes and child elements is <xs:element name="name"> <xs:complexType> <xs:compositor> elements </xs:compositor> </xs:complexType> attributes </xs:element> New Perspectives on XML, 2nd Edition Tutorial 4 28 CHILD ELEMENTS AND ATTRIBUTES EXAMPLE XP <xs:element name=“patient”> <xs:complexType> <xs:sequence> <xs:element ref=“lastname”/> <xs:element ref=“firstName”/> </xs:sequence> <xs:attribute ref=“patID use=“required”> </xs:complexType> <xs:element> New Perspectives on XML, 2nd Edition Tutorial 4 29 XP SPECIFYING MIXED CONTENT <Summary> Patient <Name>Cynthia Davis</Name> was enrolled in the <Study>Tamoxifen Study</Study> on 8/15/2003. </Summary> can be declared in the schema file using the following complex type: element contains both <element name="Summary"> <complexType mixed="true"> text and child elements <sequence> <element name="Name" type="string"/> <element name="Study" type="string"/> </sequence> </complexType> </element> New Perspectives on XML, 2nd Edition Tutorial 4 30 XP APPLYING A SCHEMA • To attach a schema to the document, you must do the following: – Declare a namespace for XML Schema in the instance document. Commonly used for – Indicate the location of the schema file. XML Schema instances • Example: xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi=SchemaLocation=“pschema.xsd”> Schema instance namespace New Perspectives on XML, 2nd Edition Tutorial 4 31 XP APPLYING A SCHEMA • Specifying a schema in an XML document – is treated only as a hint by validating parsers – ignored by some parsers • Not allowed to prevent improper financial documents from being fraudulently submitted • If there is no namespace for the contents of the instance document, add the following attribute to the root element: xsi:noNamespaceSchemaLocation="schema" Schema instance New Perspectives on XML, 2nd Edition namespace Tutorial 4 32 XP Pause and breath New Perspectives on XML, 2nd Edition Tutorial 4 33 XP UNDERSTANDING DATA TYPES • A primitive data type, also called a base type, is one of 19 fundamental data types not defined in terms of other types. • A derived data type is a collection of 25 data types that the XML Schema developers created based on the 19 primitive types. New Perspectives on XML, 2nd Edition Tutorial 4 34 XP UNDERSTANDING DATA TYPES This figure shows the 44 built-in data types Page XML 168 Dates & times Premitive types Derived Types New Perspectives on XML, 2nd Edition Tutorial 4 35 XP UNDERSTANDING DATA TYPES This figure shows a partial description of XML string data types Page XML 169 New Perspectives on XML, 2nd Edition Tutorial 4 36 XP USING DATA TYPES Examples: <xs:attribute name=“patID” type=“xs:ID” /> <xs:attribute name=“onStudy” type=“xs:string” /> <xs:attribute name=“scale” type=“xs:string” /> New Perspectives on XML, 2nd Edition Tutorial 4 37 XP UNDERSTANDING DATA TYPES This figure shows a partial description of XML numeric data types Page XML 170 New Perspectives on XML, 2nd Edition Tutorial 4 38 XP UNDERSTANDING DATA TYPES This figure shows a partial description of XML date and time data types Page XML 171 New Perspectives on XML, 2nd Edition Tutorial 4 39 XP DERIVING NEW DATA TYPES • Three components are involved in deriving new data types: – Value space: the set of values that correspond to the data type. – Lexical space: the set of textual representations of the value space. – Facets: the properties of the data type that distinguish one data type from another. • Text string length, range of allowable values, New Perspectives on XML, 2nd Edition Tutorial 4 40 XP USER DERIVED DATA • New data types fall into three categories: – List: a list of values where each list is derived from a base type. – Union: the combination of two or more data types. – Restriction: a limit placed on the facet of a base type. New Perspectives on XML, 2nd Edition Tutorial 4 41 XP LIST • List data type is a list of values separated by white space • To create a list data type: <xs:simpleType name=wbcList”> <xs:list itemType=xs:decimal” /> <xs:simpleType> • To use the data type: <xs:element name=“wbc” type=“wbcList” /> <wbe>15.1 15.8. 20.0 9.3 7.1 5.2 </wbc> New Perspectives on XML, 2nd Edition Tutorial 4 42 DERIVING A RESTRICTED DATA TYPE XP • The most common way to derive a new data type is to restrict the properties of a base type. XML Schema provides twelve constraining facets for this purpose. New Perspectives on XML, 2nd Edition Tutorial 4 43 XP CONSTRAINING FACETS This figure shows the 12 constraining facets New Perspectives on XML, 2nd Edition Tutorial 4 44 CONSTRAINING FACETS EXAMPLE XP <xs:simpleType name=“ageType”> <xs:restriction base=“xs:integer”> <xs:minInclusive value = “21” /> </xs:restriction> </xs:simpleType> Constrains the data type to be greater than or equal to the value New Perspectives on XML, 2nd Edition Tutorial 4 45 XP The Patterns Facet • A pattern can be created with a formatted text string called a regular expression or regex. • To apply a regular expression in a data type, you use the code <xs:simpleType name="name"> <xs:restriction base="type"> <xs:pattern value="regex"/> </xs:restriction> </xs:simpleType> • Where regex is a regular expression pattern. New Perspectives on XML, 2nd Edition Tutorial 4 46 XP Regular Expressions • Figure 4-30 page 184 shows character types, for example – \d a digit from 0 to 9 – \D non digit character – Etc. • Figure 4-31 page 185 shows character sets, for example – [chars] Match any character in the chars list – [a-z] Match any lower case letter – [0-9] matach any digit form 0-9 – Etc. New Perspectives on XML, 2nd Edition Tutorial 4 47 XP PATTERN QUANTIFIERS This figure shows pattern quantifiers New Perspectives on XML, 2nd Edition Tutorial 4 48 EXAMPLE REGULAR EXPRESSIONS XP • <xs:pattern value=“\d{3}” /> • <xs:pattern value=“[A-Z]*” /> • <xs:pattern value=“[A-Z]{0,10}*” /} <xs:ximpleType name=“mrType”> <sx:restrictiion base=“xs:ID”> <xs:pattern value=“MR\d{3}-\d{3}-d2{2}” /> </xs:restriction> <xs:simpleType> New Perspectives on XML, 2nd Edition Tutorial 4 49 XP WORKING WITH NAMED TYPES • • • Schema authors can create customized complex types. – Advantage: reuse the complex structure in several places in the document. For example: <xs:element name=“fullName"> <xs:complexType> <xs:sequence> <xs:element name="firstName" type="xs:string"/> <xs:element name="lastName" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> Use <xs:element name=“client” type=“fullName”/> <xs:element name=“salesperson” type=“fullName”/> New Perspectives on XML, 2nd Edition Tutorial 4 50 XP NAMED MODEL GROUPS • A named model group is a collection, or group, of elements. • Syntax <xs:group name="name"> elements </xs:group> • Where name is the name of the model group, and elements is a collection of element declarations New Perspectives on XML, 2nd Edition Tutorial 4 51 NAMED MODEL GROUPS EXAMPLE • • XP Definition <xs:group name=“fullName”> <xs:sequence> <xs:element name="firstName" type="xs:string"/> <xs:element name="lastName" type="xs:string" /> </xs:sequence> </xs:group> Use <xs:element name=“client"> <xs:complexType> <xs:group ref=“fullName”/>> </xs:complexType> </xs:element> New Perspectives on XML, 2nd Edition Tutorial 4 52 XP WORKING WITH NAMED ATTRIBUTE GROUPS • Attributes can be grouped into collections called named attribute groups. • This is particularly useful for attributes that you want to use with several different elements in a schema. The syntax for a named attribute group is <xs:attributeGroup name="name"> attributes </xs:attributeGroup> • Where name is the name of the attribute group and attributes is a collection of attributes assigned to the group. New Perspectives on XML, 2nd Edition Tutorial 4 53 WORKING WITH NAMED ATTRIBUTE GROUPS XP • Example: <xs:attributeGroup name=“DRInfo”> <xs:attribute name=“DRID” type=“xs:string” use=“required” /> <xs:attribute name=“dept” type=“xs:string” use=“required” /> <xs:attributeGroup> <xs:element name=“doctor” type=“deptData”/> <doctor DRID=“DR251” dept=“Pediatrics”> curt Hurley <xs:complexType name = “deptData”> <doctor> <xs:simplecontent> <xs: extension base = “string”> <xs:attributegroup ref=“DRIinfo”/> </xs:extenson> </xs:simplecontent> 54 New Perspectives on XML, 2nd Edition </xs:complexType> Tutorial 4 XP SCOPE • An item has global scope = it is a child of a root schema element – Can be referenced and reused anywhere in the schema • An item has local scope = it is nested within another element – Can be referenced and reused only within the item in which it is declared New Perspectives on XML, 2nd Edition Tutorial 4 55 XP STRUCTURING A SCHEMA • Schemas can be structured in several ways: • Flat catalog (also called salami slice) – All declarations are made globally • Russian doll – Has only one global element – Everything else is nested inside of that element • Venetian Blind Design – Similar to flat catalog, except – Creates types and references within a single global element New Perspectives on XML, 2nd Edition Tutorial 4 56 XP STRUCTURING A SCHEMA • One schema design is a Flat Catalog Design. – Sometimes called salami slice design • In this design, all element declarations are made globally. • The structure of the instance document is created by referencing the global element declarations. New Perspectives on XML, 2nd Edition Tutorial 4 57 XP FLAT CATALOG DESIGN Figure 4-36 page 192 This figure shows a Flat Catalog design New Perspectives on XML, 2nd Edition Tutorial 4 58 XP STRUCTURING A SCHEMA • Schemas can be structured in a number of ways. One structure is called a Russian Doll design. This design involves sets of nested declarations. • While this design makes it easy to associate the schema with the instance document, it can be confusing and difficult to maintain. New Perspectives on XML, 2nd Edition Tutorial 4 59 XP RUSSIAN DOLL DESIGN Figure 4-37 page 193 This figure shows a Russian Doll design New Perspectives on XML, 2nd Edition Tutorial 4 60 XP VENETIAN BLIND DESIGN • A Venetian blind design • Compromise between flat catalogs and Russian dolls – Element and attribute groups and named types are declared globally (and can be reused throughout the schema) – Elements and attributes for the instance document are local and nested New Perspectives on XML, 2nd Edition Tutorial 4 61 XP VENETIAN BLIND DESIGN Figure 4-38 page 194 New Perspectives on XML, 2nd Edition Tutorial 4 62 XP COMPARING SCHEMA DESIGNS Figure 4-39 page 195 This figure compares the three schema designs New Perspectives on XML, 2nd Edition Tutorial 4 63 PLACING A SCHEMA IN A XP NAMESPACE: TARGETING A NAMESPACE • To associate a schema with a namespace – declare the namespace prefix:xmlns="uri" – make that namespace the target of the schema. targetNamespace="uri" • Where prefix = prefix of the XML Schema namespace uri = URI of the target namespace New Perspectives on XML, 2nd Edition Tutorial 4 64 PLACING A SCHEMA IN A XP NAMESPACE: TARGETING A NAMESPACE • Example (Figure 4-40): <xs:schema xmlns:xs=http://www.ww3.org/2001/XMLSchema Declare xmlns=“http:/uhosp.edu/patients/na” targetNamespace=“http://uhosp.edu/patients/na> the namespace Make the new <xs: element name=“patients”> namespace the target <xs:complexType> of the schema <xs:sequence> <xs:element name=“patient” type=“pType” Minoccurs = “1” maxoccurs=“unbounded” /> </xs:sequence> </xs:complexType> </xs:element> … New Perspectives on XML, 2nd Edition Tutorial 4 65 APPLYING A SCHEMA TO A XP DOCUMENT WITH A NAMESPACE • To apply a schema to a document with a namespace, add the following attributes to the instance document’s root element: xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="uri schema" • Where uri is the URI of the namespace and schema is the location and name of the schema file. • All global elements and attributes from the schema must be qualified in the instance document. New Perspectives on XML, 2nd Edition Tutorial 4 66 APPLYING A SCHEMA TO A XP DOCUMENT WITH A NAMESPACE Example: <patients xmlns:xsi=http://www.W3.org/200/XMLSchema-instance xmlns=“http://uhosp.edu/patients/ns xsi:schemaLocation=http://uhosp.edu/patients/ns patvb.xsd> <patient patID = “MR890-041-02” … …. </patient> New Perspectives on XML, 2nd Edition Tutorial 4 67 INCLUDING AND IMPORTINGXP SCHEMAS • To include a schema from the same namespace, add the following element as a child of the schema element: <xs:include schemaLocation="schema" /> Where schema is the name and location of the schema file. • To import a schema from a different namespace, use the syntax <xs:import namespace="uri" schemaLocation="schema" /> • Where uri is the URI of the imported schema’s namespace and schema is the name and location of the schema file. New Perspectives on XML, 2nd Edition Tutorial 4 68 XP REFERENCING OBJECTS FROM OTHER SCHEMAS • Once a schema is imported, any objects it contains with global scope can be referenced • To reference an object from an imported schema, you must declare the namespace of the imported schema in the schema element • You can then reference the object using the ref attribute or the type attribute for customized simple and complex types New Perspectives on XML, 2nd Edition Tutorial 4 69 XP Assignment: Tutorial 4 Case Problem 1 • • • • Perform the tasks listed on pages 212 and 213 Create a CSS for the resulting jw.xml Post your work, including the CSS on your web site. End an e-mail with the subject: Tutorial 4 Case Problem 1 by <your name> to jim@larson-tech.com by Wednesday 11:50 May 1 New Perspectives on XML, 2nd Edition Tutorial 4 70