2011-06-13 53 views
2

我爲Android創建了一個SVG圖像解析器類,它很好地工作,並且爲了我想要的目的非常完整。我目前正在撰寫的應用程序使用我預先在Inkscape中設計的建築平面圖。現在,我想要做的是能夠在計劃中標記特定的X,Y點,這些點不會被渲染,但只會通知軟件應用程序計劃中特定點的位置。這樣應用程序就可以在運行時以編程方式在這些點上放置各種標記。在SVG圖像中插入元數據「標記」 - 這可能嗎?

它的實際編碼不是問題;我目前已經使用文本字符串工作,儘管我可以使用各種對象。我所做的是放置一個文本字符串,並將文本字符串的ID屬性設置爲特殊前綴,如「_meta」。然後,我的SVG解析器識別該前綴,並將字符串的X,Y座標與放置在「_meta」前綴之後的ID屬性中的任何其他元數據一起記錄。該字符串不會呈現爲屏幕;它純粹用於告訴軟件某個特定的點。

這個工作,我可以繼續這樣做,但我想知道的是是否有更正確或更優雅的方式來做到這一點。我研究過SVG規範,我對標準元數據標籤的理解是它們只能傳達關於圖像的信息。據我所知,沒有任何物體專門用來標記任何X,Y點。使用對象的ID字段傳遞由程序解析的信息,但它看起來有點錯誤和濫用ID屬性。

我應該考慮其他方法嗎?

感謝,

崔佛

+0

如果您編寫解析器,是否有任何理由不能添加新的名稱空間並尋找它? – Jess 2011-06-13 15:04:38

+0

謝謝安德魯。我可以,但最好能夠使用Inkscape的GUI在計劃上標記點,而不是手動編輯XML文件(使用Inkscape的XML編輯器或其他方式)。其結果是,我或其他用戶可以爲應用程序創建新計劃,而不必將特殊標記座標輸入到文件中。也許對此唯一現實的長期答案是我編寫一個單獨的平面圖創建者應用程序,它提供了特殊的標記功能 - 並按照您的建議將它們插入到自定義名稱空間下。 – Trevor 2011-06-13 15:14:13

回答

2

有沒有標記,此刻在SVG感興趣的特定點元素。但是,SVG工作組在討論想要連接表示圖中節點的元素時,添加了一個點元素。

你會使用這兩種方法的罰款:

  • 自定義命名空間的元素和/或爲您的數據
  • 'role'屬性及其相關屬性的屬性,看here
  • 裏面的值'id',因爲你已經完成了,注意並不是所有的字符都可以在'id'屬性中使用
  • data- *屬性(假設這些會在HTML5中被允許,即使它尚未根據SVG規範有效)

在任何情況下,要小心的事情是使用自定義非名稱空間屬性和元素,因爲這可能會與將來添加到SVG規範中相沖突。