[gxml] Namespaces: set uri for default namespaces
- From: Daniel Espinosa Ortiz <despinosa src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gxml] Namespaces: set uri for default namespaces
- Date: Sun, 31 May 2020 14:59:43 +0000 (UTC)
commit ff333667e1758b6374133cea0c424a9168138da7
Author: Daniel Espinosa <esodan gmail com>
Date: Sun May 31 09:57:16 2020 -0500
Namespaces: set uri for default namespaces
Attributes using known prefix are set
to default namespace's uri if not set
gxml/Element.vala | 24 +++++++++++++++++-
test/ElementTest.vala | 69 ++++++++++++++++++++++++++++++++++-----------------
2 files changed, 69 insertions(+), 24 deletions(-)
---
diff --git a/gxml/Element.vala b/gxml/Element.vala
index 96de89d..b753916 100644
--- a/gxml/Element.vala
+++ b/gxml/Element.vala
@@ -708,29 +708,51 @@ public class GXml.Element : GXml.Node,
throw new DomError.NAMESPACE_ERROR (_("'xmlns' namespace should not be defined"));
}
- if (p == "xml" && namespace_uri != "http://www.w3.org/XML/1998/namespace/" && namespace_uri !=
"http://www.w3.org/XML/1998/namespace") {
+ if (p.down () == "xml" && namespace_uri == null) {
+ namespace_uri = "http://www.w3.org/XML/1998/namespace/";
+ }
+ if (p == "xml" && namespace_uri != "http://www.w3.org/XML/1998/namespace/"
+ && namespace_uri != "http://www.w3.org/XML/1998/namespace") {
throw new DomError.NAMESPACE_ERROR (_("Invalid namespace. If prefix is 'xml', namespace URI should be
http://www.w3.org/XML/1998/namespace"));
}
+ if (p.down () == "xmlns" && namespace_uri == null) {
+ namespace_uri = "http://www.w3.org/2000/xmlns/";
+ }
if (n == "xmlns" && namespace_uri != "http://www.w3.org/2000/xmlns/"
&& namespace_uri != "http://www.w3.org/2000/xmlns") {
throw new DomError.NAMESPACE_ERROR (_("Invalid namespace definition. If attribute's prefix is
'xmlns', namespace URI should be http://www.w3.org/2000/xmlns"));
}
+ if (p.down () == "html" && namespace_uri == null) {
+ namespace_uri = "http://www.w3.org/1999/xhtml/";
+ }
if (p == "html" && namespace_uri != "http://www.w3.org/1999/xhtml/"
&& namespace_uri != "http://www.w3.org/1999/xhtml") {
throw new DomError.NAMESPACE_ERROR (_("Invalid namespace. If attribute's prefix is 'html', namespace
URI should be http://www.w3.org/1999/xhtml"));
}
+ if (p.down () == "xsi" && namespace_uri == null) {
+ namespace_uri = "http://www.w3.org/2001/XMLSchema-instance/";
+ }
if (p == "xsi" && namespace_uri != "http://www.w3.org/2001/XMLSchema-instance/"
&& namespace_uri != "http://www.w3.org/2001/XMLSchema-instance") {
throw new DomError.NAMESPACE_ERROR (_("Invalid namespace. If attribute's prefix is 'xsi', namespace
URI should be http://www.w3.org/2001/XMLSchema-instance"));
}
+ if (p.down () == "mathml" && namespace_uri == null) {
+ namespace_uri = "http://www.w3.org/1998/Math/MathML/";
+ }
if (p.down () == "mathml" && namespace_uri != "http://www.w3.org/1998/Math/MathML/"
&& namespace_uri != "http://www.w3.org/1998/Math/MathML") {
throw new DomError.NAMESPACE_ERROR (_("Invalid namespace. If attribute's prefix is 'MathML',
namespace URI should be http://www.w3.org/1998/Math/MathML"));
}
+ if (p.down () == "svg" && namespace_uri == null) {
+ namespace_uri = "http://www.w3.org/2000/svg/";
+ }
if (p.down () == "svg" && namespace_uri != "http://www.w3.org/2000/svg/"
&& namespace_uri != "http://www.w3.org/2000/svg") {
throw new DomError.NAMESPACE_ERROR (_("Invalid namespace. If attribute's prefix is 'svg', namespace
URI should be http://www.w3.org/2000/svg"));
}
+ if (p.down () == "xlink" && namespace_uri == null) {
+ namespace_uri = "http://www.w3.org/1999/xlink/";
+ }
if (p.down () == "xlink" && namespace_uri != "http://www.w3.org/1999/xlink/"
&& namespace_uri != "http://www.w3.org/1999/xlink") {
throw new DomError.NAMESPACE_ERROR (_("Invalid namespace. If attribute's prefix is 'xlink', namespace
URI should be http://www.w3.org/1999/xlink"));
diff --git a/test/ElementTest.vala b/test/ElementTest.vala
index 8a51f3d..297cf91 100644
--- a/test/ElementTest.vala
+++ b/test/ElementTest.vala
@@ -22,6 +22,15 @@
using GXml;
+public class DefaultNs : GXml.Element {
+ [Description (nick="::xlink:Link")]
+ public string link { get; set; }
+ construct {
+ try { initialize ("defaultNs"); }
+ catch (GLib.Error e) { warning ("Error: "+e.message); }
+ }
+}
+
public interface NoInstantiatable : GLib.Object, GXml.Object {
public abstract string name { get; set; }
}
@@ -217,7 +226,7 @@ class GXml.ElementTest : GXmlTest {
}
}
public static void add_tests () {
- Test.add_func ("/gxml/gom-element/read/namespace_uri", () => {
+ Test.add_func ("/gxml/element/read/namespace_uri", () => {
DomDocument doc = null;
try {
doc = new GXml.Document.from_string ("<Potions><magic:Potion
xmlns:magic=\"http://hogwarts.co.uk/magic\" xmlns:products=\"http://diagonalley.co.uk/products\"><ingredient
products:name=\"spider\"/></magic:Potion></Potions>");
@@ -245,7 +254,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/namespace_uri", () => {
+ Test.add_func ("/gxml/element/namespace_uri", () => {
try {
GXml.Document doc = new GXml.Document.from_string ("<Potions><magic:Potion
xmlns:magic=\"http://hogwarts.co.uk/magic\"
xmlns:products=\"http://diagonalley.co.uk/products\"/></Potions>");
GXml.Node root = (GXml.Node) doc.document_element;
@@ -279,7 +288,7 @@ class GXml.ElementTest : GXmlTest {
GLib.message (e.message);
assert_not_reached ();
}
- });Test.add_func ("/gxml/gom-element/read/namespace/redefinition", () => {
+ });Test.add_func ("/gxml/element/read/namespace/redefinition", () => {
DomDocument doc = null;
try {
doc = new GXml.Document.from_string ("<magic:Potion
xmlns:magic=\"http://hogwarts.co.uk/magic\"
xmlns:products=\"http://hogwarts.co.uk/magic\"><magic:Arc/><products:Diamond/></magic:Potion>");
@@ -305,7 +314,7 @@ class GXml.ElementTest : GXmlTest {
GLib.warning (e.message);
}
});
- Test.add_func ("/gxml/gom-element/attributes", () => {
+ Test.add_func ("/gxml/element/attributes", () => {
try {
GXml.Document doc = new GXml.Document.from_string ("<root />");
assert (doc.document_element != null);
@@ -379,7 +388,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/attributes/property-ns", () => {
+ Test.add_func ("/gxml/element/attributes/property-ns", () => {
try {
string str = """<Potion xmlns:c="http://c.org/1.0"
c:name="edumor"><ingredient c:name="spider"><child/><method c:name="move"/></ingredient></Potion>""";
var p = new Potion ();
@@ -401,7 +410,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/attribute-ns/collection", () => {
+ Test.add_func ("/gxml/element/attribute-ns/collection", () => {
try {
string str = """<?xml version="1.0"?>
<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0"
xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
@@ -423,7 +432,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/lookup-prefix", () => {
+ Test.add_func ("/gxml/element/lookup-prefix", () => {
try {
string str = """<?xml version="1.0"?>
<repository version="1.2" xmlns="http://www.gtk.org/introspection/core/1.0"
xmlns:c="http://www.gtk.org/introspection/c/1.0" xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
@@ -451,7 +460,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/content/add_aside_child_nodes", () =>{
+ Test.add_func ("/gxml/element/content/add_aside_child_nodes", () =>{
try {
var doc = new GXml.Document ();
var root = (GXml.Element) doc.create_element ("root");
@@ -468,7 +477,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/content/keep_child_nodes", () =>{
+ Test.add_func ("/gxml/element/content/keep_child_nodes", () =>{
try {
var doc = new GXml.Document ();
var root = (GXml.Element) doc.create_element ("root");
@@ -485,7 +494,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/parent", () => {
+ Test.add_func ("/gxml/element/parent", () => {
try {
var doc = new GXml.Document.from_string ("<root><child/></root>");
assert (doc.document_element != null);
@@ -499,7 +508,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/remove", () => {
+ Test.add_func ("/gxml/element/remove", () => {
try {
var doc = new GXml.Document.from_string ("<root><child/></root>");
assert (doc.document_element != null);
@@ -515,7 +524,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/parsed-delayed", () => {
+ Test.add_func ("/gxml/element/parsed-delayed", () => {
try {
var n = new ParsedDelayed ();
n.read_from_string ("<root><child p1=\"Value1\"
p2=\"Value2\"><child2/></child></root>");
@@ -532,7 +541,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/write/string", () => {
+ Test.add_func ("/gxml/element/write/string", () => {
try {
var n = new GXml.Element ();
n.initialize ("Node");
@@ -550,7 +559,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/write/stream", () => {
+ Test.add_func ("/gxml/element/write/stream", () => {
try {
var n = new GXml.Element ();
n.initialize ("Node");
@@ -565,7 +574,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/write/input_stream", () => {
+ Test.add_func ("/gxml/element/write/input_stream", () => {
try {
var n = new GXml.Element ();
n.initialize ("Node");
@@ -581,7 +590,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/previous_element_sibling", () => {
+ Test.add_func ("/gxml/element/previous_element_sibling", () => {
try {
var doc = new GXml.Document.from_string ("<root> <child/> <child/></root>");
assert (doc.document_element != null);
@@ -612,7 +621,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/css-selector", () => {
+ Test.add_func ("/gxml/element/css-selector", () => {
try {
var d = new GXml.Document ();
var r = d.create_element ("root");
@@ -671,7 +680,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/no-instantiatable/avoid", () => {
+ Test.add_func ("/gxml/element/no-instantiatable/avoid", () => {
try {
string str = """<Top pq="Qlt"><Instantiatable name="Nop"/></Top>""";
var t = new Top ();
@@ -683,7 +692,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/no-instantiatable/set", () => {
+ Test.add_func ("/gxml/element/no-instantiatable/set", () => {
try {
string str = """<Top pq="Qlt"><Instantiatable name="Nop"/></Top>""";
var t = new GTop ();
@@ -697,7 +706,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/ordered-attributes", () => {
+ Test.add_func ("/gxml/element/ordered-attributes", () => {
try {
var e = new GXml.Element ();
e.set_attribute ("a1", "v1");
@@ -763,7 +772,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/object-attributes/attributes-collection", () => {
+ Test.add_func ("/gxml/element/object-attributes/attributes-collection", () => {
try {
var e = new ObjectParent ();
assert (e.text == null);
@@ -834,7 +843,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/object-attributes/attributes-update", () => {
+ Test.add_func ("/gxml/element/object-attributes/attributes-update", () => {
try {
var e = new ObjectParent ();
e.id = "id1";
@@ -872,7 +881,7 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
- Test.add_func ("/gxml/gom-element/object-attributes/attributes-no-ns-same-name", () => {
+ Test.add_func ("/gxml/element/object-attributes/attributes-no-ns-same-name", () => {
try {
string str = """<elementType type="Val1" xsi:type="Val2"
VAL3</elementType>""";
var n = new ElementType ();
@@ -892,5 +901,19 @@ class GXml.ElementTest : GXmlTest {
assert_not_reached ();
}
});
+ Test.add_func ("/gxml/element/default-ns/xlink", () => {
+ try {
+ var dns = new DefaultNs ();
+ dns.link = "http://www.gnome.org/";
+ message (dns.write_string ());
+ string str = """<defaultNs xlink:link="http://www.gnome.org/"/>""";
+ dns = new DefaultNs ();
+ dns.read_from_string (str);
+ message (dns.write_string ());
+ assert (dns.get_attribute_ns ("http://www.w3.org/1999/xlink", "link") ==
"http://www.gnome.org/");
+ } catch (GLib.Error e) {
+ GLib.warning ("Error: "+e.message);
+ }
+ });
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]