Проверьте SVG с пользовательским пространством имен по DTD - PullRequest
0 голосов
/ 30 августа 2018

Я генерирую SVG, как показано ниже

<svg xmlns="http://www.w3.org/2000/svg" xmlns:foobar="http://foobar.com">
<path d="..." foobar:foo="bar"/>
</svg>

Без пользовательского атрибута foo (и пространства имен foobar) весь SVG проверяется на соответствие DTD. Ясно, что я неправильно использую пользовательское пространство имен, поскольку добавление пространства имен foobar и связанных с ним атрибутов приводит к сбою проверки xmllint, начиная с объявления xmlns:foobar=..., которое само по себе не является элементом svg. Мое заявление неверно? Можно ли даже проверить DTD при использовании пользовательских пространств имен / атрибутов?

1 Ответ

0 голосов
/ 03 сентября 2018

Предполагая, что вы проверяете по SVG 1.1 2-е изд. DTD по его официальному URL, показанному ниже, вы можете использовать расширенные возможности настройки SVG DTD, повторно определив («выгрузив») значение пустой строки по умолчанию для объекта параметра SVG.External.attrib, чтобы оно содержало фрагменты объявления списка атрибутов. для ваших пользовательских атрибутов (плюс объявление xmlns:foobar):

<!DOCTYPE svg
  SYSTEM "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
  <!ENTITY % SVG.External.attrib
    "xmlns:foobar CDATA #IMPLIED
     foobar:foo CDATA #IMPLIED">
]>
<svg xmlns="http://www.w3.org/2000/svg"
     xmlns:foobar="http://foobar.com">
  <path d="M 0 0 z" foobar:foo="bar"/>
</svg>

SVG DTD в конечном итоге расширяет текст замены для SVG.External.attrib в отдельных объявлениях для элементов SVG. Могут быть более подходящие объекты параметров для настройки / перезаписи в зависимости от вашей цели, например SVG.Core.extra.attrib.

Обратите внимание, что документ, когда он запускается через xmllint --valid --loaddtd, выдает несвязанные предупреждения на моем компьютере с Ubuntu, где SVG DTD кэшируется локально, о чем свидетельствует быстрый ответ xmllint по сравнению с извлечением DTD через http (что приводит к другие предупреждения для меня).

...