2016-04-19 2 views
1

Je voudrais décrire dans un DTD un élément MyElement qui doit composé par ELEMENTA, elementB et tout autre élément. Pour cela j'ai essayé la syntaxe:Déclarant DTD élément avec ANY et éléments requis

<!ELEMENT MYELEMENT (elementA | elementB | ANY)*> 

Mais cela ne fonctionne pas quand un élément autre que elementA ou élémentB se produit. Quelqu'un peut-il aider avec la bonne syntaxe avec DTD?

Est-ce que cela peut être fait en utilisant le schéma XSD?

Cordialement

Répondre

0

Quand vous dites "MyElement ... doit [être] composé par ELEMENTA, elementB et tout autre élément", voulez-vous dire

  • (A) Un événement de MyElement peut avoir zéro ou plus d'enfants; chaque enfant peut être nommé elementA, elementB, ou toute autre chose.

ou

  • (B) Chaque occurrence de MyElement doit avoir au moins un enfant nommé elementA, au moins un nom elementB, soit dans l'ordre, et peut avoir d'autres enfants.

ou

  • (C) Chaque occurrence de MyElement doit avoir exactement un enfant nommé elementA, exactement un nom elementB, soit dans l'ordre, et peut avoir d'autres enfants.

Si le mot-clé dans DTDs ANY étaient une sorte de joker qui correspond tout élément quel que soit le nom, le modèle de contenu que vous montrer serait possibilité de match (A). Ce n'est pas ce que le mot clé signifie, donc la déclaration que vous montrez ne fait pas ce que vous voulez: la déclaration que vous donnez signifie simplement que toute occurrence de MYELEMENT peut contenir zéro ou plusieurs éléments, à condition que chaque enfant de MYELEMENT soit nommé elementA ou elementB ou ANY. Si (A) est ce que vous voulez, il n'est pas nécessaire de spécifier elementA ou elementB du tout; tout ce dont vous avez besoin est un joker qui correspond à n'importe quel élément. DTDs ont pas de caractère générique, mais si vous ne me dérange pas de caractère permettant des données ainsi que des éléments de l'enfant, la déclaration

<!ELEMENT MYELEMENT ANY > 

se rapprocherait de vos spécifications. Dans XSD, vous utiliseriez le caractère générique xsd:any.

Si vous voulez (B) ou (C), alors XSD 1.0 peut se rapprocher; vous pouvez autoriser les éléments que vous nommez, ainsi que tous les éléments d'un espace de noms différent, en utilisant un caractère générique avec namespace="##other".

Si la commande n'a aucune signification, vous trouverez le modèle de contenu plus facile à spécifier si vous spécifiez une séquence arbitraire.(La séquence variable est nécessaire lorsqu'elle transmet des informations, lorsqu'elle ne véhicule pas d'informations, elle ne fait que compliquer la vie et ouvre un canal secret.)