2010-07-13 6 views
5

Comment représenter les données suivantes au format XML?Comment représenter les données suivantes en XML?

commandA     (a | b | c) 

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

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

[option1] 

[option2 = "Hello"] 

[option3] 

Note: [] -> désigne en option,

() -> désigne obligatoire

| -> désigne toute personne de la valeur

Par exemple:

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

Comment représenter efficacement ces données en XML?

J'ai essayé quelque chose comme ça,

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

Mais comment gérer la valeur de commande i.e. a|b|c et la position i.e. m|n|o?

EDIT: commande: Syntaxe:

Commanda (a | b | c) pos = 0 [w | x | y | z] [spa = 0,0 [w | x | y | z]] [ str = "Bonjour"]

Commanda a pos = spa 0W = 0.0z str = "Bonjour"

J'ai essayé quelque chose comme ça,

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

Toutes les suggestions à ce sujet?

+4

Regardez dans la création d'une DTD ou d'un schéma XML pour restreindre certains attributs à certaines valeurs. Les DTD sont plus faciles à écrire, les schémas sont plus flexibles. –

+0

Merci. Je suis à la recherche d'une représentation XML simple en raison de contraintes d'implémentation. –

+0

Les DTD sont des fichiers XML bien formés. La DTD peut même être placée directement dans le fichier XML. –

Répondre

4

Que diriez-vous de quelque chose comme ceci. Il combine des balises pour guider la saisie semi-automatique, ainsi que des balises pour la commande 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> 

Le code autocomplétion correspond texte élément littéral exactement une fois, sauf si elle est contenue dans une balise choice ou optional, qui modifie le comportement en conséquence. J'ai placé ces balises autocomplete dans un espace de noms séparé, pour séparer ce que le code auto-complet reconnaît, et ce qu'est le DOM, bien que vous n'ayez pas besoin de maintenir un espace de noms séparé si vous ne le souhaitez pas. L'étiquette match correspond/complète le texte selon une expression régulière. Lors de la construction du DOM, les balises de correspondance sont remplacées par le texte littéral entré.

Les balises auto-complétées indiquent la fin automatique de la gestion des balises enfant. Les noms des balises enfant sont arbitraires et ne sont pas utilisés par l'auto-complétion, mais peuvent être utilisés dans la construction d'un DOM pour votre commande que l'utilisateur a tapé: une fois l'auto-complétion a construit le modèle et les balises auto-complétées supprimé, ce qui reste est un DOM pour la commande tapée par l'utilisateur.

+0

Merci mdma pour l'exemple de xml et explication détaillée. –

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

Est-ce ce que vous cherchez? Ou voulez-vous une DTD?

+0

Merci. a, b, c et m, n, o sont fixes. Comment les stocker tous? De plus, m = 1,0 ou m = 2,0 sont des valeurs factices. Ces valeurs sont issues de l'utilisateur. Fondamentalement, j'essaye de complétion auto basée sur le contexte en utilisant ce fichier xml. –

+2

RP, les plates-formes comme eclipse ajouteront une complétion automatique et une aide contextuelle si le fichier XML inclut ou fait référence à une DTD avec les contraintes appropriées. –

+0

Yup. Mais je développe un éditeur personnalisé avec son propre support de complétion automatique. –

Questions connexes