2010-07-13 18 views
5

¿Cómo representar los siguientes datos en formato XML?¿Cómo representar los siguientes datos en XML?

commandA     (a | b | c) 

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

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

[option1] 

[option2 = "Hello"] 

[option3] 

Nota: [] -> denota opcional,

() -> denota obligatoria

| -> denota cualquier persona del valor

Ej:

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

cómo representar con eficacia estos datos en XML?

Probé algo como esto,

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

Pero cómo manejar el valor del comando es decir a|b|c y la posición es decir m|n|o?

EDIT: de comandos: Sintaxis:

Commanda (a | b | c) pos = 0 [w | x | y | z] [spa = 0,0 [W | x | y | z]] [ cadena = "Hola"]

Commanda un pos = 0W spa = 0.0z cadena = "Hola"

probé algo como esto,

<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> 

Cualquier sugerencia acerca de esto?

+4

Busque en la creación de un DTD XML o esquema para restringir ciertos atributos a ciertos valores. Los DTD son más fáciles de escribir, los esquemas son más flexibles. –

+0

Gracias. Estoy buscando una representación XML simple debido a las limitaciones de implementación. –

+0

DTD son XML bien formado. La DTD incluso se puede colocar directamente en el archivo XML. –

Respuesta

4

¿Qué tal algo así? Combina las etiquetas para guiar la terminación automática, junto con etiquetas para el DOM comando:

<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> 

El código de terminación automática coincide con el texto elemento literal exactamente una vez, a menos que esté contenida en una etiqueta choice o optional, que cambia el comportamiento en consecuencia. Puse estas etiquetas de autocompletar en un espacio de nombres separado, para separar lo que reconoce el código de autocompletar, y qué es el DOM, aunque no es necesario mantener un espacio de nombres separado si no lo desea.

La etiqueta match coincide/completa el texto de acuerdo con una expresión regular. Al construir el DOM, las etiquetas de coincidencia se reemplazan por el texto literal que se ingresó.

Las etiquetas de autocompletar le dicen a la finalización automática cómo tratar con las etiquetas secundarias. Los nombres de las etiquetas secundarias son arbitrarias y no se usan por autocompletado, pero se pueden usar para generar un DOM para su comando que el usuario haya ingresado: una vez que la autocompletación generó el modelo y las etiquetas de autocompletar eliminado, lo que queda es un DOM para el comando que el usuario ingresó.

+0

Gracias mdma por la muestra xml y explicación detallada. –

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

¿Eso es lo que está buscando? ¿O quieres una DTD?

+0

Gracias. a, b, c y m, n, o son fijos. ¿Cómo almacenarlos a todos? También m = 1.0 o m = 2.0 son valores ficticios. Estos valores se tomarán del usuario. Básicamente, estoy tratando de completar automáticamente el contexto utilizando este archivo xml. –

+2

RP, plataformas como eclipse agregarán autocompletado y ayuda emergente si el archivo XML incluye o hace referencia a una DTD con las restricciones apropiadas. –

+0

Sí. Pero estoy desarrollando un editor personalizado con su propio soporte para autocompletar. –

Cuestiones relacionadas