2012-04-11 12 views
0

Ich habe eine XML-Datei, die für die meisten davon angegeben ist. Nur ein Element hat keine Spezifikation und kann beliebige XML-Elemente enthalten.Verwenden einer DTD zum Angeben einer XML-Datei mit einem Element mit freiem Formular

Hier sind ein Beispiel für diese xml:

<root_element> 
    <specified_element> 
    <empty_child_node/> 
    </specified_element> 
    <element_with_free_form> 
    <what><ever><xml><which><is><valid><xml> 
    </xml></valid></is></which></xml></ever></what> 
    </element_with_free_form> 
</root_element> 

Mein Verständnis von DTD ist, dass dies eine gültige Spezifikation für diese Arten von xmls sein sollte:

<?xml version="1.0" encoding="utf-8"?> 
<!ELEMENT root_element (specified_element, element_with_free_form)> 
<!ELEMENT specified_element (empty_child_node)> 
<!ELEMENT empty_child_node EMPTY> 
<!ELEMENT element_with_free_form ANY> 

hier ist das Dokument voll xml mit DTD eingebettet:

<!DOCTYPE root_element [ 
<!ELEMENT root_element (specified_element, element_with_free_form)> 
<!ELEMENT specified_element (empty_child_node)> 
<!ELEMENT empty_child_node EMPTY> 
<!ELEMENT element_with_free_form ANY> 
]> 
<root_element> 
    <specified_element> 
    <empty_child_node/> 
    </specified_element> 
    <element_with_free_form> 
    <what><ever><xml><which><valid><xml> 
    </xml></valid></which></xml></ever></what> 
    </element_with_free_form> 
</root_element> 

Was mache ich falsch?

Antwort

0

Auch wenn die element_with_free_form als ANY deklariert ist, muss jedes Element innerhalb davon deklariert werden. Das bedeutet, dass Sie auch Deklarationen für what, ever, xml, which und valid benötigen.

+0

Ist es nicht möglich, dass element_with_free_form in einer anderen Spezifikationssprache tatsächlich frei ist? – amirouche

0

Wie DevNull bereits gesagt hat, bedeutet das Schlüsselwort ANY, dass das deklarierte Element eine Mischung aus #PCDATA und einem in der DTD deklarierten Element enthalten kann.

Wenn Sie angeben möchten, dass element_with_free_form ein ausgewogenes XML enthalten kann, sind DTDs nicht die richtige Schemasprache für Sie. XSD kann solche Elemente deklarieren, sowie einige andere Variationen unterstützen wie "Es ist mir egal, wie die Struktur ist, aber die Kinder müssen alle deklariert worden sein" (was die gleiche Funktionalität wie ANY ist) und "Wenn Sie eine Deklaration haben Dafür validiere es, und wenn du keine Deklaration dafür hast, lass es fahren "(was eine gute erste Annäherung an das" Ignoriere, was du nicht verstehst "-Prinzip von HTML).