Open311

Wiki

Collaboration for an Open311 Standard
Personal tools

JSON and XML Conversion

Collaboration for an Open311 Standard

Revision as of 15:49, 21 April 2010 by Phil.ashlock.us (Talk | contribs)

Jump to: navigation, search

Reports

GeoReport XML

<?xml-stylesheet type="text/xsl" href="xml2json.xslt"?>
<reports xmlns="http://www.w3.org/2005/Atom" 
	   xmlns:georss="http://www.georss.org/georss">
	
	<entry>
		<id>tag:open311.sfgov.org,2010-04-15:/dev/V1/reports/637619.xml</id>	
		<title>A large tree branch is blocking the road</title>
		<updated>2010-04-13T18:30:02-05:00</updated>
		<link rel="self" href="http://open311.sfgov.org/dev/V1/reports/637619.xml"/>	
		<author><name>John Doe</name></author>	
				
		<georss:point>40.7111 -73.9565</georss:point>

		<category label="Damaged tree" term="tree-damage" scheme="https://open311.sfgov.org/dev/V1/categories/006.xml">006</category>

		<content type="xml" xmlns="http://open311.org/spec/georeport-v1">
			<report_id>637619</report_id>
			<address>1600 Market St, San Francisco, CA 94103</address>
			<description>A large tree branch is blocking the road</description>
			<status>created</status>
			<status_notes />
			<policy>The City will inspect and require the responsible party to correct within 24 hours and/or issue a Correction Notice or Notice of Violation of the Public Works Code</policy>		
		</content>
	
	</entry>

	<entry>
		<id>tag:open311.sfgov.org,2010-04-15:/dev/V1/reports/637620.xml</id>	
		<title>A large tree branch is blocking the road</title>
		<updated>2010-04-13T18:30:02-05:00</updated>
		<link rel="self" href="http://open311.sfgov.org/dev/V1/reports/637620.xml"/>	
		<author><name>John Doe</name></author>
				
		<georss:point>40.7111 -73.9565</georss:point>

		<category label="Damaged tree" term="tree-damage" scheme="https://open311.sfgov.org/dev/V1/categories/006.xml">006</category>

		<content type="xml" xmlns="http://open311.org/spec/georeport-v1">
			<report_id>637620</report_id>
			<address>56 Market St, San Francisco, CA 94103</address>
			<description>A large tree branch is blocking the road</description>
			<status>created</status>
			<status_notes />
			<policy>The City will inspect and require the responsible party to correct within 24 hours and/or issue a Correction Notice or Notice of Violation of the Public Works Code</policy>
		</content>
	
	</entry>

	<entry>
		<id>tag:open311.sfgov.org,2010-04-15:/dev/V1/reports/637621.xml</id>	
		<title>A large tree branch is blocking the road</title>
		<updated>2010-04-13T18:30:02-05:00</updated>
		<link rel="self" href="http://open311.sfgov.org/dev/V1/reports/637621.xml"/>	
		<author><name>John Doe</name></author>
		
		<georss:point>40.7111 -73.9565</georss:point>

		<category label="Damaged tree" term="tree-damage" scheme="https://open311.sfgov.org/dev/V1/categories/006.xml">006</category>

		<content type="xml" xmlns="http://open311.org/spec/georeport-v1">
			<report_id>637621</report_id>
			<address>1800 Market St, San Francisco, CA 94103</address>
			<description>A large tree branch is blocking the road</description>
			<status>created</status>
			<status_notes />
			<policy>The City will inspect and require the responsible party to correct within 24 hours and/or issue a Correction Notice or Notice of Violation of the Public Works Code</policy>
		</content>
	
	</entry>
	
</reports>

GeoReport JSON (Badgerfish Convention)

The Badgerfish convention is a true JSON representation of XML in the sense that it also accommodates tag attributes. Unfortunately, this also adds a bit of overhead to the JSON syntax.

({
    "reports": {
        "entry": [{
            "id": {
                "$": "tag:open311.sfgov.org,2010-04-15:\/dev\/V1\/reports\/637619.xml"
            },
            "title": {
                "$": "A large tree branch is blocking the road"
            },
            "updated": {
                "$": "2010-04-13T18:30:02-05:00"
            },
            "link": {
                "@rel": "self",
                "@href": "http:\/\/open311.sfgov.org\/dev\/V1\/reports\/637619.xml"
            },
            "author": {
                "name": {
                    "$": "John Doe"
                }
            },
            "georss:point": {
                "$": "40.7111 -73.9565"
            },
            "category": {
                "$": "006",
                "@label": "Damaged tree",
                "@term": "tree-damage",
                "@scheme": "https:\/\/open311.sfgov.org\/dev\/V1\/categories\/006.xml"
            },
            "content": {
                "report_id": {
                    "$": "637619"
                },
                "address": {
                    "$": "1600 Market St, San Francisco, CA 94103"
                },
                "description": {
                    "$": "A large tree branch is blocking the road"
                },
                "status": {
                    "$": "created"
                },
                "status_notes": [],
                "policy": {
                    "$": "The City will inspect and require the responsible party to correct within 24 hours and\/or issue a Correction Notice or Notice of Violation of the Public Works Code"
                },
                "@type": "xml"
            }
        },
        {
            "id": {
                "$": "tag:open311.sfgov.org,2010-04-15:\/dev\/V1\/reports\/637620.xml"
            },
            "title": {
                "$": "A large tree branch is blocking the road"
            },
            "updated": {
                "$": "2010-04-13T18:30:02-05:00"
            },
            "link": {
                "@rel": "self",
                "@href": "http:\/\/open311.sfgov.org\/dev\/V1\/reports\/637620.xml"
            },
            "author": {
                "name": {
                    "$": "John Doe"
                }
            },
            "georss:point": {
                "$": "40.7111 -73.9565"
            },
            "category": {
                "$": "006",
                "@label": "Damaged tree",
                "@term": "tree-damage",
                "@scheme": "https:\/\/open311.sfgov.org\/dev\/V1\/categories\/006.xml"
            },
            "content": {
                "report_id": {
                    "$": "637620"
                },
                "address": {
                    "$": "56 Market St, San Francisco, CA 94103"
                },
                "description": {
                    "$": "A large tree branch is blocking the road"
                },
                "status": {
                    "$": "created"
                },
                "status_notes": [],
                "policy": {
                    "$": "The City will inspect and require the responsible party to correct within 24 hours and\/or issue a Correction Notice or Notice of Violation of the Public Works Code"
                },
                "@type": "xml"
            }
        },
        {
            "id": {
                "$": "tag:open311.sfgov.org,2010-04-15:\/dev\/V1\/reports\/637621.xml"
            },
            "title": {
                "$": "A large tree branch is blocking the road"
            },
            "updated": {
                "$": "2010-04-13T18:30:02-05:00"
            },
            "link": {
                "@rel": "self",
                "@href": "http:\/\/open311.sfgov.org\/dev\/V1\/reports\/637621.xml"
            },
            "author": {
                "name": {
                    "$": "John Doe"
                }
            },
            "georss:point": {
                "$": "40.7111 -73.9565"
            },
            "category": {
                "$": "006",
                "@label": "Damaged tree",
                "@term": "tree-damage",
                "@scheme": "https:\/\/open311.sfgov.org\/dev\/V1\/categories\/006.xml"
            },
            "content": {
                "report_id": {
                    "$": "637621"
                },
                "address": {
                    "$": "1800 Market St, San Francisco, CA 94103"
                },
                "description": {
                    "$": "A large tree branch is blocking the road"
                },
                "status": {
                    "$": "created"
                },
                "status_notes": [],
                "policy": {
                    "$": "The City will inspect and require the responsible party to correct within 24 hours and\/or issue a Correction Notice or Notice of Violation of the Public Works Code"
                },
                "@type": "xml"
            }
        }]
    }
});

GeoReport JSON (Parker Convention)

The Parker convention ignores XML attributes, so it generates much leaner and cleaner JSON. However, there are a few places where XML attributes are used in the core Atom schema for a report: metadata about the associated category as well as the URI and media type for associated media included in the <link> tags. The metadata for categories is probably not essential as long as the category_id is included (the category metadata is just denormalization).

({
    "reports": [{
        "id": "tag:open311.sfgov.org,2010-04-15:/dev/V1/reports/637619.xml",
        "title": "A large tree branch is blocking the road",
        "updated": "2010-04-13T18:30:02-05:00",
        "link": null,
        "author": {
            "name": "John Doe"
        },
        "georss:point": "40.7111 -73.9565",
        "category": 006,
        "content": {
            "report_id": 637619,
            "address": "1600 Market St, San Francisco, CA 94103",
            "description": "A large tree branch is blocking the road",
            "status": "created",
            "status_notes": null,
            "policy": "The City will inspect and require the responsible party to correct within 24 hours and/or issue a Correction Notice or Notice of Violation of the Public Works Code"
        }
    },
    {
        "id": "tag:open311.sfgov.org,2010-04-15:/dev/V1/reports/637620.xml",
        "title": "A large tree branch is blocking the road",
        "updated": "2010-04-13T18:30:02-05:00",
        "link": null,
        "author": {
            "name": "John Doe"
        },
        "georss:point": "40.7111 -73.9565",
        "category": 006,
        "content": {
            "report_id": 637620,
            "address": "56 Market St, San Francisco, CA 94103",
            "description": "A large tree branch is blocking the road",
            "status": "created",
            "status_notes": null,
            "policy": "The City will inspect and require the responsible party to correct within 24 hours and/or issue a Correction Notice or Notice of Violation of the Public Works Code"
        }
    },
    {
        "id": "tag:open311.sfgov.org,2010-04-15:/dev/V1/reports/637621.xml",
        "title": "A large tree branch is blocking the road",
        "updated": "2010-04-13T18:30:02-05:00",
        "link": null,
        "author": {
            "name": "John Doe"
        },
        "georss:point": "40.7111 -73.9565",
        "category": 006,
        "content": {
            "report_id": 637621,
            "address": "1800 Market St, San Francisco, CA 94103",
            "description": "A large tree branch is blocking the road",
            "status": "created",
            "status_notes": null,
            "policy": "The City will inspect and require the responsible party to correct within 24 hours and/or issue a Correction Notice or Notice of Violation of the Public Works Code"
        }
    }]
});


Geospatial Features

GeoRSS Example

(Based on GML) See GeoRSS.org

<?xml version="1.0" encoding="utf-8"?>
 <feed xmlns="http://www.w3.org/2005/Atom" 
      xmlns:georss="http://www.georss.org/georss" 
      xmlns:gml="http://www.opengis.net/gml">
   <title>Earthquakes</title>
 
   <subtitle>International earthquake observation labs</subtitle>
   <link href="http://example.org/"/>
   <updated>2005-12-13T18:30:02Z</updated>
   <author>
      <name>Dr. Thaddeus Remor</name>
      <email>tremor@quakelab.edu</email>
   </author>
   <id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>
   <entry>
      <title>M 3.2, Mona Passage</title>
      <link href="http://example.org/2005/09/09/atom01"/>
      <id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>
      <updated>2005-08-17T07:02:32Z</updated>
      <summary>We just had a big one.</summary>
      <georss:where>
         <gml:Point>
            <gml:pos>45.256 -71.92</gml:pos>
         </gml:Point>
      </georss:where>
   </entry>
 </feed>


GeoJSON Example

See GeoJSON.org

{ "type": "FeatureCollection",
  "features": [
    { "type": "Feature",
      "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
      "properties": {"prop0": "value0"}
      },
    { "type": "Feature",
      "geometry": {
        "type": "LineString",
        "coordinates": [
          [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
          ]
        },
      "properties": {
        "prop0": "value0",
        "prop1": 0.0
        }
      },
    { "type": "Feature",
       "geometry": {
         "type": "Polygon",
         "coordinates": [
           [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
             [100.0, 1.0], [100.0, 0.0] ]
           ]
       },
       "properties": {
         "prop0": "value0",
         "prop1": {"this": "that"}
         }
       }
     ]
   }