Ответ 1
Вы можете использовать foreignObject. Небольшой пример:
<?xml version="1.0" standalone="yes"?>
<svg xmlns = "http://www.w3.org/2000/svg" width="100%" height="100%">
<rect x="25" y="25" width="250" height="200" fill="#ff0000" stroke="#000000"/>
<foreignObject x="50" y="50" width="200" height="150">
<body xmlns="http://www.w3.org/1999/xhtml">
<form>
<input type="text"/>
<input type="text"/>
</form>
</body>
</foreignObject>
<circle cx="60" cy="80" r="30" fill="#00ff00" fill-opacity="0.5"/>
</svg>
Это стандартный SVG, но я добавил элементы HTML между прямоугольником и кругом, используя тег foreignObject. Порядок стека соблюдается, причем круг находится перед входами.
Другие решения существуют в "чистом" SVG, но они в значительной степени полагаются на JavaScript. Вот пример: http://www.carto.net/papers/svg/gui/textbox/