Hi Thomas, I see what you mean, but the problem is, the properties of a DOM node object ARE the attributes of the XML node! The DOM is merely an in-memory representation of an XML document. Adding an arbitrary Javascript property to a DOM node is the same thing as adding that attribute to the XML node, so if that attribute isn't allowed by the DTD, I guess Batik is - unfortunately for you! - correct to disallow it. As a practical alternative, can't you define an object that *contains* the DOM node, plus any other properties you may wish to add?
Good luck, anyway! Martin 2009/11/2 <[email protected]>: > Hi Martin, > > I appreciate your effort, but alas that's not what I meant. This is not > about attributes of an XML node but about JavaScript properties of a DOM node > object. In my understanding, XML attributes, which are accessed and set > using the set/getAttributeNS() methods, are totally independent from the > JavaScript properties, which are accessed and set using the dot notation and > usual JavaScript assignment. > > I'm not a JavaScript expert. I learned that JavaScript objects can be > dynamically extended and modified, and I am surprised Batik makes an > exception for node objects. Aren't node objects just usual objects? At > least typeof returns the type "object". > > Thomas W. > > > >> -----Ursprüngliche Nachricht----- >> Von: "Martin Jacobson" <[email protected]> >> Gesendet: 02.11.09 17:52:32 >> An: [email protected] >> Betreff: Re: unable to add property to JavaScript node object > > >> This works in Squiggle... >> >> <?xml version="1.0" encoding="UTF-8"?> >> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.0//EN' >> 'http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd' >> [ >> <!ATTLIST rect >> xmlns:my CDATA #FIXED "http://www.web.de/xzupftom" >> my:Property CDATA #IMPLIED > >> ]> >> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" onload="init()"> >> <script type="text/javascript"> >> init = function() { >> testnode = document.getElementById("testnode") >> testnode.setAttributeNS("http://www.web.de/xzupftom", >> "my:Property", "test"); >> } >> </script> >> <rect id="testnode" width="100" height="100" x="150" y="150"/> >> </svg> >> >> Look at the DOM when this has loaded, and you'll see the my:Property >> attribute set to the value "test" >> >> HTH >> Martin >> >> >> 2009/11/2 Martin Jacobson <[email protected]>: >> > Maybe the experts will come up with a better explanation, but this is >> > the expected behaviour: the SVG DTD doesn't define a myProperty >> > attribute for the rect element, so Batik (correctly) refuses to allow >> > you to set its value - however, you can declare new attributes for >> > most SVG elements (see the SVG specs for details). The fact that >> > Firefox et al don't barf, is probably that they don't validate the >> > SVG, merely test it for well-formedness. >> > >> > HTH >> > Martin >> > >> > >> > 2009/11/2 <[email protected]>: >> >> Hi all, >> >> >> >> I asked the following question on the SVG-developers list, but I guess >> >> you guys can help me better: Why is it impossible to add a property to a >> >> DOM node with Batik? I have the following test SVG: >> >> >> >> >> >> <?xml version="1.0"?> >> >> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" >> >> "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> >> >> >> >> <svg version="1.1" xmlns="http://www.w3.org/2000/svg" onload="init()"> >> >> <script type="text/javascript"> >> >> init = function(){ >> >> testnode = document.getElementById("testnode") >> >> testnode.myProperty = "test" >> >> alert(testnode.myProperty) >> >> } >> >> </script> >> >> <rect id="testnode" width="100" height="100" x="150" y="150"/> >> >> </svg> >> >> >> >> >> >> It works perfectly in Firefox, Opera, IE+ASV and Safari, but Squiggle >> >> (Batik 1.8pre+r801641) gives me the following Java error message: >> >> >> >> Java class "org.apache.batik.dom.svg.SVGOMRectElement" has no public >> >> instance field or method named "myProperty". (Inline <script> >> >> file:/E:/programmieren/svg/js/js_attribute_to_node_object_4.svg:6#4) >> >> >> >> Of course I can't dynamically add a property to a Java object, but this >> >> is JavaScript, so I guess I should be able to add my custom properties. >> >> I initially thought this could be Rhino's fault, but I threw the exact >> >> same script into an HTML document and tested it with Lobo (AFAIK it uses >> >> Rhino as well). This works as expected: >> >> >> >> >> >> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >> >> "http://www.w3.org/TR/html4/loose.dtd"> >> >> <html> >> >> <head> >> >> <script type="text/javascript"> >> >> init = function(){ >> >> testnode = document.getElementById("testnode") >> >> testnode.myProperty = "test" >> >> alert(testnode.myProperty) >> >> } >> >> </script> >> >> </head> >> >> <body onload="init()"> >> >> <p id="testnode">testnode</p> >> >> </body> >> >> </html> >> >> >> >> >> >> Why aren't the Java DOM node objects properly wrapped as JavaScript >> >> objects? Is this by purpose or just a missing feature? >> >> >> >> By the way, java -version on Windows XP gives me the following: >> >> java version "1.6.0_13" >> >> Java(TM) SE Runtime Environment (build 1.6.0_13-b03) >> >> Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode) >> >> >> >> Any info is greatly appreciated >> >> Thomas Weber >> >> ________________________________________________________________ >> >> DSL-Preisknaller: DSL-Komplettpakete schon für 16,99 Euro/mtl.!* >> >> http://produkte.web.de/go/02/ >> >> >> >> >> >> --------------------------------------------------------------------- >> >> To unsubscribe, e-mail: [email protected] >> >> For additional commands, e-mail: [email protected] >> >> >> >> >> > >> > >> > >> > -- >> > From my MacBook Pro >> > >> >> >> >> -- >> From my MacBook Pro >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [email protected] >> For additional commands, e-mail: [email protected] >> >> > > > ______________________________________________________ > GRATIS für alle WEB.DE-Nutzer: Die maxdome Movie-FLAT! > Jetzt freischalten unter http://movieflat.web.de > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] > > -- >From my MacBook Pro --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
