Tue 18 Oct 2005
Today I’ll attend two tutorials: XML, Web Services & PHP and PHP Extension Development.
Here are the some notes taken on the XML, Web Services & PHP Tutorial.
Speaker: Christian Wenz-
* XML:
- History of XML:
. 1998: XML 1.0 becomes w3c recommendation.
. 1999: xslt 1.0, xpath 1.0
- DTD (Document Type Definition/Declaration):
. DTD block defines which elements are allowed and which attributes they have.
Ex:
<!ELEMENT sessions (session+) >
<!ELEMENT session (title, speaker+, comments?>
- Schema:
. Proposed by the w3c to be the successor of DTD
. Schema documents are XML documents
. Data type are supported
. Use of namespaces
. Schema inheritance
. etc
but adds complexity.
There are several converters from DTD to Schema.
- XSL(T):
. eXtended Stylesheet Language Transformation
. Language for transforming XML documents in other formats (or in different XML)
. XSLT is powerfull
. XSLT can be very frustrating
* XML in PHP5:
Access XML:
- Expat:
. Open Source XML Parser
. Uses SAX approach
. Bundled with PHP (–with-xml)
. PHP 5: Based on libxml (included)
. “Event- based parser” - Xml is read in as block of data; for each element, events are triggered
. Events available for Expat: start of element, end of element, character data (cdata)
. Not always intuitive, but doable
He also pointed 3 steps to parse XML with expat, but the PHP manual explains this very well.
. To simplify a bit you can use xml_parse_into_struct();
- DOM (Document Object Model)
. Idea: XML is hierarchical; sub-elements are “further down the road”; representation as tree with a root and nodes
. Extension based on libxml in PHP4 (–with-dom), libxml2 in PHP5 (built-in)
. It can consume a lot of memory, because the whole document is in memory while in SAX you only have blokcs of the document in memory.
. Changes in PHP5: OOP access, studlyCaps. Now everything is named after the w3c specification, but existing scripts break.
XSLT with DOM XML in 4 steps:
1. Read in XML
$xml = new DOMDocument()
$xml->load(”sessions.xml”);
2. Read in XSL
$xsl = new DOMDocument()
$xsl->load(”sessions.xsl”);
3 . Transform
$p = new XSLTProcessor();
$p->importStyleSheet($xsl)
4. Print results
$result = $p->transformToXML($xml);
- Validating XML: validate() (against DTD), schemaValidate(), relaxNGValidate();
- SimpleXML
. KISS
. Load XML and have object oriented access to data
. Is part of PHP5
. It can be used with DOM
Samples:
. He presented some samples using SimpleXML to build XML from reading EXIF from images
. XMLReader (.NET) / PHP 5.1
. XMLWritter:
. Fast writting XML
. Forwarding only
. Not default in PHP5.1
SVG: XML to represent Vector Graphics. Firefox 1.5 supports it but not completely. Widely used in Asia for Cell Phones.
* WEBSERVICES:
. idea: Machine 2 machine communication
. to be honest: no new idea
. but: Now it’s standardized
. big hype, thanks to Microsoft and IBM
. .NET makes Web Services very easy
. But: PHP closes the gap, step by step
Currently there are 14 PEAR packages (soon 15)
- REST (Representational State Transfer)
. based on resources accessible via URL
. based on 2000 dissertation by Roy Fielding (co-author of the HTTP specification)
- Buzzword bingo:
. XML-RPC . UDDI
. SOAP . DISCO
. WSDL . REST
80% of Amazon Webservices users use REST
- XML-RPC:
. Designed by Dave Winer from UserLand
. MS helped w/specification but stayed in the background
. Idea: Remote Procedure call via XML and HTTP
. XML-RPC requires PEAR
- SOAP:
. Simple Object Access Protocol
. but: neither simple nor has anything to do with access protocol
. Packages:
- SOAPx4: The “father” of all
- NuSOAP
- PEAR::SOAP: also rewrite of SOAPx4e, actively maintained
- ext/SOAP: official C extension, included in PHP5
- WSDL:
. one more acronym
. offers description for a web service
. veeery complex
. .NET does this automagically
. Nowadays PHP can do that too, but not PHP Soap. Use NuSOAP or PEAR::SOAP.

