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]

Reply via email to