2010-07-13 2 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 то есть?

EDIT: Команда: Синтаксис:

commandA (а | B | C) позы = 0 [ш | х | у | г] [сп = 0,0 [ш | х | у | г]] [ ул = "Hello"]

commandA пос = 0W спа = 0.0z ул = "Hello"

Я пытался что-то вроде этого,

<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

Изучите создание DTD или схемы XML, чтобы ограничить определенные атрибуты определенными значениями. DTD легче писать, схемы более гибкие. –

+0

Спасибо. Я ищу простое представление XML из-за ограничений реализации. –

+0

DTD - это хорошо сформированный XML. DTD можно даже разместить непосредственно в файле XML. –

ответ

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> 

Код автозавершения соответствует дословный текст элемента ровно один раз, если он не содержится в choice или optional тег, который изменяет поведение. Я поместил эти теги автозаполнения в отдельное пространство имен, чтобы отделить то, что распознает код автозаполнения, и что такое DOM, хотя вам не нужно поддерживать отдельное пространство имен, если вы этого не хотите.

Тег match соответствует/завершает текст в соответствии с регулярным выражением. При создании DOM теги соответствия заменяются буквальным текстом, который был введен.

Автозаполненные теги сообщают автозаполнение, как иметь дело с дочерними тегами. Имена дочерних тегов являются произвольными и не используются автозаполнением, но могут использоваться при построении DOM для вашей команды, которую пользователь ввел: после того, как автозаполнение построило модель и автоматически заполнило теги удален, то, что осталось, является DOM для команды, которую пользователь вводил.

+0

Благодарим mdma за образец xml и подробное объяснение. –

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-файл. –

+2

RP, платформы, такие как eclipse, будут добавлять автоматическое завершение и всплывающее окно, если XML-файл содержит или ссылается на DTD с соответствующими ограничениями. –

+0

Yup. Но я разрабатываю настраиваемый редактор с его собственной поддержкой автоматического завершения. –

Смежные вопросы