0

異なるソース ドキュメントからの複数の SVG フラグメントを 1 つの結果ドキュメントに結合したいと考えています。ID の競合を避けるために、各ソース ドキュメントの ID に一意の文字列をプレフィックスとして付けて、その ID を "名前空間" にする必要があります。

XPath を使用して、SVG ドキュメント内のすべての ID 宣言を見つけることができます (例: //@id)。DOM を直接操作するか、何らかの正規表現の魔法 (または両方の組み合わせ) を使用して、ID を置き換えることができます。補足として、私はこれをすべて PHP で行っていますが、速度やパフォーマンスはそれほど重要ではないため、正規表現の置き換えで問題ありません。

idこれまでのところ、ローカル名を持つ属性をID 宣言として 扱っています。たとえば、

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

そして、この構文の対応する IDREF を置き換えることに成功しました (つまり、前に a がある場合#):

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

今、これらは私の質問です:

  1. idSVGには、ID 宣言でもあるローカル名以外の属性はありますか? どれ?
  2. 上記以外の SVG の IDREF の構文はあり#ますか? どれ?
  3. SVG の ID / IDREF について知っておくべきリソースはありますか?
  4. SVG ドキュメントをマージするときに、ID の重複以外に潜在的な競合はありますか?

ヒントをありがとう!:)

4

1 に答える 1

1
  1. 理論的には、特定の 1 つの属性は、DOCTYPE 宣言を持つ ID 型であると言えます。XML 仕様を参照してください。ただし、要素ごとに 1 つの ID 属性のみが許可されます (有効性の制約)。いずれにせよ、カスタム ID 属性をそのように SVG に追加した場合、それはもはや SVG コンテンツではないと私は主張します。

    もう 1 つの可能性はxml:id、お勧めできません。SVG Tiny 1.2を参照してください。

  2. どう言う意味ですか?内部の構文url(...)は IRI であるため、たとえばhttp://example.com/example.svg#foo. 通常は単なるフラグメントですが、常にそうとは限りません。

  3. svg 仕様、xml仕様、およびxml:id仕様のリンクの章

  4. 特定の CSS セレクターは、1 つの特定の svg ドキュメントでのみ機能する場合があります (状況によって異なります)。2 つのドキュメントをマージするときに ID を変更すると、それを考慮してスタイルシートも更新する必要がある場合があります。

于 2013-08-20T12:39:25.167 に答える