Использование идентификаторов / IDREF в документах SVG
Я хочу объединить несколько фрагментов SVG из разных исходных документов в один итоговый документ. Чтобы избежать конфликтов идентификаторов, мне придется "пространство имен" идентификаторов каждого исходного документа, добавив к ним префикс уникальной строки.
Я могу использовать XPath, чтобы найти все объявления ID в документах SVG (например, //@id
). Я мог бы заменить идентификаторы, напрямую манипулируя DOM или выполняя некоторые регулярные выражения (или их комбинацию). В качестве примечания: я делаю все это с помощью PHP, и скорость / производительность не имеют большого значения, так что замены в регулярных выражениях просто хороши.
Пока что я лечу любой атрибут с локальным именем id
как объявление идентификатора, например, например
<clipPath id="a">...</clipPath>
и мне удается заменить соответствующие IDREF этого синтаксиса (то есть, когда предшествует #
):
<g clip-path="url(#a)">...</g>
Теперь это мои вопросы:
- Есть ли в SVG какие-либо другие атрибуты, кроме тех, которые имеют локальное имя
id
это также объявления ID? Какие? - Существуют ли какие-либо другие синтаксисы IDREF в SVG, кроме приведенного выше (предшествующий
#
)? Какие? - Есть ли какие-либо ресурсы об идентификаторах / IDREF в SVG, о которых мне следует знать?
- Существуют ли какие-либо потенциальные конфликты, кроме дублирования идентификаторов при объединении документов SVG?
Спасибо за любые подсказки!:)
1 ответ
Теоретически можно сказать, что любой конкретный атрибут имеет тип ID с объявлением DOCTYPE. Смотрите спецификацию XML. Однако допускается только один атрибут ID на элемент (ограничение допустимости). И в любом случае, если вы добавите собственный атрибут ID в SVG, как это, я бы сказал, что это больше не SVG-контент.
Другая возможность
xml:id
, что не рекомендуется. Смотрите SVG Tiny 1.2.Что вы имеете в виду? Синтаксис внутри
url(...)
это IRI, так что это может быть, например,http://example.com/example.svg#foo
, Обычно это просто фрагмент, но не всегда.Глава о связывании спецификации svg, спецификации xml и спецификации xml:id.
Определенные селекторы CSS могут работать только в одном конкретном документе SVG (это зависит). Если вы меняете идентификаторы при объединении двух документов, то таблицы стилей, возможно, придется обновить, чтобы учесть это.