2013-08-01 26 views
0

我想将来自不同源文档的几个SVG片段组合成一个结果文档。为了避免ID冲突,我必须通过为每个源文档的ID添加一个唯一字符串来“命名空间”。在SVG文档中使用ID/IDREFs

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

到目前为止,我将任何属性都以本地名称id作为ID声明处理,例如,

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

和我(当被# preceeded IE)替换该语法对应IDREF的成功:

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

现在,这些是我的问题:

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

感谢您的任何提示! :)

回答

1
  1. 理论上它可以说任何一个特定属性的类型为ID的使用DOCTYPE声明。请参阅XML specification。但是,每个元素只允许有一个ID属性(有效性约束)。无论如何,如果你确实为SVG添加了一个自定义ID属性,我会认为它不再是真正的SVG内容。其他可能性是xml:id,这是不鼓励的。见SVG Tiny 1.2

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

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

  4. 某些CSS选择器可能只能在一个特定的svg文档中工作(具体取决于)。如果在合并两个文档时更改ID,则可能还需要更新样式表,以便将其考虑在内。

+0

2.您还需要处理'xlink:href'引用,如在''和其他元素中找到。例如,请参阅:http://www.w3.org/TR/SVG/struct。html#ImageElement –

+0

感谢@Erik的回答,这肯定涵盖了一些有趣的观点,但是对于我的具体问题,部分看起来有点像一般的XML讲座。因此,请允许我重新说明:除引用的SVG文档之外,是否还有其他ID-IDREF参考模式([id/xml:id attribute])(http://www.w3.org/ TR/SVGTiny12/struct.html#IDAttribute)+ IRI引用(如果引用同一个文档,后者只是相关的),而不是CSS选择器),它们在合并几个SVG文档时可能是相关的?谢谢! –

+0

你是对的,@BigBadaboom,'xlink:href'属性也带有IRI引用,所以这些都是相关的,以及只要它们引用同一个文档。感谢提示! –