Adding missing schemalocation, version

This commit is contained in:
Pierre GIRAUD
2012-02-02 13:13:05 +01:00
parent aba04d7c42
commit 030f8fdbb9
2 changed files with 36 additions and 23 deletions

View File

@@ -57,11 +57,20 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
extractAttributes: true, extractAttributes: true,
/** /**
* APIProperty: gpxns * Property: namespaces
* {String} GPX namespace to use. Defaults to * {Object} Mapping of namespace aliases to namespace URIs.
* "http://www.topografix.com/GPX/1/1"
*/ */
gpxns: "http://www.topografix.com/GPX/1/1", namespaces: {
gpx: "http://www.topografix.com/GPX/1/1",
xsi: "http://www.w3.org/2001/XMLSchema-instance"
},
/**
* Property: schemaLocation
* {String} Schema location. Defaults to
* "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"
*/
schemaLocation: "http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd",
/** /**
* Constructor: OpenLayers.Format.GPX * Constructor: OpenLayers.Format.GPX
@@ -207,17 +216,21 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
* add to the gpx. Supported keys are 'name', 'desc', 'author'. * add to the gpx. Supported keys are 'name', 'desc', 'author'.
*/ */
write: function(features, metadata) { write: function(features, metadata) {
var gpx;
features = OpenLayers.Util.isArray(features) ? features = OpenLayers.Util.isArray(features) ?
features : [features]; features : [features];
gpx = this.createElementNS(this.gpxns, "gpx"); var gpx = this.createElementNS(this.namespaces["gpx"], "gpx");
gpx.setAttribute("version", "1.1");
this.setAttributeNS(
gpx, this.namespaces["xsi"],
"xsi:schemaLocation", this.schemaLocation
);
for(var i=0, len=features.length; i<len; i++) {
gpx.appendChild(this.buildFeatureNode(features[i]));
}
if (metadata && typeof metadata == 'object') { if (metadata && typeof metadata == 'object') {
gpx.appendChild(this.buildMetadataNode(metadata)); gpx.appendChild(this.buildMetadataNode(metadata));
} }
for(var i=0, len=features.length; i<len; i++) {
gpx.appendChild(this.buildFeatureNode(features[i]));
}
return OpenLayers.Format.XML.prototype.write.apply(this, [gpx]); return OpenLayers.Format.XML.prototype.write.apply(this, [gpx]);
}, },
@@ -230,11 +243,11 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
*/ */
buildMetadataNode: function(metadata) { buildMetadataNode: function(metadata) {
var types = ['name', 'desc', 'author'], var types = ['name', 'desc', 'author'],
node = this.createElementNS(this.gpxns, 'metadata'); node = this.createElementNS(this.namespaces["gpx"], 'metadata');
for (var i=0; i < types.length; i++) { for (var i=0; i < types.length; i++) {
var type = types[i]; var type = types[i];
if (metadata[type]) { if (metadata[type]) {
var n = this.createElementNS(this.gpxns, type); var n = this.createElementNS(this.namespaces["gpx"], type);
n.appendChild(this.createTextNode(metadata[type])); n.appendChild(this.createTextNode(metadata[type]));
node.appendChild(n); node.appendChild(n);
} }
@@ -263,7 +276,7 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
var wpt = this.buildWptNode(feature); var wpt = this.buildWptNode(feature);
return wpt; return wpt;
} else { } else {
var trkNode = this.createElementNS(this.gpxns, "trk"); var trkNode = this.createElementNS(this.namespaces["gpx"], "trk");
this.appendAttributesNode(trkNode, feature); this.appendAttributesNode(trkNode, feature);
var trkSegNodes = this.buildTrkSegNode(geometry); var trkSegNodes = this.buildTrkSegNode(geometry);
trkSegNodes = OpenLayers.Util.isArray(trkSegNodes) ? trkSegNodes = OpenLayers.Util.isArray(trkSegNodes) ?
@@ -291,7 +304,7 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
nodes; nodes;
if (geometry.CLASS_NAME == "OpenLayers.Geometry.LineString" || if (geometry.CLASS_NAME == "OpenLayers.Geometry.LineString" ||
geometry.CLASS_NAME == "OpenLayers.Geometry.LinearRing") { geometry.CLASS_NAME == "OpenLayers.Geometry.LinearRing") {
node = this.createElementNS(this.gpxns, "trkseg"); node = this.createElementNS(this.namespaces["gpx"], "trkseg");
for (i = 0, len=geometry.components.length; i < len; i++) { for (i = 0, len=geometry.components.length; i < len; i++) {
point = geometry.components[i]; point = geometry.components[i];
node.appendChild(this.buildTrkPtNode(point)); node.appendChild(this.buildTrkPtNode(point));
@@ -317,7 +330,7 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
* {DOMElement} A trkpt node * {DOMElement} A trkpt node
*/ */
buildTrkPtNode: function(point) { buildTrkPtNode: function(point) {
var node = this.createElementNS(this.gpxns, "trkpt"); var node = this.createElementNS(this.namespaces["gpx"], "trkpt");
node.setAttribute("lon", point.x); node.setAttribute("lon", point.x);
node.setAttribute("lat", point.y); node.setAttribute("lat", point.y);
return node; return node;
@@ -334,7 +347,7 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
* {DOMElement} A wpt node * {DOMElement} A wpt node
*/ */
buildWptNode: function(feature) { buildWptNode: function(feature) {
var node = this.createElementNS(this.gpxns, "wpt"); var node = this.createElementNS(this.namespaces["gpx"], "wpt");
node.setAttribute("lon", feature.geometry.x); node.setAttribute("lon", feature.geometry.x);
node.setAttribute("lat", feature.geometry.y); node.setAttribute("lat", feature.geometry.y);
this.appendAttributesNode(node, feature); this.appendAttributesNode(node, feature);
@@ -350,11 +363,11 @@ OpenLayers.Format.GPX = OpenLayers.Class(OpenLayers.Format.XML, {
* feature - {<OpenLayers.Feature.Vector>} * feature - {<OpenLayers.Feature.Vector>}
*/ */
appendAttributesNode: function(node, feature) { appendAttributesNode: function(node, feature) {
var name = this.createElementNS(this.gpxns, 'name'); var name = this.createElementNS(this.namespaces["gpx"], 'name');
name.appendChild(this.createTextNode( name.appendChild(this.createTextNode(
feature.attributes.name || feature.id)); feature.attributes.name || feature.id));
node.appendChild(name); node.appendChild(name);
var desc = this.createElementNS(this.gpxns, 'desc'); var desc = this.createElementNS(this.namespaces["gpx"], 'desc');
desc.appendChild(this.createTextNode( desc.appendChild(this.createTextNode(
feature.attributes.description || this.defaultDesc)); feature.attributes.description || this.defaultDesc));
node.appendChild(desc); node.appendChild(desc);

View File

@@ -46,7 +46,7 @@
new OpenLayers.Feature.Vector(point2, {name: 'foo', description: 'bar'}) new OpenLayers.Feature.Vector(point2, {name: 'foo', description: 'bar'})
]; ];
var data = parser.write(features); var data = parser.write(features);
t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><wpt lon="-111.04" lat="45.68"><name>foo</name><desc>bar</desc></wpt><wpt lon="-112.04" lat="45.68"><name>foo</name><desc>bar</desc></wpt></gpx>', 'GPX serializes points correctly'); t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><wpt lon="-111.04" lat="45.68"><name>foo</name><desc>bar</desc></wpt><wpt lon="-112.04" lat="45.68"><name>foo</name><desc>bar</desc></wpt></gpx>', 'GPX serializes points correctly');
} }
function test_Format_GPX_serialize_line(t) { function test_Format_GPX_serialize_line(t) {
t.plan(1); t.plan(1);
@@ -58,7 +58,7 @@
var line = new OpenLayers.Geometry.LineString([point, point2]); var line = new OpenLayers.Geometry.LineString([point, point2]);
var f = new OpenLayers.Feature.Vector(line, {name: 'foo', description: 'bar'}); var f = new OpenLayers.Feature.Vector(line, {name: 'foo', description: 'bar'});
var data = parser.write(f); var data = parser.write(f);
t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg></trk></gpx>', 'GPX serializes line correctly'); t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg></trk></gpx>', 'GPX serializes line correctly');
} }
function test_Format_GPX_serialize_lines(t) { function test_Format_GPX_serialize_lines(t) {
t.plan(1); t.plan(1);
@@ -74,7 +74,7 @@
var f = new OpenLayers.Feature.Vector(line, {name: 'foo', description: 'bar'}); var f = new OpenLayers.Feature.Vector(line, {name: 'foo', description: 'bar'});
var f2 = new OpenLayers.Feature.Vector(line2, {name: 'dude', description: 'truite'}); var f2 = new OpenLayers.Feature.Vector(line2, {name: 'dude', description: 'truite'});
var data = parser.write([f, f2]); var data = parser.write([f, f2]);
t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg></trk><trk><name>dude</name><desc>truite</desc><trkseg><trkpt lon="1" lat="2"/><trkpt lon="3" lat="4"/></trkseg></trk></gpx>', 'GPX serializes lines correctly'); t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg></trk><trk><name>dude</name><desc>truite</desc><trkseg><trkpt lon="1" lat="2"/><trkpt lon="3" lat="4"/></trkseg></trk></gpx>', 'GPX serializes lines correctly');
} }
function test_Format_GPX_serialize_multiline(t) { function test_Format_GPX_serialize_multiline(t) {
t.plan(1); t.plan(1);
@@ -90,7 +90,7 @@
var multiline = new OpenLayers.Geometry.MultiLineString([line, line2]); var multiline = new OpenLayers.Geometry.MultiLineString([line, line2]);
var f = new OpenLayers.Feature.Vector(multiline, {name: 'foo', description: 'bar'}); var f = new OpenLayers.Feature.Vector(multiline, {name: 'foo', description: 'bar'});
var data = parser.write([f]); var data = parser.write([f]);
t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg><trkseg><trkpt lon="1" lat="2"/><trkpt lon="3" lat="4"/></trkseg></trk></gpx>', 'GPX serializes multiline correctly'); t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/></trkseg><trkseg><trkpt lon="1" lat="2"/><trkpt lon="3" lat="4"/></trkseg></trk></gpx>', 'GPX serializes multiline correctly');
} }
function test_Format_GPX_serialize_polygon(t) { function test_Format_GPX_serialize_polygon(t) {
t.plan(1); t.plan(1);
@@ -103,7 +103,7 @@
var polygon = new OpenLayers.Geometry.Polygon([linearRing]); var polygon = new OpenLayers.Geometry.Polygon([linearRing]);
var f = new OpenLayers.Feature.Vector(polygon, {name: 'foo', description: 'bar'}); var f = new OpenLayers.Feature.Vector(polygon, {name: 'foo', description: 'bar'});
var data = parser.write([f]); var data = parser.write([f]);
t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/><trkpt lon="-111.04" lat="45.68"/></trkseg></trk></gpx>', 'GPX serializes polygon correctly'); t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><trk><name>foo</name><desc>bar</desc><trkseg><trkpt lon="-111.04" lat="45.68"/><trkpt lon="-112.04" lat="45.68"/><trkpt lon="-111.04" lat="45.68"/></trkseg></trk></gpx>', 'GPX serializes polygon correctly');
} }
function test_Format_GPX_serialize_metadata(t) { function test_Format_GPX_serialize_metadata(t) {
t.plan(1); t.plan(1);
@@ -111,7 +111,7 @@
var parser = new OpenLayers.Format.GPX(); var parser = new OpenLayers.Format.GPX();
var data = parser.write([], {name: 'foo', desc: 'bar'}); var data = parser.write([], {name: 'foo', desc: 'bar'});
t.xml_eq(data, '<?xml version="1.0" encoding="ISO-8859-1"?><gpx xmlns="http://www.topografix.com/GPX/1/1"><metadata><name>foo</name><desc>bar</desc></metadata></gpx>', 'GPX serializes metadata correctly'); t.xml_eq(data, '<gpx xmlns="http://www.topografix.com/GPX/1/1" version="1.1" xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><metadata><name>foo</name><desc>bar</desc></metadata></gpx>', 'GPX serializes metadata correctly');
} }
</script> </script>
</head> </head>