Your SlideShare is downloading. ×
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
XML Versus the New Kids on the Block (ZC10 2010-11-03)
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

XML Versus the New Kids on the Block (ZC10 2010-11-03)

1,781

Published on

Presentation given at ZendCon 2010.

Presentation given at ZendCon 2010.

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,781
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
49
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. XML VS. THE NEW KIDS ONTHE BLOCK
  • 2. David Zülke
  • 3. David Zuelke
  • 4. http://en.wikipedia.org/wiki/File:EU-Germany.svg
  • 5. http://en.wikipedia.org/wiki/File:München_Panorama.JPG
  • 6. Founder
  • 7. Lead Developer
  • 8. @dzuelke
  • 9. 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)
  • 10. but first
  • 11. I'd like to hear from you, dear audience
  • 12. what do you love, hate, adore or loathe with a passion?
  • 13. XML eXtensible Markup Language
  • 14. "extensible" mostly refers to the Namespaces concept
  • 15. 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)
  • 16. 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
  • 17. 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)
  • 18. but most importantly
  • 19. Mixed Content!
  • 20. <?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>
  • 21. <?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>
  • 22. and you can add elements without changing the structure
  • 23. <?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>
  • 24. <?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>
  • 25. <?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>
  • 26. XML: doing it right
  • 27. <?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>
  • 28. which brings me to...
  • 29. HATEOAS AND HYPERMEDIA The Main Ingredient ForYour REST API
  • 30. XML: doing it wrong
  • 31. <?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>
  • 32. but please do not serialize objects to XML (I'm looking at you, SOAP)
  • 33. HTML 5 Such a mess :(
  • 34. 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...
  • 35. <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>
  • 36. but that's already possible in XML!
  • 37. <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>
  • 38. JSON JavaScript Object Notation
  • 39. JSON PROS AND CONS • 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
  • 40. win: store arbitrary keys and values
  • 41. {        "_id"  :  "bc2a41170621c326ec68382f846d5764",        "_rev"  :  "2612672603",        "item"  :  "orange",        "prices"  :  {                "Fresh  Mart"  :  1.99,                "Price  Max"  :  3.19,                "Citrus  Circus"  :  1.09        } }
  • 42. fail: use it as query language for your pile of crap database
  • 43. {  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"  }
  • 44. YAML Yet Another Markup Language
  • 45. YAML Yet Another Markup Language YAML Ain't Markup Language
  • 46. recursive acronyms are cool
  • 47. YAML also was cool at some point
  • 48. a simple markup language, perfect for configuration files
  • 49. 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]
  • 50. but then...
  • 51. foo:  |          -­‐-­‐-­‐        foo:  bar        -­‐-­‐-­‐        yo:  baz bar:  |          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.nnnn" -­‐  &showell  Steve -­‐  Clark   -­‐  Brian   -­‐  Oren   -­‐  *showell
  • 52. 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
  • 53. 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
  • 54. !e End
  • 55. Questions?
  • 56. THANKYOU! This was http://joind.in/2269 by @dzuelke

×