2016-04-19 16 views
1

Ich möchte in einer DTD ein Element myElement beschreiben, die durch elementa, elementb und jedes anderes Element zusammengesetzt sind. Zu diesem Zweck habe ich die Syntax versucht:Deklarieren DTD Elements und mit jedem erforderlichen Elemente

Aber das funktioniert nicht, wenn ein Element anders als elementA oder elementB auftritt. Kann jemand mit der richtigen Syntax mit DTD helfen?

Kann dies mit dem XSD-Schema durchgeführt werden?

Grüße

Antwort

0

Wenn Sie sagen, "myElement ... must [wird] komponiert von Elementa, elementb und jedem anderen Elemente", meinen Sie

  • (A) Ein Auftreten von myElement haben null oder mehr Kinder; Jedes Kind kann elementA, elementB oder irgendetwas anderes genannt werden.

oder

  • (B) Jedes Auftreten von myElement sollte in beliebiger Reihenfolge mindestens ein Kind namens elementA, mindestens eines mit dem Namen elementB, haben und können andere Kinder auch haben.

oder

  • (C) Jedes Auftreten von myElement sollte genau ein Kind elementA genannt hat, genau ein elementB genannt, in beliebiger Reihenfolge und kann andere Kinder haben auch.

Wenn in DTDs das Schlüsselwort ANY eine Art Platzhalter ist, die irgendein Element angepasst, unabhängig von Namen, dann ist das Content-Modell Sie zeigen würde Möglichkeit übereinstimmen (A). Das ist aber nicht das, was das Keyword bedeutet, also macht die von Ihnen gezeigte Deklaration nicht das, was Sie wollen: Die Deklaration, die Sie geben, bedeutet einfach, dass jedes Vorkommen von MYELEMENT null oder mehr Elemente enthalten kann, solange jedes Kind von MYELEMENT benannt wird elementA oder elementB oder ANY.

Wenn (A) das ist, was Sie wollen, müssen Sie elementA oder elementB überhaupt nicht angeben; Alles was Sie brauchen ist ein Platzhalter, der zu jedem Element passt. obwohl DTDs haben keine solche Platzhalter, wenn Sie Datenzeichen sowie untergeordneten Elemente dagegen nicht erlaubt, die Erklärung

<!ELEMENT MYELEMENT ANY > 

nah an Ihrem spec kommen würde. In XSD würden Sie den xsd:any Platzhalter verwenden.

Wenn Sie wollen, ist (B) oder (C), dann kann XSD 1.0 nah kommen; Sie können die Elemente, die Sie benennen, sowie alle Elemente in einem anderen Namespace mit einem Platzhalter mit namespace="##other" versehen.

Wenn die Reihenfolge keine Bedeutung hat, können Sie das Inhaltsmodell leichter angeben, wenn Sie eine beliebige Sequenz angeben.(Eine variable Sequenz ist notwendig, wenn sie Informationen übermittelt; wenn sie keine Informationen übermittelt, verkompliziert sie nur die Lebensdauer und öffnet einen verborgenen Kanal.)