CS 318 - Week 14 Lecture - 5-1-13 * a few words on XML and JSON * start with XML * XML - EXtensible Markup Language * XML was designed to describe data and to focus on what data is * Sebesta: disagrees that XML is a markup language -- claims: it is a META-markup language that specifies rules for creating markup languages * XML tags are not predefined; you define your own tags; * XML uses a Document Type Definition (DTD) or an XML Schema to then record agreed-upon definitions for a data- description "language" * XML doesn't really "do" anything;l it is a means for describing data; * plain-text, with angle-bracket delimited tags; * has been pretty extensively used; XML syntax: * strict, relatively simple * begins with an XML prologue, * declares that this is an XML document * defines the version and character encoding in use * then there is a DTD declaration/doctype or a reference to an XML schema <?xml version="1.0" encoding="ISO-8859-1" ?> ^ this could be followed by a DTD declaration doctype or a reference to an XML schema: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.or/TR/shtml11/DTD/xhtml11.dtd"> * this prologue is followed by a root tag (Stepp et al call a document tag), a single, outermost tag that encloses ALL of the rest of the content of the document ALSO... * all tags that are opened must be closed * tags are case sensitive (and opening, closing tags MUST match in terms of case) * proper nesting is required * tags can have attributes, attribute values must be quoted * basically, XML elements make up a tree! the document/root element is its root, there are children, parents, ancestors, descendants, the usual "tree" vocabulary; ^ XML elements have relationships * you can also talk about the kind of CONTENT an element can have: * element content (an element can have an element or elements nested within it) * simple content (just text, numbers, etc. * empty content * mixed content - a combination of element content and simple content * elements can have attributes -- but those aren't considered content... * XML with correct syntax is WELL-FORMED XML XML validated against a DTD or Schema is VALID XML * Intro to JSON JavaScript Object Notaton * textbook, p. 468: "A technique for exchanging data by encoding it as text similar to the declaration of a set of JavaScript objects" * XML is versatile, it is a useful data exchange format, BUT... many find its syntax to be bulky, it can be a chore to "walk through" an XML Document Object Model (DOM) to get to the data you want to process; JSON is an effort to improve on the above; * JavaScript developer Douglas Crockford came up with a novel way of exchanging data that he dubbed JavaScript Object Notation, or JSON for short -- * IS closely tied to the syntax and usage of JavaScript, but CAN be used in other languages and environments as well; * text notes that all modern web browsers have native JSON support, and there are support libraries for older browsers; * it is also a plain-text format is human readable, and self-describing, allows for hierarchical data, and can be easily transferred between applications or across the net or etc. * first: example of a JavaScript object: * unlike C++/Java, you don't have to create a class first to get an object -- you can just make an object! var person = { name: "Philip J. Fry", age: 23, weight: 172.5, friends: ["Farnsworth", "Hermes", "Zoidberg"], getBeloved: function() { return this.name + " loves Leela"; } }; alert(person.age); // 23 alert(person["weight"]); // 172.5 alert(person.friends[2]); // Zoidberg alert(person.getBeloved()); // Philip J. Fry loves Leela * note that a JavaScript object's properties can be any kind of data, including functions JSON data format * very much based on this JavaScript object syntax; { "messages": [ { "time": "1.57", "sender": "Jessica Miller", "body": "So do we have a titl for the book yet?" }, { "time": "1:58", "sender": "Marty Stepp", "body": "I was hoping for a pun?" }, { "time": "2:03", "sender": "Jessica Miller", "body": "sheesh" } ] } * JSON's data format is not EXACTLY the same as JavaScript's object notation -- * for example, ALL object property names must be enclosed in quotes * JSON objects may not have functions as properties * some characters are forbidden as JSON data for compatibility reasons JSON.parse(myJSONdata) -> returns that JSON data converted into an equivalent JavaScript object JSON.stringify(myJavaScriptObject) -> returns that JavaScript object converted into equivalent JSON data another example: { "firstName": "Billy", "lastName": "Gates", "age": 12, "address": "1234 5th Street", "phoneNumbers:" ["888-555-1234", "888-555-5678"] } ...is XML dead? * no -- it's still used for many applications (web AND non-web), it is more easily validated against schemas/DTDs so it probably more suitable for complex data; BUT JSON's brevity, simplicity, and ease of use make it very attractive as well