2010-07-13 52 views
5

如何以XML格式表示以下數據?如何用XML表示以下數據?

commandA     (a | b | c) 

position = pos [(m | n | o)] 

[space = space] [(m|n|o)]  

[option1] 

[option2 = "Hello"] 

[option3] 

注: [] - >表示可選的,

() - >表示強制性

| - >表示值

例如人:

commandA a position = 1.0<m> space = 2.0<n> option1 option2="Hello" 

如何有效地用XML表示這個數據?

我想是這樣的,

<command name="commandA" position = "position" > 
    <option name="option1"/> 
    <option name="option2" value = "Hello"/> 
    <option name="option3"/> 
</command> 

但如何處理即a|b|c和位置即m|n|o指令值?

編輯: 命令:語法:

commandA(A | B | C)POS = 0 [W | X | Y | Z] [溫泉= 0.0 [W | X | Y | Z]] [海峽= 「你好」]

commandA一個POS =0瓦特溫泉= 0.0z海峽= 「你好」

我想是這樣的,

<command name="commandA"> 
<direction> 
    <direction name="a"/> 
    <direction name="b"> 
    <direction name="c"/> 
</direction> 
<parameter> 
    <position value="pos=0" /> 
    <spacing value="spa=0.0" /> 
    <options> 
     <option name="w"/> 
     <option name="x"/> 
     <option name="y"/> 
     <option name="z"/> 
    </options> 
</parameter> 
<string value="str=" /> 
</command> 

對此有何建議?

+4

研究創建XML DTD或模式以將某些屬性限制爲某些值。 DTD更容易編寫,模式更靈活。 – 2010-07-13 05:55:29

+0

謝謝。由於實現約束,我正在尋找簡單的XML表示。 – 2010-07-13 05:59:38

+0

DTD是格式良好的XML。 DTD甚至可以直接放置在XML文件中。 – 2010-07-13 06:41:39

回答

4

這樣的事情呢。它結合了標籤,引導自動完成,與命令DOM標籤一起:

<ac:autocomlete> 
    <command> 
    <command-name>commandA</command-name> 
    <separator> </separator> 
    <ac:choice> 
     <command-type>a</command-type> 
     <command-type>b</command-type> 
     <command-type>c</command-type> 
    </ac:choice> 
    <separator> </separator> 
    <pos> 
     <pos-text>pos=</pos-text> 
     <pos-value><ac:match regex="\d+"/></pos-value> 
     <ac:optional> 
      <ac:choice> 
      <pos-unit>w</pos-unit> 
      <pos-unit>x</pos-unit> 
      <pos-unit>y</pos-unit> 
      <pos-unit>z</pos-unit> 
      </ac:choice> 
     </ac:optional> 
    </pos> 
    <ac:optional> 
     <spa-separator> </spa-separator> 
     <spa> 
      <spa-text>spa=</spa-text> 
      <spa-value><ac:match regex="\d+\.\d+"/></spa-value> 
      <ac:optional> 
      <ac:choice> 
       <spa-unit>w</spa-unit> 
       <spa-unit>x</spa-unit> 
       <spa-unit>y</spa-unit> 
       <spa-unit>z</spa-unit> 
      </ac:choice> 
      </ac:optional> 
     </spa> 
    </ac:optional> 
    <ac:optional> 
     <arg-separator> </arg-separator> 
     <arg-name>str=</arg-name> 
     <arg-value><ac:match regex='"[^"]*"'/></arg-value> 
    </ac:optional> 
    </command> 
</autocomlete> 

自動完成代碼文字元素的文字完全匹配一次,除非它被包含在choiceoptional標籤,相應地改變行爲。我已經將這些自動完成標籤放在一個單獨的名稱空間中,將自動完成的代碼識別的內容和DOM是什麼進行了區分,但是如果不想要的話,您不必維護單獨的名稱空間。

match標記根據正則表達式匹配/完成文本。構建DOM時,匹配標記將被輸入的文本文本替換。

自動完成標籤告訴自動完成如何處理子標籤。子標記的名稱是任意的,並且不會被自動完成使用,但可以用於爲用戶輸入的命令構建DOM:一旦自動完成建立了模型,並且自動完成標記刪除,剩下的是用戶輸入的命令的DOM。

+0

謝謝你的mdma的示例xml和詳細的解釋。 – 2010-07-26 15:55:47

3
<command value="a"> 
    <position type="m">1.0</position> 
    <space type="m">2.0</space> 
    <option1 /> 
    <option2>Hello</option2> 
    <option3 /> 
</command> 

這是你在找什麼?或者你想要一個DTD?

+0

謝謝。 a,b,c和m,n,o是固定的。如何存儲所有這些?另外 m = 1.0或m = 2.0是虛擬值。這些值取自用戶。基本上我正在嘗試基於上下文的自動完成使用這個XML文件。 – 2010-07-13 06:08:02

+2

RP,如eclipse這樣的平臺將添加自動完成和彈出幫助,如果XML文件包含或引用具有適當約束的DTD。 – 2010-07-13 06:40:43

+0

是的。但是我正在開發一個自定義編輯器,它具有自己的自動完成支持。 – 2010-07-13 07:08:05