<div class="intro">
    <p>Use DataSource.Local to manage retrieval of local data, from JavaScript arrays and objects to DOM elements. A <a href="../dataschema/">DataSchema</a> plugin is used to normalize incoming data into a known format for consistency of usage by other components.</p>
</div>

<div class="example yui3-skin-sam">
    {{>datasource-local-source}}
</div>

<p>If you are working with local array data, use the DataSourceArraySchema plugin to normalize and filter the data into a consistent format:</p>

```
YUI().use("datasource-local", "datasource-arrayschema", function(Y) {
    var myData = [
            {name:"abc",id:123,extra:"foo"},
            {name:"def",id:456,extra:"bar"},
            {name:"ghi",id:789,extra:"baz"}
        ],
        myDataSource = new Y.DataSource.Local({source:myData}),
        myCallback = {
            success: function(e){
                alert(e.response);
            },
            failure: function(e){
                alert("Could not retrieve data: " + e.error.message);
            }
        };

    myDataSource.plug(Y.Plugin.DataSourceArraySchema, {
        schema: {
            resultFields: ["name","id"]
        }
    });

    myDataSource.sendRequest({callback:myCallback});
});
```

<p>Use the DataSourceJSONSchema plugin to normalize JSON data:</p>

```
YUI().use("datasource-local", "datasource-jsonschema", function(Y) {
    var myData = {
        "profile":{
            "current":160,
            "target":150
        },
        "reference": [
            {
                ...
            },
            {
                "category":"nutrition",
                "type":"intake",
                "fruit":[
                    {"name":"apple", "calories":70},
                    {"name":"banana", "calories":70},
                    {"name":"orange", "calories":90},
                ],
                "vegetables":[
                    {"name":"baked potato", "calories":150},
                    {"name":"broccoli", "calories":50},
                    {"name":"green beans", "calories":30}
                ]
            }
        ],
        "program": [
            ...
        ]
    },
    myDataSource = new Y.DataSource.Local({source:myData}),
    myCallback = {
        success: function(e){
            alert(e.response);
        },
        failure: function(e){
            alert("Could not retrieve data: " + e.error.message);
        }
    };

    myDataSource.plug(Y.Plugin.DataSourceJSONSchema, {
        schema: {
            resultListLocator: "reference[1].fruit",
            resultFields: ["name","calories"]
        }
    });

    myDataSource.sendRequest({callback:myCallback});
});
```

<p>You can use the DataSourceXMLSchema plugin to work with DOM elements:</p>

```
YUI().use("datasource-local", "datasource-xmlschema", function(Y) {
    var myTable = Y.Node.getDOMNode(Y.one("#myTable")),
        myDataSource = new Y.DataSource.Local({source:myTable}),
        myCallback = {
            success: function(e){
                alert(e.response);
            },
            failure: function(e){
                alert("Could not retrieve data: " + e.error.message);
            }
        };

    myDataSource.plug(Y.Plugin.DataSourceXMLSchema, {
        schema: {
            resultListLocator: "tr",
            resultFields: [
                {key:"beverage", locator:"td[1]"},
                {key:"price", locator:"td[2]"}
            ]
        }
    });

    myDataSource.sendRequest({callback:myCallback});
});
```
