【问题标题】:Usage of IDs / IDREFs in SVG documentsSVG 文档中 ID/IDREF 的使用
【发布时间】:2013-08-02 15:41:14
【问题描述】:

我想将来自不同源文档的多个 SVG 片段组合成一个结果文档。为了避免 ID 冲突,我必须通过在每个源文档的 ID 前面加上一个唯一的字符串来“命名空间”它们。

我可以使用 XPath 查找 SVG 文档中的所有 ID 声明(例如 //@id)。我可以通过直接操作 DOM 或做一些正则表达式魔法(或两者的组合)来替换 ID。 附带说明:我正在使用 PHP 完成所有这些工作,速度/性能并不重要,所以正则表达式替换就可以了。

到目前为止,我将本地名称为 id 的任何属性视为 ID 声明,例如

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

并且我成功地替换了此语法的相应 IDREF(即,当前面有 # 时):

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

现在这些是我的问题:

  1. 除了本地名称为id 的那些也是ID 声明的属性之外,SVG 中是否还有其他属性?哪些?
  2. 除了上述之外,SVG 中是否还有其他 IDREF 语法(之前的 #)?哪些?
  3. 是否有任何关于 SVG 中的 ID / IDREF 的资源我应该知道?
  4. 在合并 SVG 文档时,除了重复 ID 之外,是否还有其他潜在冲突?

感谢您的任何提示! :)

【问题讨论】:

    标签: xml xpath svg idref


    【解决方案1】:
    1. 理论上,可以说任何一个特定属性都是带有 DOCTYPE 声明的 ID 类型。请参阅XML specification。但是,每个元素只允许一个 ID 属性(有效性约束)。无论如何,如果您确实像这样向 SVG 添加自定义 ID 属性,我认为它不再是真正的 SVG 内容。

      另一种可能性是xml:id,这是不鼓励的。见SVG Tiny 1.2

    2. 什么意思? url(...) 中的语法是一个 IRI,所以它可以是例如 http://example.com/example.svg#foo。它通常只是一个片段,但并非总是如此。

    3. svg 规范的linking chapterxml 规范和xml:id 规范。

    4. 某些 CSS 选择器可能只适用于一个特定的 svg 文档(视情况而定)。如果您在合并两个文档时更改了 id,那么样式表可能也需要更新以考虑到这一点。

    【讨论】:

    • 2.您还需要处理xlink:href 引用,例如&lt;image&gt; 和其他元素中的引用。例如,请参阅:w3.org/TR/SVG/struct.html#ImageElement
    • 感谢@Erik 的回答,它肯定涵盖了一些有趣的观点,但就我的具体问题而言,部分XML 讲座似乎有点过多。因此,请允许我改写一下:除了引用的文件(id/xml:id attribute + IRI 参考文件(后者仅在引用同一文件时才相关)之外,在同一个 SVG 文档中是否还有其他 ID-IDREF 参考模式) 和 CSS 选择器之外的)在合并多个 SVG 文档时可能相关?谢谢!
    • 你是对的,@BigBadaboom,xlink:href 属性也带有 IRI 引用,因此只要它们引用同一个文档,这些属性也是相关的。感谢您的提示!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2013-01-20
    相关资源
    最近更新 更多