Re: Trouble extending line element

Instead of going the DTD route, you might want to try using a separate
namespace. That's supported by all of the viewers I'm aware of (and I'm
sure I'll be corrected if I forgot any<grin/>).

For example, see the changes I've made below.


On Tue, 14 Apr 2009 10:11:13 +0100
"Ben Temperton" <benmpe@pml.ac.uk> wrote:

> Hi there,
> I'm currently trying to extend the SVG DTD to allow me to have a new
> element in the <line> element like this:
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN'
> "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
> <!ENTITY % SVG.line.extra.content "| hit">
> <!ELEMENT hit (queryId, queryString) >
> <!ELEMENT queryId (#PCDATA)>
> <!ELEMENT queryString (#PCDATA)> ]>
> <svg xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>      xmlns:xalan="http://xml.apache.org/xalan"
>      xmlns:xlink="http://www.w3.org/1999/xlink"
>      xmlns="http://www.w3.org/2000/svg"
       xmlns:bt="http://pml.ac.uk/bens_extensions"
>      style="fill-opacity:1; color-rendering:auto;
> color-interpolation:auto; stroke:black; text-rendering:auto;
> stroke-linecap:square; stroke-miterlimit:10; stroke-opacity:1;
> shape-rendering:auto; fill:black; stroke-dasharray:none;
> font-weight:normal; stroke-width:1; font-family:'Dialog';
> font-style:normal; stroke-linejoin:miter; font-size:12;
> stroke-dashoffset:0; image-rendering:auto;"
>      xsi:schemaLocation="http://www.w3.org/1999/xlink "
>      width="200"
>      height="100">
>     <text x="5" y="15" style="font-size:10; font-family:serif;
> stroke:none;" xml:space="preserve">Test matrix</text>
>     <rect x="0" y="30" width="10000" height="70" fill="black"
> stroke="black" stroke-width="1"/>
>     <g stroke="white">
>         <line y2="50" style="fill:none;" x1="100" x2="400" y1="50">
              <bt:hit>
                  <bt:queryId>123123131232132</bt:queryId>
                  <bt:queryString>AAAATGACGAGAGAGAGAGAGAGAG"></bt:queryString>
              </bt:hit>
>         </line>
>     </g>
> </svg>
>  
> but it's failing to accept the XML as a valid SVG when using Batik's
> Java JSVGCanvas object. However, Mozilla firefox can view the image
> fine.
> 
> Can someone let me know what I'm doing wrong?

The big problem is that with the DTD method you are adding new elements
to the SVG namespace. When the viewer hits one, it has no idea how to
render the new element.

On the other hand, if the elements are in a different namespace, the
viewer can safely ignore them. It can assume that those elements are
meant for someone else to deal with.

I've used this tactic before with some success. In fact, you can even
access these elements through scripting, so they can contain
information you use to modify the SVG further later.

G. Wade
-- 
It is wise to remember that you are one of those who can be fooled some
of the time.                                       -- Laurence J. Peter

Received on Tuesday, 14 April 2009 11:58:04 UTC