dataschema-xml-source.mustache revision 8f9d94fb7812612dff92ce14a37dbcad4ff02c1c
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff<style scoped>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff/* custom styles for this example */
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff#demo .output {margin-bottom:1em; padding:10px; border:1px solid #D9D9D9;}
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff</style>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff<form id="demo">
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff <h4>Basic example</h4>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff <h6>Data</h6>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff <pre>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff&lt;root&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;session&gt;34637542&lt;/session&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;category name="music" id="5"&gt;&lt;results&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;song id="59672468"&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;title&gt;I Kissed A Girl&lt;/title&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;rank&gt;1&lt;/rank&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;artist id="30326214"&gt;Katy Perry&lt;/artist&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;/song&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;song id="47973564"&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;title&gt;Shake It&lt;/title&gt;
6ba9a5003193570e76c857f027a614e84e881a50David Lawrence &lt;rank&gt;2&lt;/rank&gt;
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff &lt;artist id="45575683"&gt;Metro Station&lt;/artist&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;/song&gt;
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff &lt;song id="52207363"&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;title&gt;Bleeding Love&lt;/title&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;rank&gt;3&lt;/rank&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;artist id="37956508"&gt;Leona Lewis&lt;/artist&gt;
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff &lt;/song&gt;
b48abf6b8539608f868a17bfe429a4b4f992116dMichael Graff &lt;/results&gt;&lt;/category&gt;
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff&lt;/root&gt;
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff </pre>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff <h6>Schema</h6>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff <pre>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff{
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff resultListLocator: "song",
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff resultFields: [{key:"title"}, {key:"artist"}, {key:"rank"}]
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff}
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff </pre>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff <h6>Normalized data</h6>
b48abf6b8539608f868a17bfe429a4b4f992116dMichael Graff <input type="button" id="demo_apply_basic" value="Apply schema =>">
b48abf6b8539608f868a17bfe429a4b4f992116dMichael Graff <div id="demo_output_basic" class="output"></div>
c6e2d36708ce0caa235de426dbda5924d758f272Michael Graff
b48abf6b8539608f868a17bfe429a4b4f992116dMichael Graff <h4>Complex example</h4>
b48abf6b8539608f868a17bfe429a4b4f992116dMichael Graff <h6>Data</h6>
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff <pre>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff&lt;Response&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;Session&gt;542235629&lt;/Session&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;Tracks start="1" count="10" total="98" errorCount="0"
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff defaultSort="popularity+" description="Top 100 Tracks"
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff name="Top 100 Tracks"&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;Track id="59672468" rating="-1" title="I Kissed A Girl"&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;Artist id="30326214" rating="-1"&gt;Katy Perry&lt;/Artist&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;ItemInfo&gt;&lt;ChartPosition last="26" this="1"/&gt;&lt;/ItemInfo&gt;
c498b4be95bbed82ff406454e36016d6761bc1d8Michael Graff &lt;/Track&gt;
79fdce6aff049fde7ac8aa6c35a4fac24c4c0b06Michael Graff &lt;Track id="47973564" rating="-1" title="Shake It"&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;Artist id="45575683" rating="-1"&gt;Metro Station&lt;/Artist&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;ItemInfo&gt;&lt;ChartPosition last="27" this="2"/&gt;&lt;/ItemInfo&gt;
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff &lt;/Track&gt;
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff &lt;Track id="52207363" rating="-1" title="Bleeding Love"&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;Artist id="37956508" rating="-1"&gt;Leona Lewis&lt;/Artist&gt;
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff &lt;ItemInfo&gt;&lt;ChartPosition last="28" this="3"/&gt;&lt;/ItemInfo&gt;
c498b4be95bbed82ff406454e36016d6761bc1d8Michael Graff &lt;/Track&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;/Tracks&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff&lt;/Response&gt;
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff </pre>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff <h6>Schema</h6>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff <pre>
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff{
c6e2d36708ce0caa235de426dbda5924d758f272Michael Graff metaFields: {session:"//Session", total:"//Tracks/@total"},
527bf549959ae9c8b8e240cf93d18fb60c4772dcMichael Graff resultListLocator: "//Track",
527bf549959ae9c8b8e240cf93d18fb60c4772dcMichael Graff resultFields: [{key:"song", locator:"@title"},
118332fc5c23ebdcdf43413b0be7ed13fb0aa627Michael Graff {key:"artist", locator:"Artist"},
527bf549959ae9c8b8e240cf93d18fb60c4772dcMichael Graff {key:"rank", locator:"ItemInfo/ChartPosition/@this"}]
527bf549959ae9c8b8e240cf93d18fb60c4772dcMichael Graff}
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff </pre>
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff <h6>Normalized data</h6>
c6e2d36708ce0caa235de426dbda5924d758f272Michael Graff <input type="button" id="demo_apply_complex" value="Apply schema =>">
8422b3823f26d34a54d9d5852fccf05b19c483acMichael Graff <div id="demo_output_complex" class="output"></div>
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff
b90f80957a972c969a98d0ce74828fb1816572baMichael Graff <h4>Nested example</h4>
8422b3823f26d34a54d9d5852fccf05b19c483acMichael Graff <h6>Data</h6>
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff <pre>
c3581e2bccf659792bf78e0f672b23f9e42dddc5Michael Graff&lt;desserts&gt;
c3581e2bccf659792bf78e0f672b23f9e42dddc5Michael Graff &lt;dessert type="treat"&gt;
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff &lt;name&gt;cupcake&lt;/name&gt;
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff &lt;flavors&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;flavor name="chocolate"/&gt;
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff &lt;flavor name="red velvet"/&gt;
527bf549959ae9c8b8e240cf93d18fb60c4772dcMichael Graff &lt;/flavors&gt;
527bf549959ae9c8b8e240cf93d18fb60c4772dcMichael Graff &lt;/dessert&gt;
527bf549959ae9c8b8e240cf93d18fb60c4772dcMichael Graff &lt;dessert type="treat"&gt;
270ad529d381a3213e1cb3789105785ae374c287Michael Graff &lt;name&gt;ice cream&lt;/name&gt;
270ad529d381a3213e1cb3789105785ae374c287Michael Graff &lt;flavors&gt;
270ad529d381a3213e1cb3789105785ae374c287Michael Graff &lt;flavor name="chocolate"/&gt;
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff &lt;flavor name="strawberry"/&gt;
270ad529d381a3213e1cb3789105785ae374c287Michael Graff &lt;flavor name="vanilla"/&gt;
e92d6ed5e7e5b5d4f1a2351eb96a4561bda3c002Michael Graff &lt;/flavors&gt;
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff &lt;/dessert&gt;
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff &lt;dessert type="treat"&gt;
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff &lt;name&gt;pie&lt;/name&gt;
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff &lt;flavors&gt;
b9672b61d80fb79a15d6e188732364207079a39aMichael Graff &lt;flavor name="banana cream"/&gt;
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff &lt;flavor name="blueberry"/&gt;
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff &lt;flavor name="cherry"/&gt;
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff &lt;/flavors&gt;
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff &lt;/dessert&gt;
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff &lt;dessert type="beverage"&gt;
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff &lt;name&gt;hot chocolate&lt;/name>&gt;
e92d6ed5e7e5b5d4f1a2351eb96a4561bda3c002Michael Graff &lt;/dessert&gt;
270ad529d381a3213e1cb3789105785ae374c287Michael Graff &lt;dessert type="beverage"&gt;
270ad529d381a3213e1cb3789105785ae374c287Michael Graff &lt;name&gt;port wine&lt;/name&gt;
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff &lt;/dessert&gt;
270ad529d381a3213e1cb3789105785ae374c287Michael Graff&lt;/desserts&gt;
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff</pre>
c6e2d36708ce0caa235de426dbda5924d758f272Michael Graff
270ad529d381a3213e1cb3789105785ae374c287Michael Graff <h6>Schema</h6>
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff <pre>
527bf549959ae9c8b8e240cf93d18fb60c4772dcMichael Graff{
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff resultListLocator: "dessert",
270ad529d381a3213e1cb3789105785ae374c287Michael Graff resultFields: [
270ad529d381a3213e1cb3789105785ae374c287Michael Graff {key:"type", locator:"@type"},
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff {key:"name", locator:"name"},
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff {key:"flavors", schema: {
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff resultListLocator: "flavor",
270ad529d381a3213e1cb3789105785ae374c287Michael Graff resultFields: [
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff {key:"flavor", locator:"@name"}
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff ]
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff }}
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff ]
e92d6ed5e7e5b5d4f1a2351eb96a4561bda3c002Michael Graff}
2f1059efb713a28a3c059293b37dc274577b3344Michael Graff </pre>
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff <h6>Normalized data</h6>
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff <input type="button" id="demo_apply_nested" value="Apply schema =>">
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff <div id="demo_output_nested" class="output"></div>
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff</form>
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff<script type="text/javascript">
016742f7d800837ef0e1654123adccdddfaa8886Michael GraffYUI().use("dump", "node", "datatype-xml", "dataschema-xml", function (Y) {
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff Y.on("click", function(e){
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff var data_in = Y.DataType.XML.parse('<root><session>34637542</session><category name="music" id="5"><results><song id="59672468"><title>I Kissed A Girl</title><rank>1</rank><artist id="30326214">Katy Perry</artist></song><song id="47973564"><title>Shake It</title><rank>2</rank><artist id="45575683">Metro Station</artist></song><song id="52207363"><title>Bleeding Love</title><rank>3</rank><artist id="37956508">Leona Lewis</artist></song></results></category></root>'),
016742f7d800837ef0e1654123adccdddfaa8886Michael Graff schema = {
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff resultListLocator: "song",
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff resultFields: [{key:"title"}, {key:"artist"}, {key:"rank"}] // Or simply ["title", "artist", "rank"]
60a7475dd868cb0bc4796378a17f0810b606653bMichael Graff };
79fdce6aff049fde7ac8aa6c35a4fac24c4c0b06Michael Graff Y.one("#demo_output_basic").setContent(Y.dump(Y.DataSchema.XML.apply(schema, data_in)));
79fdce6aff049fde7ac8aa6c35a4fac24c4c0b06Michael Graff }, "#demo_apply_basic");
79fdce6aff049fde7ac8aa6c35a4fac24c4c0b06Michael Graff
b9672b61d80fb79a15d6e188732364207079a39aMichael Graff
b9672b61d80fb79a15d6e188732364207079a39aMichael Graff Y.on("click", function(e){
b9672b61d80fb79a15d6e188732364207079a39aMichael Graff var data_in = Y.DataType.XML.parse('<Response><Session>542235629</Session><Tracks start="1" count="10" total="98" errorCount="0" defaultSort="popularity+" description="Top 100 Tracks" name="Top 100 Tracks" ><Track id="59672468" rating="-1" title="I Kissed A Girl"><Artist id="30326214" rating="-1">Katy Perry</Artist><ItemInfo><ChartPosition last="26" this="1"/></ItemInfo></Track><Track id="47973564" rating="-1" title="Shake It"><Artist id="45575683" rating="-1">Metro Station</Artist><ItemInfo><ChartPosition last="27" this="2"/></ItemInfo></Track><Track id="52207363" rating="-1" title="Bleeding Love"><Artist id="37956508" rating="-1">Leona Lewis</Artist><ItemInfo><ChartPosition last="28" this="3"/></ItemInfo></Track></Tracks></Response>'),
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff schema = {
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff metaFields: {session:"//Session", total:"//Tracks/@total"},
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff resultListLocator: "//Track",
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff resultFields: [{key:"song", locator:"@title"}, {key:"artist", locator:"Artist"}, {key:"rank", locator:"ItemInfo/ChartPosition/@this"}]
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff };
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff Y.one("#demo_output_complex").setContent(Y.dump(Y.DataSchema.XML.apply(schema, data_in)));
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff }, "#demo_apply_complex");
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff Y.on("click", function(e){
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff var data_in = Y.DataType.XML.parse('<desserts><dessert type="treat"><name>cupcake</name><flavors><flavor name="chocolate"/><flavor name="red velvet"/></flavors></dessert><dessert type="treat"><name>ice cream</name><flavors><flavor name="chocolate"/><flavor name="strawberry"/><flavor name="vanilla"/></flavors></dessert><dessert type="treat"><name>pie</name><flavors><flavor name="banana cream"/><flavor name="blueberry"/><flavor name="cherry"/></flavors></dessert><dessert type="beverage"><name>hot chocolate</name></dessert><dessert type="beverage"><name>port wine</name></dessert></desserts>'),
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff schema = {
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff resultListLocator: "dessert",
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff resultFields: [
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff {key:"type", locator:"@type"},
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff {key:"name", locator:"name"},
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff {key:"flavors", schema: {
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff resultListLocator: "flavor",
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff resultFields: [
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff {key:"flavor", locator:"@name"}
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff ]
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff }}
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff ]
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff };
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff Y.one("#demo_output_nested").setContent(Y.dump(Y.DataSchema.XML.apply(schema, data_in)));
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff }, "#demo_apply_nested");
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff});
fd316ab4f9c475e62b0d32f5498dcc3c7e081e34Michael Graff</script>
b8feb9c67c61ad908d1d710f79b861f645f36f7eMichael Graff