<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PyRuby blog &#187; xml</title>
	<atom:link href="http://www.pyruby.com/tag/xml/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pyruby.com</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Mon, 12 Dec 2011 11:03:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Django REST models</title>
		<link>http://www.pyruby.com/2009/09/28/django-rest-models/</link>
		<comments>http://www.pyruby.com/2009/09/28/django-rest-models/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 01:05:07 +0000</pubDate>
		<dc:creator>PyRuby</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[REST]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.pyruby.com/?p=4</guid>
		<description><![CDATA[We wrote an xml_models library, which allowed us to map our models to the XML data, using a declarative style similar to the Django DB models.  The library has been open sourced and can be found on <a [...]]]></description>
			<content:encoded><![CDATA[<h2>Making external XML REST apis more pythonic</h2>
<p>At <a href="http://www.point2.com">work</a> we have a <a href="http://www.djangoproject.com">Django</a> web application where the models are backed by a Java XML <a href="http://en.wikipedia.org/wiki/Representational_State_Transfer">REST api</a>.  The application is read only, so there is no requirement to write back to the REST api.</p>
<p>We started with copying the data into a local DB, and using regular Django DB models, and we wanted something that would feel very similar, but use an XML REST backend. We wrote an xml_models library, which allowed us to map our models to the XML data, using a declarative style similar to the Django DB models.  The library has been open sourced and can be found on <a href="http://djangorestmodel.sf.net">sourceforge</a>.</p>
<p>Here is a simple example:-</p>
<p>Suppose there was an API http://myaddressbook.com/addresses/{addressID} that returns the following XML</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;address</span> <span class="re0">id</span>=<span class="st0">&quot;123&quot;</span> <span class="re0">num</span>=<span class="st0">&quot;3301&quot;</span><span class="re2">&gt;</span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;street<span class="re2">&gt;</span></span></span>8th Street<span class="sc3"><span class="re1">&lt;/street<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;city<span class="re2">&gt;</span></span></span>Saskatoon<span class="sc3"><span class="re1">&lt;/city<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="sc3"><span class="re1">&lt;province<span class="re2">&gt;</span></span></span>SK<span class="sc3"><span class="re1">&lt;/province<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; <span class="sc3"><span class="re1">&lt;country<span class="re2">&gt;</span></span></span>Canada<span class="sc3"><span class="re1">&lt;/country<span class="re2">&gt;</span></span></span></div>
</li>
<li class="li1">
<div class="de1"><span class="sc3"><span class="re1">&lt;/address<span class="re2">&gt;</span></span></span></div>
</li>
</ol>
</div>
<p>The model might be defined as</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">class</span> Address<span class="br0">&#40;</span>xml_models.<span class="me1">Model</span><span class="br0">&#41;</span>:</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">id</span> = xml_models.<span class="me1">IntField</span><span class="br0">&#40;</span>xpath=<span class="st0">&quot;/address/@id&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; num = xml_models.<span class="me1">IntField</span><span class="br0">&#40;</span>xpath=<span class="st0">&quot;/address/@num&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; street = xml_models.<span class="me1">CharField</span><span class="br0">&#40;</span>xpath=<span class="st0">&quot;/address/street&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp; city = xml_models.<span class="me1">CharField</span><span class="br0">&#40;</span>xpath=<span class="st0">&quot;/address/city&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; province = xml_models.<span class="me1">CharField</span><span class="br0">&#40;</span>xpath=<span class="st0">&quot;/address/province&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; country = xml_models.<span class="me1">CharField</span><span class="br0">&#40;</span>xpath=<span class="st0">&quot;/address/country&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; finders = <span class="br0">&#123;</span> <span class="br0">&#40;</span><span class="kw2">id</span>,<span class="br0">&#41;</span>: <span class="st0">&quot;http://myaddressbook.com/addresses/%s&quot;</span> ,</div>
</li>
<li class="li2">
<div class="de2">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span>num,street<span class="br0">&#41;</span>: <span class="st0">&quot;http://myaddressbook.com/addresses/num/%s/street/%s&quot;</span><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>And using the finder method would be like this</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">address = Address.<span class="me1">objects</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="kw2">id</span>=<span class="nu0">123</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>That&#8217;s the basics.  We are mapping much more complex relationships with collection fields, date fields and more.  Take a look and let me know what you think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.pyruby.com/2009/09/28/django-rest-models/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

