Использование идентификаторов / IDREF в документах SVG

Я хочу объединить несколько фрагментов SVG из разных исходных документов в один итоговый документ. Чтобы избежать конфликтов идентификаторов, мне придется "пространство имен" идентификаторов каждого исходного документа, добавив к ним префикс уникальной строки.

Я могу использовать XPath, чтобы найти все объявления ID в документах SVG (например, //@id). Я мог бы заменить идентификаторы, напрямую манипулируя DOM или выполняя некоторые регулярные выражения (или их комбинацию). В качестве примечания: я делаю все это с помощью PHP, и скорость / производительность не имеют большого значения, так что замены в регулярных выражениях просто хороши.

Пока что я лечу любой атрибут с локальным именем id как объявление идентификатора, например, например

<clipPath id="a">...</clipPath>

и мне удается заменить соответствующие IDREF этого синтаксиса (то есть, когда предшествует #):

<g clip-path="url(#a)">...</g>

Теперь это мои вопросы:

  1. Есть ли в SVG какие-либо другие атрибуты, кроме тех, которые имеют локальное имя id это также объявления ID? Какие?
  2. Существуют ли какие-либо другие синтаксисы IDREF в SVG, кроме приведенного выше (предшествующий #)? Какие?
  3. Есть ли какие-либо ресурсы об идентификаторах / IDREF в SVG, о которых мне следует знать?
  4. Существуют ли какие-либо потенциальные конфликты, кроме дублирования идентификаторов при объединении документов SVG?

Спасибо за любые подсказки!:)

1 ответ

Решение
  1. Теоретически можно сказать, что любой конкретный атрибут имеет тип ID с объявлением DOCTYPE. Смотрите спецификацию XML. Однако допускается только один атрибут ID на элемент (ограничение допустимости). И в любом случае, если вы добавите собственный атрибут ID в SVG, как это, я бы сказал, что это больше не SVG-контент.

    Другая возможность xml:id, что не рекомендуется. Смотрите SVG Tiny 1.2.

  2. Что вы имеете в виду? Синтаксис внутри url(...) это IRI, так что это может быть, например, http://example.com/example.svg#foo, Обычно это просто фрагмент, но не всегда.

  3. Глава о связывании спецификации svg, спецификации xml и спецификации xml:id.

  4. Определенные селекторы CSS могут работать только в одном конкретном документе SVG (это зависит). Если вы меняете идентификаторы при объединении двух документов, то таблицы стилей, возможно, придется обновить, чтобы учесть это.

Другие вопросы по тегам