2017-04-16 38 views
0

我必須在xml中表示以逗號分隔的字符串。第一個字符串應該對應指數爲0,第二個應該對應於指數1等在xml/xsd中表示逗號分隔的cData

這是我打算做

選項1

<Representation> 
<indexes>0,1,2</indexes> 
<values><![CDATA[x,y,z]]>,![CDATA[x1,y1,z1]]>,![CDATA[x2,y2,z2]]></values> 
</Representation> 

選項2

<Representation> 
<index id="0">x,y,z</index> 
<index id="1">x1,y1,z1</index> 
<index id="2">x2,y2,z2</index> 
</Representation> 

我更喜歡選項1,因爲我可以將所有內容都表示爲4行,而不是選項2,這意味着假設有100個索引要表示,選項1在兩行中完成,而在選項2中,線數會增加。選項1是否有效,我不確定?

+0

我打算投票結束「基於意見」,因爲如果沒有看到您的設計標準,我們不能建議哪種設計最好。 –

回答

1

這兩種XML設計的一個主要缺點是它們無法分別標記看起來很重要的數據項(x,y和z)。 XML的消費者通常不應該被迫在XML解析之外進一步解析。

試試這個:

<Representation> 
    <group> 
    <item>x</item> 
    <item>y</item> 
    <item>z</item> 
    </index> 
    <!-- ... --> 
</Representation> 

其它注意事項:

  • 儘量選擇域合適,而不是通用名稱。
  • 僅僅標記位置的標識是多餘的。
  • 對於某些目的,group上的@separator屬性可能有用。
  • 除非x,y和z用於標記,否則不需要CDATA 您特別不希望將標記解析爲標記 - 例如,如果您正在編寫關於XML的書並且想要顯式地顯示 XML示例。
+0

@ kjhughes-如果我用域特定的屬性替換索引和值是選項1在逗號分隔的CDATA語法上不正確?考慮一個再現是一個二維數組。 – 100pipers

+0

請解釋您對CDATA的興趣。你似乎無視我寫的關於它的目的。 – kjhughes

+0

@ kjhuges-根本沒有,我沒有忽略你的觀點,特別是消費者不應該被迫解析超越XML解析的事實。它說得很好。基本上,我擁有的消費者可以以某種方式與選項1一起工作,即使選項2可能也不可行。因此,我想了解發布逗號分隔值的最佳方式,但索引標記爲。 – 100pipers

1

在XML模式中,您可以使用列表類型來實現選項1,但每個字符串需要用空格分隔。

+0

@ colibrisson-謝謝我會盡量使用你的建議。 – 100pipers

1

對此使用CDATA是錯誤的。使用CDATA的唯一原因是避免必須轉義特殊字符(&<)。你的數據不使用這些字符,所以CDATA是不合適的。許多XML處理技術不會向XML消費者展示CDATA邊界,所以它不是指示邏輯結構的有用方式。其次,需要非常小心地使用微語法(即屬性或元素值中的任何種類的內部非XML語法)。在某些情況下,它可能很有用,但通常情況下,與使用XML標記來表示結構相比,收件人處理數據更加困難。問題是,你正在清楚地看待XML的各種設計選項,但是你沒有給出任何關於你用來評估哪個選項是「正確」的標準的線索。這通常是寫作的易讀性,易讀性,空間經濟性和潛在的改變的一些混合,但不知道你想優化什麼,我們不能判斷。

您已經標記了問題「xsd」,我們可能會從中猜出您的一個標準是您想要一個可以在XSD中準確描述的結構。如果是這樣的話,那麼你肯定希望避免任何比空格分隔列表更復雜的語法,因爲這是XSD能夠描述的最多。