60
XML VS. THE NEW KIDS ON THE BLOCK

XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

Embed Size (px)

DESCRIPTION

Presentation given at PHP Benelux Conference 2011

Citation preview

Page 1: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

XMLVS.

THE NEW KIDS ON THE BLOCK

Page 2: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

David Zülke

Page 3: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

David Zuelke

Page 4: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)
Page 5: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

http://en.wikipedia.org/wiki/File:München_Panorama.JPG

Page 6: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

Founder

Page 8: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

Lead Developer

Page 11: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

TODAY'S MENU

• XML (and where it took a wrong turn)

• HTML 5 (and why it makes me very, very angry)

• JSON (and why it's not always as useful as you may think)

• YAML (and why it makes my eyes bleed)

Page 12: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

but first

Page 13: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

I'd like to hear from you, dear audience

Page 14: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

what do you love, hate, adore or loathe with a passion?

Page 15: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

XMLeXtensible Markup Language

Page 16: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

"extensible" mostly refers to the Namespaces concept

Page 17: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

VALIDATION

• XML Schema (validates the grammar of a document)

• RELAX NG (like XML Schema, just full of win)

• Except it's so awesome it sucks at reporting errors :(

• Schematron (validates the semantics of a document)

•DTD (RRRRRRRAAAAAAAAAAAAAAAAAGGGGEEEE)

Page 18: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

OTHER GOODIES

• XPath and XQuery for querying documents

• XPath is an expression syntax, XQuery a full query language

• XSLT to transform documents to XML, HTML, text, ...

•Makes heavy use of XPath

• XIncludes

• Allow re-use of content within and across documents

Page 19: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

READING AND WRITING

• Push Parsing, uses events to notify app during parsing

• Example: SAX

• Pull Parsing, allows app to retrieve or skip elements

• Example: PHP's ext/xmlreader

•DOM, constructs an object representation of the tree

• Example: DOM (duh)

Page 20: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

but most importantly

Page 21: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

Mixed Content!

Page 22: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

<?xml  version="1.0"  encoding="utf-­‐8"?><products  xmlns="http://acme.com/shop/products">    <product  id="123">        <name>Bacon</name>        <price>5.99</price>    </product></products>

Page 23: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

<?xml  version="1.0"  encoding="utf-­‐8"?><products  xmlns="http://acme.com/shop/products">    <product  id="123">        <name>Bacon</name>        <price>5.99</price>        OMNOMNOM  Bacon    </product></products>

Page 24: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

and you can add elements without changing the structure

Page 25: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

<?xml  version="1.0"  encoding="utf-­‐8"?><products  xmlns="http://acme.com/shop/products">    <product  id="123">        <name>Bacon</name>        <price>5.99</price>    </product></products>

Page 26: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

<?xml  version="1.0"  encoding="utf-­‐8"?><products  xmlns="http://acme.com/shop/products">    <product  id="123">        <name  xml:lang="en">Bacon</name>        <name  xml:lang="de">Speck</name>        <price>5.99</price>    </product></products>

Page 27: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

<?xml  version="1.0"  encoding="utf-­‐8"?><products  xmlns="http://acme.com/shop/products">    <product  id="123">        <name  xml:lang="en">Bacon</name>        <name  xml:lang="de">Speck</name>        <price>5.99</price>        <link  rel="category"  href="..."  />    </product></products>

Page 28: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

XML: doing it right

Page 29: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

<?xml  version="1.0"  encoding="utf-­‐8"  standalone="yes"?><search>    <total_results>6</total_results>    <items_per_page>2</items_per_page>    <start_index>1</start_index>    <link  href="http://openapi.lovefilm.com/catalog/games?start_index=1&amp;items_per_page=2&amp;term=old"                rel="self"  title="self"/>    <link  href="http://openapi.lovefilm.com/catalog/games?start_index=3&amp;items_per_page=2&amp;term=old"                rel="next"  title="next"/>    <link  href="http://openapi.lovefilm.com/catalog/games?start_index=5&amp;items_per_page=2&amp;term=old"                rel="last"  title="last"/>    <catalog_title>        <can_rent>true</can_rent>        <release_date>2003-­‐09-­‐12</release_date>        <title  full="Star  Wars:  Knights  of  the  Old  Republic"  clean="Star  Wars:  Knights  of  the  Old  Republic"/>        <id>http://openapi.lovefilm.com/catalog/title/59643</id>        <adult>false</adult>        <number_of_ratings>574</number_of_ratings>        <rating>4</rating>        <category  scheme="http://openapi.lovefilm.com/categories/catalog"  term="games"/>        <category  scheme="http://openapi.lovefilm.com/categories/format"  term="Xbox"/>        <category  scheme="http://openapi.lovefilm.com/categories/genres"  term="Adventure"/>        <category  scheme="http://openapi.lovefilm.com/categories/genres"  term="Role-­‐playing"/>        <category  scheme="http://openapi.lovefilm.com/categories/certificates/bbfc"  term="TBC"/>        <link  href="http://openapi.lovefilm.com/catalog/title/59643/synopsis"                    rel="http://schemas.lovefilm.com/synopsis"  title="synopsis"/>        <link  href="http://openapi.lovefilm.com/catalog/title/59643/reviews"                    rel="http://schemas.lovefilm.com/reviews"  title="reviews"/>        <link  href="http://www.lovefilm.com/product/59643-­‐Star-­‐Wars-­‐Knights-­‐of-­‐the-­‐Old-­‐Republic.html?cid=LFAPI"                    rel="alternate"  title="web  page"/>    </catalog_title></search>

Page 30: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

which brings me to...

Page 31: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

HATEOAS AND HYPERMEDIAThe Main Ingredient For Your REST API

Page 32: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

XML: doing it wrong

Page 33: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

<?xml  version="1.0"  encoding="UTF-­‐8"?><!DOCTYPE  plist  PUBLIC  "-­‐//Apple  Computer//DTD  PLIST  1.0//EN"    "http://www.apple.com/DTDs/PropertyList-­‐1.0.dtd"><plist  version="1.0"><dict>        <key>DefaultProfileChoices</key>        <dict>                <key>AC  Power</key>                <integer>2</integer>                <key>Battery  Power</key>                <integer>1</integer>                <key>UPS  Power</key>                <integer>1</integer>        </dict>        <key>SystemProfileDefaults</key>        <array><!-­‐-­‐  Profile  0  -­‐-­‐>                <dict><!-­‐-­‐  AC  Power  -­‐  unused  -­‐-­‐>                        <key>AC  Power</key>                        <dict>                            <!-­‐-­‐  ...  -­‐-­‐>                        </dict>                </dict>        </array></dict></plist>

Page 34: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

but pleasedo not serialize objects to XML

(I'm looking at you, SOAP)

Page 35: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

HTML 5Such a mess :(

Page 36: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

HTML 5

•Neither SGML nor XML

• so browser vendors need to write new (inefficient) parsers

•Does not have a DTD anymore

• how could it, given how it's not SGML...

• Completely idiotic stuff like data-* attributes

• And they're even proud of it...

Page 37: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

<li  class="user"          data-­‐name="John  Resig"  data-­‐city="Boston"          data-­‐lang="js"  data-­‐food="Bacon">    <b>John  says:</b>  <span>Hello,  how  are  you?</span></li>

Page 38: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

but that's already possible in XML!

Page 39: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

<li  class="user"          xmlns:myapp="http://myapp.com/v1"          myapp:name="John  Resig"  myapp:city="Boston"          myapp:lang="js"  myapp:food="Bacon">    <b>John  says:</b>  <span>Hello,  how  are  you?</span></li>

Page 40: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

also

Page 41: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

they dropped support for PUT & DELETE in forms

Page 42: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

JSONJavaScript Object Notation

Page 43: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

JSON KEY FEATURES

•Quite efficient, simple, universally supported in many languages

• Very good for serializing objects

• Built-in types, do not need explicit declaration

•No schemas

•No mixed content

Page 44: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

win: store arbitrary keys and values

Page 45: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

{        "_id"  :  "bc2a41170621c326ec68382f846d5764",        "_rev"  :  "2612672603",        "item"  :  "orange",        "prices"  :  {                "Fresh  Mart"  :  1.99,                "Price  Max"  :  3.19,                "Citrus  Circus"  :  1.09        }}

Page 46: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

fail: use it as query language for your pile of crap database

Page 47: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

{  foo:  "bar"  }

{  x  :  3,  y  :  "foo"  }

{  $or  :  [  {  a  :  1  }  ,  {  b  :  2  }  ]  }

{  j  :  {  $ne:  3  },  k  :  {  $gt:  10  }  }

{  x  :  3  },  {  z  :  1  }

{  j  :  {  $in  :  [2,4,6]  }  }

{  "author.name"  :  "joe"  }

{  "addresses.city"  :  "London"  }

Page 48: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

YAMLYet Another Markup Language

Page 49: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

YAMLYet Another Markup LanguageYAML Ain't Markup Language

Page 50: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

recursive acronyms are cool

Page 51: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

YAML also was cool at some point

Page 52: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

a simple markup language, perfect for configuration files

Page 53: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

autoload:    #  plugins    plugins_lib:        name:                      plugins  lib        path:                      %SF_PLUGINS_DIR%/*/lib        recursive:            true        exclude:                []        

   plugins_module_lib:        name:                      plugins  module  lib        path:                      %SF_PLUGINS_DIR%/*/modules/*/lib        prefix:                  2        recursive:            true        exclude:                []

   #  project    project:        name:                      project        path:                      %SF_LIB_DIR%        recursive:            true        exclude:                [model,  symfony,  deprecated]

Page 54: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

but then...

Page 55: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

foo:  |          -­‐-­‐-­‐        foo:  bar        -­‐-­‐-­‐        yo:  bazbar:  |          fooness        clipped:  |        This  has  one  newline.

same  as  "clipped"  above:  "This  has  one  newline.\n"

stripped:  |-­‐        This  has  no  newline.

same  as  "stripped"  above:  "This  has  no  newline."

kept:  |+        This  has  four  newlines.

same  as  "kept"  above:  "This  has  four  newlines.\n\n\n\n"

-­‐  &showell  Steve-­‐  Clark  -­‐  Brian  -­‐  Oren  -­‐  *showell

Page 56: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

YAML DRAWBACKS

•Makes your eyes bleed

•No schemas or other forms of validation

• Forget a newline somewhere and the parser might look at you, helpless, like a deer in headlights

•No mixed content

Page 57: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

CONCLUSION

• XML for hypermedia, documents, your new REST API

• JSON for serializing objects and storing them in e.g. CouchDB

• YAML for your configuration files

Page 58: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

!e End

Page 59: XML versus the New Kids on the Block (PHPBNL11 2011-01-29)

Questions?