Presentation is loading. Please wait.

Presentation is loading. Please wait.

XMLII XSchema XSchema XQuery XQuery. XML Schema XML Schema is a more sophisticated schema language which addresses the drawbacks of DTDs. Supports XML.

Similar presentations


Presentation on theme: "XMLII XSchema XSchema XQuery XQuery. XML Schema XML Schema is a more sophisticated schema language which addresses the drawbacks of DTDs. Supports XML."— Presentation transcript:

1 XMLII XSchema XSchema XQuery XQuery

2 XML Schema XML Schema is a more sophisticated schema language which addresses the drawbacks of DTDs. Supports XML Schema is a more sophisticated schema language which addresses the drawbacks of DTDs. Supports Typing of values Typing of values E.g. integer, string, etc E.g. integer, string, etc Also, constraints on min/max values Also, constraints on min/max values User-defined, complex types User-defined, complex types Many more features, including Many more features, including uniqueness and foreign key constraints, inheritance uniqueness and foreign key constraints, inheritance XML Schema is itself specified in XML syntax, unlike DTDs XML Schema is itself specified in XML syntax, unlike DTDs More-standard representation, but verbose More-standard representation, but verbose XML Scheme is integrated with namespaces XML Scheme is integrated with namespaces BUT: XML Schema is significantly more complicated than DTDs. BUT: XML Schema is significantly more complicated than DTDs.

3 XML Schema Version of Bank DTD http://www.w3.org/2001/XMLSchema </xs:element> ….. definitions of customer and depositor …. </xs:sequence></xs:complexType></xs:schema>

4 XML Schema Version of Bank DTD Choice of “xs:” was ours -- any other namespace prefix could be chosen Choice of “xs:” was ours -- any other namespace prefix could be chosen Element “bank” has type “BankType”, which is defined separately Element “bank” has type “BankType”, which is defined separately xs:complexType is used later to create the named complex type “BankType” xs:complexType is used later to create the named complex type “BankType” Element “account” has its type defined in-line Element “account” has its type defined in-line

5 More features of XML Schema Attributes specified by xs:attribute tag: Attributes specified by xs:attribute tag: adding the attribute use = “required” means value must be specified adding the attribute use = “required” means value must be specified

6 Querying and Transforming XML Data Translation of information from one XML schema to another Translation of information from one XML schema to another Querying on XML data Querying on XML data Above two are closely related, and handled by the same tools Above two are closely related, and handled by the same tools Standard XML querying/translation languages Standard XML querying/translation languages XPath XPath Simple language consisting of path expressions Simple language consisting of path expressions XSLT XSLT Simple language designed for translation from XML to XML and XML to HTML Simple language designed for translation from XML to XML and XML to HTML XQuery XQuery An XML query language with a rich set of features An XML query language with a rich set of features

7 XQuery XQuery is a general purpose query language for XML data XQuery is a general purpose query language for XML data Currently being standardized by the World Wide Web Consortium (W3C) Currently being standardized by the World Wide Web Consortium (W3C) The textbook description is based on a January 2005 draft of the standard. The final version may differ, but major features likely to stay unchanged. The textbook description is based on a January 2005 draft of the standard. The final version may differ, but major features likely to stay unchanged. XQuery is derived from the Quilt query language, which itself borrows from SQL, XQL and XML-QL XQuery is derived from the Quilt query language, which itself borrows from SQL, XQL and XML-QL XQuery uses a for … let … where … order by …result … syntax for  SQL from where  SQL where order by  SQL order by XQuery uses a for … let … where … order by …result … syntax for  SQL from where  SQL where order by  SQL order by result  SQL select let allows temporary variables, and has no equivalent in SQL result  SQL select let allows temporary variables, and has no equivalent in SQL

8 FLWOR Syntax in XQuery For clause uses XPath expressions, and variable in for clause ranges over values in the set returned by XPath For clause uses XPath expressions, and variable in for clause ranges over values in the set returned by XPath Simple FLWOR expression in XQuery Simple FLWOR expression in XQuery find all accounts with balance > 400, with each result enclosed in an.. tag for $x in /bank-1/customer/account let $acctno := $x/account_number/text() find all accounts with balance > 400, with each result enclosed in an.. tag for $x in /bank-1/customer/account let $acctno := $x/account_number/text() where $x/balance > 400 return { $acctno } where $x/balance > 400 return { $acctno } Items in the return clause are XML text unless enclosed in {}, in which case they are evaluated Items in the return clause are XML text unless enclosed in {}, in which case they are evaluated Let clause not really needed in this query, and selection can be done In XPath. Query can be written as: Let clause not really needed in this query, and selection can be done In XPath. Query can be written as: for $x in /bank-1/customer/account[balance>400] return { $x/account_number }

9 Joins Joins are specified in a manner very similar to SQL for $a in /bank/account, Joins are specified in a manner very similar to SQL for $a in /bank/account, $c in /bank/customer, $c in /bank/customer, $d in /bank/depositor $d in /bank/depositor where $a/account_number = $d/account_number and $c/customer_name = $d/customer_name where $a/account_number = $d/account_number and $c/customer_name = $d/customer_name return { $c $a } return { $c $a } The same query can be expressed with the selections specified as XPath selections: The same query can be expressed with the selections specified as XPath selections: for $a in /bank/account $c in /bank/customer $d in /bank/depositor[ account_number = $a/account_number and customer_name = $c/customer_name ] for $a in /bank/account $c in /bank/customer $d in /bank/depositor[ account_number = $a/account_number and customer_name = $c/customer_name ] return { $c $a } return { $c $a }

10 Nested Queries The following query converts data from the flat structure for bank information into the nested structure used in bank-1 The following query converts data from the flat structure for bank information into the nested structure used in bank-1 { { for $c in /bank/customer for $c in /bank/customer return return { $c/* } { $c/* } { for $d in /bank/depositor[customer_name = $c/customer_name], { for $d in /bank/depositor[customer_name = $c/customer_name], $a in /bank/account[account_number=$d/account_number] $a in /bank/account[account_number=$d/account_number] return $a } return $a } } } $c/* denotes all the children of the node to which $c is bound, without the enclosing top-level tag $c/* denotes all the children of the node to which $c is bound, without the enclosing top-level tag $c/text() gives text content of an element without any subelements / tags $c/text() gives text content of an element without any subelements / tags

11 Sorting in XQuery The order by clause can be used at the end of any expression. E.g. to return customers sorted by name for $c in /bank/customer order by $c/customer_name return { $c/* } The order by clause can be used at the end of any expression. E.g. to return customers sorted by name for $c in /bank/customer order by $c/customer_name return { $c/* } Use order by $c/customer_name to sort in descending order Use order by $c/customer_name to sort in descending order Can sort at multiple levels of nesting (sort by customer_name, and by account_number within each customer) Can sort at multiple levels of nesting (sort by customer_name, and by account_number within each customer) { for $c in /bank/customer { for $c in /bank/customer order by $c/customer_name return { $c/* } { for $d in /bank/depositor[customer_name=$c/customer_name], $a in /bank/account[account_number=$d/account_number] } { for $d in /bank/depositor[customer_name=$c/customer_name], $a in /bank/account[account_number=$d/account_number] } order by $a/account_number return $a/* return $a/* } }

12 Oracle XML-SQL Utility Transform data from o-r tables/views into XML Transform data from o-r tables/views into XML Extract relevant data from an XML document Extract relevant data from an XML document Insert data into database tables Insert data into database tables Using a canonical mapping Using a canonical mapping Available as Available as Java command-line front end Java command-line front end Java API Java API PL/SQL API PL/SQL API

13 SQL-to-XML Mapping For each SQL query Q, will get the XML file with the following DTD For each SQL query Q, will get the XML file with the following DTD <!DOCTYPE ROWSET[ <!DOCTYPE ROWSET[ ]> ]> If some attribute is of nested table type, then the element will have sub-element corresponding to the attributes of the nested table If some attribute is of nested table type, then the element will have sub-element corresponding to the attributes of the nested table

14 Example of SQL-to-XML We first create a table country We first create a table country CREATE TABLE country CREATE TABLE country (name char(50), (name char(50), region char(60), region char(60), area decimal(10), area decimal(10), population decimal(11), population decimal(11), gdp decimal(14), gdp decimal(14), primary key (name) primary key (name) ); );

15 Example of SQL-to-XML CREATE TYPE CountriesType AS OBJECT ( country_name char(50), country_name char(50), area decimal(10), area decimal(10), population decimal(11), population decimal(11), gdp decimal(14) gdp decimal(14));/ CREATE TYPE CountriesTableType AS TABLE OF CountriesType; / CREATE TABLE Regions ( region_name char(60), region_name char(60), countries CountriesTableType, countries CountriesTableType, area decimal(10), area decimal(10), population decimal(11), population decimal(11), gdp decimal(14) gdp decimal(14)) NESTED TABLE Countries STORE AS CountriesTable;

16 Example of SQL-to-XML INSERT INTO Regions(region_name,area,population,gdp) SELECT region, SUM(area), SUM(population), SUM(gdp) SELECT region, SUM(area), SUM(population), SUM(gdp) FROM country FROM country GROUP BY region; GROUP BY region; UPDATE Regions SET countries = CAST(MULTISET( CAST(MULTISET( SELECT * SELECT * FROM country FROM country WHERE region = Regions.region_name) WHERE region = Regions.region_name) AS CountriesTableType ); AS CountriesTableType );

17 Example of SQL-to-XML Root – ROWSET element Root – ROWSET element Each row – ROW element Each row – ROW element Each simple attribute – sub-element of ROW element Each simple attribute – sub-element of ROW element Each nested table attribute – sub-element with sub-element Each nested table attribute – sub-element with sub-element Each ROW element has a num attribute Each ROW element has a num attribute Null values are left out Null values are left out

18 XMLType A system defined object A system defined object With built in member functions With built in member functions Create, extract, and index XML data Create, extract, and index XML data Can be used as column type Can be used as column type

19 Define a table with XMLType CREATE TABLE addrbook( name varchar(20), name varchar(20), card SYS.XMLTYPE, card SYS.XMLTYPE, creationDate Date creationDate Date); Address book has a name, a creationData, and a XMLType attribute to contain the contact information structured in XML format Address book has a name, a creationData, and a XMLType attribute to contain the contact information structured in XML format

20 XMLType Insertion Use member function createXML(‘xml data’); Example: Use member function createXML(‘xml data’); Example: insert into addrbook values ('Roger', sys.XMLType.createXML( ('Roger', sys.XMLType.createXML( ' ' roger12@yahoo.com roger12@yahoo.com 111-5678 111-5678 123 Main Street 123 Main Street Atlanta Atlanta GA GA 33333 33333 '), sysdate); '), sysdate); Non-well-formed XML will be rejected

21 Querying XML Data Use member function: Use member function: getClobVal CLOB (Character Large Object) getClobVal CLOB (Character Large Object) getStringVal getStringVal GetNumberVal GetNumberVal Extract(‘Xpath expression’) Extract(‘Xpath expression’) Example: Example: select a.card.extract('/ACARD').getstringVal() from addrbook a where name = 'Roger';


Download ppt "XMLII XSchema XSchema XQuery XQuery. XML Schema XML Schema is a more sophisticated schema language which addresses the drawbacks of DTDs. Supports XML."

Similar presentations


Ads by Google