AW: SVG selectors and namespaces handling

Hi Gerben,


thanks for this. Yes, that all sounds sensible. At the moment, I've opted to accept "un-namespaced" SVG only for the default namespace in my implementation (in which case I'm forcing the default namespace to SVG 1.1 post-parse). But I agree that accepting the "svg:" prefix in addition does make sense, too.

<It would be great if you could document and share details of how Annotorious interprets the spec, to help others create compatible implementations!>

Absolutely, will do. I'm probably ~70% done with an initial implementation. (It's really mostly about reorganizing Annotorious to work with multiple drawing tools, rather than anything spec-specific. And it's a weekend & late evening thing... so hard to tell how long those few missing lines of code might take ;-) But once I'm done, docs will go to the Annotorious project website first & I'm also happy to repost elsewhere, if there's interest.

Cheers,
Rainer



________________________________
Von: Gerben <gerben@treora.com>
Gesendet: Donnerstag, 25. Juni 2020 18:28
An: public-openannotation@w3.org
Betreff: Re: SVG selectors and namespaces handling


Hi Rainer, great to see Annotorious being ‘rebooted’. I am not an expert on SVG or XML, but I got curious myself and will contribute my observations from checking the specs. :)

The Web Annotation Model you linked to states that the value property “MUST be well-formed SVG XML”, where SVG refers to SVG 1.1.

Looking at the SVG 1.1 spec, there appears no mention of an ‘implicit’ namespace. Rather, it explicitly requires declaring the namespace[1]:

In all cases, for compliance with the Namespaces in XML Recommendation [XML-NS], an SVG namespace declaration must be provided so that all SVG elements are identified as belonging to the SVG namespace. The following are possible ways to provide a namespace declaration. An ‘xmlns’ attribute without a namespace prefix could be specified on an ‘svg’ element, which means that SVG is the default namespace for all elements within the scope of the element with the ‘xmlns’ attribute:

<svg xmlns="http://www.w3.org/2000/svg"<http://www.w3.org/2000/svg> …>
  <rect …/>
</svg>


If a namespace prefix is specified on the ‘xmlns’ attribute (e.g., xmlns:svg="http://www.w3.org/2000/svg"<http://www.w3.org/2000/svg>), then the corresponding namespace is not the default namespace, so an explicit namespace prefix must be assigned to the elements:

<svg:svg xmlns:svg="http://www.w3.org/2000/svg"<http://www.w3.org/2000/svg> …>
  <svg:rect …/>
</svg:svg>


So I suppose the example would indeed not qualify as well-formed. I don’t know if ‘well-formed SVG XML’ also implies the need for the <?xml …> tag, which the example does not contain either.

Moreover, the spec seems rather short about how to interpret SVG contents as shapes; I hope it is sufficiently clear to implement it.

In any case, I suppose that implementations would do best by following the adage “be conservative in what you do, be liberal in what you accept from others”; e.g. in absence of declarations, we could default to the svg 1.1 namespace for the ‘svg:’ prefix, as well as for the default namespace. And perhaps some day the spec could be updated or extended to be more precise. It would be great if you could document and share details of how Annotorious interprets the spec, to help others create compatible implementations!

Regards,

— Gerben

[1]: https://www.w3.org/TR/2011/REC-SVG11-20110816/struct.html#NewDocumentOverview


On 21/06/2020 11:05, Rainer Simon wrote:
Dear list,

I'm adding support for SVG shapes to Annotorious [1] and have a question regarding the handling of the namespace when embedding SVG in the SvgSelector.

The example in the documentation [2] doesn't declare a namespace, but it does use a prefix:

<svg:svg>...</svg:svg>

Is the use of "svg" as a prefix + no declaration of the namespace an existing convention for SvgSelectors? If there is a convention around omitting the namespace, wouldn't it be more straightforward to consider the default namespace to be SVG? (Especially since the svg prefix needs to be repeated for every child element?) I.e. Simplifying the example to:

<svg> ... </svg>

Or, alternatively, should implementers instead be required to include the namespace declaration in the embedded SVG? E.g.

<svg:svg xmlns:svg='http://www.w3.org/2000/svg'> ... </svg:svg>

This would leave possibilities open for different prefixes, if implementers choose to use them. Or set SVG as the default namespace.

But having a convention on *both* the prefix value to use in the selector *and* the omission of the namespace URI seems like one convention too many. Or am I on the wrong path here?

Cheers & thanks in advance,
Rainer

[1] https://recogito.github.io/annotorious/
[2] https://www.w3.org/TR/annotation-model/#svg-selector

Received on Friday, 26 June 2020 11:00:05 UTC