xml and web services

47
XML and Web Services CPTR304:Internet Authoring Henry Osborne

Upload: henry-osborne

Post on 20-Jan-2015

265 views

Category:

Education


4 download

DESCRIPTION

XML and Web services are the very foundations of many modern Web applications.

TRANSCRIPT

Page 1: XML and Web Services

XML and Web ServicesCPTR304:Internet Authoring

Henry Osborne

Page 2: XML and Web Services

2

eXtensible Markup Languagesubset of Standard Generalized Markup Language (SGML)

design goal is to be as powerful and flexible as SGML with less complexity

XHTML is a reformulation of HTML 4 as XML

Page 3: XML and Web Services

3

XML Basic Principles

Entity: a named unit of storageElement: data object that is part of an XML documentDocument Type Declaration: A set of instructions that describes the accepted structure and content of an XML file

Well-formed: An XML document is considered well-formed when it contains a single root level element

Valid: An XML document is valid when it is both well-formed and obeys a referenced DTD

Page 4: XML and Web Services

4

A well-formed XML document can be as simple as:<?xml version="1.0"?><message>Hello, World!</message>

Here is an example of a valid version of the same document:<?xml version="1.0"?><!DOCTYPE message SYSTEM "message.dtd"><message>Hello, World!</message>

Page 5: XML and Web Services

5

In this case, an external DTD is loaded from local storage, but the declarations may also be listed locally:<?xml version="1.0"?><!DOCTYPE message [<!ELEMENT message (#PCDATA)>]><message>Hello, World!</message>

Page 6: XML and Web Services

6

Creating an XML Document Creating XML is a free-form process, without any rigid constraints except those that define a well-formed document

Names of tags, attributes, and the order in which they appear are all up to the creator of the XML document

XML is a language that provides the means for describing data Each tag and attribute should consist of a descriptive name for the data contained within it

XML lends itself well to the transportation of data between disparate systems

Page 7: XML and Web Services

7

Book dataTitle Author Publisher ISBN

The Moon Is a Harsh Mistress R. A. Heinlein Orb 0312863551

Fahrenheit 451 R. Bradbury Del Rey 0345342968

The Silmarillion J.R.R. Tolkien G Allen & Unwin 0048231398

1984 G. Orwell Signet 0451524934

Frankenstein M. Shelley Bedford 031219126X

Page 8: XML and Web Services

8

XML Representation<?xml version="1.0"?><library><book isbn="0345342968">

<title>Fahrenheit 451</title><author>R. Bradbury</author><publisher>Del Rey</publisher>

</book><book isbn="0048231398">

<title>The Silmarillion</title><author>J.R.R. Tolkien</author><publisher>G. Allen & Unwin</publisher>

</book><book isbn="0451524934">

<title>1984</title>

<author>G. Orwell</author><publisher>Signet</publisher>

</book><book isbn="031219126X">

<title>Frankenstein</title><author>M. Shelley</author><publisher>Bedford</publisher>

</book><book isbn="0312863551">

<title>The Moon Is a Harsh Mistress</title><author>R. A. Heinlein</author><publisher>Orb</publisher>

</book></library>

Page 9: XML and Web Services

9 SimpleXML

Page 10: XML and Web Services

10

Parsing XML Documents

parsing is done by SimpleXML internally using the DOM parsing model

XML document must be well-formed, or SimpleXML will emit warnings and fail to parse it

SimpleXML supports only version 1.0 documentsAll objects created by SimpleXML are instances of the SimpleXMLElement class

Page 11: XML and Web Services

11

Procedural OOP

// Load an XML string$xmlstr = file_get_contents(’library.xml’);$library = simplexml_load_string($xmlstr);

// Load an XML file$library = simplexml_load_file(’library.xml’);

// Load an XML string$xmlstr = file_get_contents(’library.xml’);$library = new SimpleXMLElement($xmlstr);

// Load an XML file$library = new SimpleXMLElement(’library.xml’, NULL, true);

Page 12: XML and Web Services

12

Accessing Children and Attributes

$library = new SimpleXMLElement(’library.xml’, NULL, true);

foreach ($library->book as $book)

{

echo $book[’isbn’] . "\n";

echo $book->title . "\n";

echo $book->author . "\n";

echo $book->publisher . "\n\n";

}

Page 13: XML and Web Services

13

Accessing Children and Attributesforeach ($library->children() as $child)

{

echo $child->getName() . ":\n";

foreach ($child->attributes() as $attr) // Get attributes of this element

{

echo ’ ’ . $attr->getName() . ’: ’ . $attr . "\n";

}

foreach ($child->children() as $subchild) // Get children

{

echo ’ ’ . $subchild->getName() . ’: ’ . $subchild . "\n";

}

echo "\n";

}

Page 14: XML and Web Services

14

XPath Queries

W3C standardized language that is used to access and search XML documents

Used extensively in Extensible Stylesheet Language Transformations (XSLT) and forms the basis of XML Query (XQuery) and XML Pointer (XPointer)

XPath can be a very complex language

Page 15: XML and Web Services

15

// Search the root element

$results = $library->xpath(’/library/book/title’);

foreach ($results as $title)

{

echo $title . "\n";

}

// Search the first child element

$results = $library->book[0]->xpath(’title’);

foreach ($results as $title)

{

echo $title . "\n";

}

Page 16: XML and Web Services

16

Modifying XML Documents

PHP 5.1.3 introduced two new methods to SimpleXML that now give it the power it needs to create and modify XML documents:SimpleXMLElement::addChild()SimpleXMLElement::addAttribute()

Page 17: XML and Web Services

17

$book = $library->addChild(’book’);

$book->addAttribute(’isbn’, ’0812550706’);

$book->addChild(’title’, "Ender’s Game");

$book->addChild(’author’, ’Orson Scott Card’);

$book->addChild(’publisher’, ’Tor Science Fiction’);

header(’Content-type: text/xml’);

echo $library->asXML();

Page 18: XML and Web Services

18

Namespaces

allows a provider to associate certain element and attribute names with namespaces identified by URIs

This qualifies the elements and attributes, avoiding any potential naming conflicts when two elements of the same name exist yet contain different types of data

Page 19: XML and Web Services

19

<?xml version="1.0"?>

<library xmlns="http://example.org/library"

xmlns:meta="http://example.org/book-meta"

xmlns:pub="http://example.org/publisher"

xmlns:foo="http://example.org/foo">

<book meta:isbn="0345342968">

<title>Fahrenheit 451</title>

<author>Ray Bradbury</author>

<pub:publisher>Del Rey</pub:publisher>

</book>

</library>

Page 20: XML and Web Services

20 DOM

Page 21: XML and Web Services

21

Loading and Saving XML DocumentsThere are two ways to import documents into a DOM tree; the first is by loading them from a file:

$dom = new DomDocument();

$dom->load("library.xml");

Alternatively, you can load a document from a string—which is handy when using

REST Web services:

$dom = new DomDocument();

$dom->loadXML($xml);

Page 22: XML and Web Services

22

Just as simply, you can save XML documents using:DomDocument::save() (to a file),DomDocument::saveXML() (to a string),DomDocument::saveHTML() (also to a string, but saves an HTML document instead of an XML file), and

DomDocument:saveHTMLFile() (to a file in HTML format).

Page 23: XML and Web Services

23

$dom = new DomDocument();

$dom->load(’library.xml’);

// Do something with our XML here

// Save to file

if ($use_xhtml) {

$dom->save(’library.xml’);

} else {

$dom->saveHTMLFile(’library.xml’);

}

// Output the data

if ($use_xhtml) {

echo $dom->saveXML();

} else {

echo $dom->saveHTML();

}

Page 24: XML and Web Services

24

XPath Queries

$dom = new DomDocument();

$dom->load("library.xml");

$xpath = new DomXPath($dom);

$xpath->registerNamespace("lib", "http://example.org/library");

$result = $xpath->query("//lib:title/text()");

foreach ($result as $book) {

echo $book->data;

}

Page 25: XML and Web Services

25

Modifying XML Documents$dom = new DomDocument();

$dom->load("library.xml");

$book = $dom->createElement("book");

$book->setAttribute("meta:isbn", "0973589825");

$title = $dom->createElement("title");

$text = $dom->createTextNode("php|architect’s Guide to PHP Design Patterns");

$title->appendChild($text);

$book->appendChild($title);

Page 26: XML and Web Services

26

Modifying XML Documents$author = $dom->createElement("author","Jason E. Sweat");

$book->appendChild($author);

$publisher = $dom->createElement("pub:publisher", "Marco Tabini &amp; Associates , Inc.");

$book->appendChild($publisher);

$dom->documentElement->appendChild($book);

Page 27: XML and Web Services

27

Moving Data

$dom = new DOMDocument();

$dom->load("library.xml");

$xpath = new DomXPath($dom);

$xpath->registerNamespace("lib", "http://example.org/library");

$result = $xpath->query("//lib:book");

$result->item(1)->parentNode->insertBefore($result->item(1), $result->item(0));

Page 28: XML and Web Services

28

Moving Data

$dom = new DOMDocument();

$dom->load("library.xml");

$xpath = new DomXPath($dom);

$xpath->registerNamespace("lib", "http://example.org/library");

$result = $xpath->query("//lib:book");

$result->item(1)->parentNode->appendChild($result->item(0));

Page 29: XML and Web Services

29

Duplicating a Node

$dom = new DOMDocument();

$dom->load("library.xml");

$xpath = new DomXPath($dom);

$xpath->registerNamespace("lib", "http://example.org/library");

$result = $xpath->query("//lib:book");

$clone = $result->item(0)->cloneNode();

$result->item(1)->parentNode->appendChild($clone);

Page 30: XML and Web Services

30

Working with Namespaces$dom = new DomDocument();

$node = $dom->createElement(’ns1:somenode’);

$node->setAttribute(’ns2:someattribute’, ’somevalue’);

$node2 = $dom->createElement(’ns3:anothernode’);

$node->appendChild($node2);

// Set xmlns: *attributes

$node->setAttribute(’xmlns:ns1’, ’http://example.org/ns1’);

$node->setAttribute(’xmlns:ns2’, ’http://example.org/ns2’);

$node->setAttribute(’xmlns:ns3’, ’http://example.org/ns3’);

$dom->appendChild($node);

echo $dom->saveXML();

Page 31: XML and Web Services

31

Working with Namespaces$dom = new DomDocument();

$node = $dom->createElementNS(’http://example.org/ns1’, ’ns1:somenode’);

$node->setAttributeNS(’http://example.org/ns2’, ’ns2:someattribute’, ’somevalue’

);

$node2 = $dom->createElementNS(’http://example.org/ns3’, ’ns3:anothernode’);

$node3 = $dom->createElementNS(’http://example.org/ns1’, ’ns1:someothernode’);

$node->appendChild($node2);

$node->appendChild($node3);

$dom->appendChild($node);

echo $dom->saveXML();

Page 32: XML and Web Services

32

This results in the following output:

<?xml version="1.0"?><ns1:somenode xmlns:ns1="http://example.org/ns1"

xmlns:ns2="http://example.org/ns2"xmlns:ns3="http://example.org/ns3"

ns2:someattribute="somevalue"><ns3:anothernode xmlns:ns3="http://example.org/ns3"/><ns1:someothernode/>

</ns1:somenode>

Page 33: XML and Web Services

33

Interfacing with SimpleXML

You can import SimpleXML objects for use with DOM by using dom_import_simplexml()

$sxml = simplexml_load_file(’library.xml’);

$node = dom_import_simplexml($sxml);

$dom = new DomDocument();

$dom->importNode($node, true);

$dom->appendChild($node);

Page 34: XML and Web Services

34

Interfacing with SimpleXML

The opposite is also possible, by using the aptly-named simplexml_import_dom() function

$dom = new DOMDocument();

$dom->load(’library.xml’);

$sxe = simplexml_import_dom($dom);

echo $sxe->book[0]->title;

Page 35: XML and Web Services

35 Web Services

Page 36: XML and Web Services

36

Web Services

noted for being extensible and interoperablecharacterized by their use of XML to communicate between and among disparate systems

three popular types of Web Services in use today:XMLRPCSOAP (the successor to web services!XML-RPC), andREST

Page 37: XML and Web Services

37

XML-RPC

a remote procedure call (RPC) protocol which uses XML to encode its calls and HTTP as a transport mechanism

created in 1998 by Dave Winer of UserLand Software and Microsoft

As new functionality was introduced, the standard evolved into what is now SOAP.

Page 38: XML and Web Services

38

XML-RPCAn example of a typical XML-RPC request:

<?xml version="1.0"?>

<methodCall>

<methodName>examples.getStateName</methodName>

<params>

<param>

<value><i4>40</i4></value>

</param>

</params>

</methodCall>

Page 39: XML and Web Services

39

SOAP

previously an acronym that stood for Simple Object Access Protocol

powerful tool for communication between disparate systems

allows the definition and exchange of complex data types in both the request and response

providing a mechanism for various messaging patterns, the most common of which is the Remote Procedure Call (RPC)

Page 40: XML and Web Services

40

Accessing SOAP-based Web ServicesSOAP request made to the Google Web Search service:try

{

$client = new SoapClient(’http://api.google.com/GoogleSearch.wsdl’);

$results = $client->doGoogleSearch($key, $query, 0, 10, FALSE, ’’, FALSE, ’’, ’’,

’’);

foreach ($results->resultElements as $result)

{

echo ’<a href="’ . htmlentities($result->URL) . ’">’;

echo htmlentities($result->title, ENT_COMPAT, ’UTF-8’);

echo ’</a><br/>’;

}

}

catch (SoapFault $e)

{

echo $e->getMessage();

}

Page 41: XML and Web Services

41

Debugging

$client = new

SoapClient(’http://api.google.com/GoogleSearch.wsdl

’, array(’trace’ => 1));

$results = $client->doGoogleSearch($key, $query, 0,

10, FALSE, ’’, FALSE, ’’, ’’, ’’);

echo $client->__getLastRequestHeaders();

echo $client->__getLastRequest();

Page 42: XML and Web Services

42

Creating SOAP-based Web Servicesclass MySoapServer

{

public function getMessage()

{

return ’Hello, World!’;

}

public function addNumbers($num1, $num2)

{

return $num1 + $num2;

}

}

Page 43: XML and Web Services

43

Creating SOAP-based Web Services$options = array(’uri’ => ’http://example.org/soap/server/’);

$server = new SoapServer(NULL, $options);

$server->setClass(’MySoapServer’);

$server->handle();

Page 44: XML and Web Services

44

Creating SOAP-based Web Services$options = array(

’location’ => ’http://example.org/soap/server/server.php’,

’uri’ => ’http://example.org/soap/server/’

);

$client = new SoapClient(NULL, $options);

echo $client->getMessage() . "\n";

echo $client->addNumbers(3, 5) . "\n";

Page 45: XML and Web Services

45

REST

Representational State TransferWeb service architectural style in which the focus is on the presence of resources in the system

Each resource must be identified by a global identifier—a URI

Clients communicate with the REST service by HTTP, and the server responds with a representation of the resource

Representation is often in the form of HTML or XML

Page 46: XML and Web Services

46

$u = ’username’;

$p = ’password’;

$fooTag = "https://{$u}:{$p}@api.del.icio.us/v1/posts/all?tag=foo";

$bookmarks = new SimpleXMLElement($fooTag, NULL, true);

foreach ($bookmarks->post as $bookmark)

{

echo ’<a href="’ . htmlentities($bookmark[’href’]) . ’">’;

echo htmlentities($bookmark[’description’]);

echo "</a><br />\n";

}

Page 47: XML and Web Services

XML and Web Services