2016-11-06 3 views
0

Ich versuche, eine kleine Validierung für diese XML zu bauenDTD-Validierung für kleine und einfache xml

<adr> 
    <parameters> 
    <type><text>work</text></type> 
    <label><text>Simon Perreault 2875 boul. Laurier, suite D2-630 Quebec, QC, Canada G1V 2M2</text></label> 
    </parameters> 
    <pobox/> 
    <ext/> 
    <street>2875 boul. Laurier, suite D2-630</street> 
    <locality>Quebec</locality> 
    <region>QC</region> 
    <code>G1V 2M2</code> 
    <country>Canada</country> 
</adr> 

Unter Berücksichtigung pobox hat zwei Attribute cod und region, was soll ich mit dieser DTD fehlt? Kann mir jemand helfen?

<?mlx version ="1.0"?> 
<!DOCTYPE ADR [ 

<!ELEMENT ADR (PARAMETERS, POBOX, EXT, STREET, LOCALITY, REGION, CODE, COUNTRY)> 
<!ELEMENT PARAMETERS (#PCDATA)> 
<!ELEMENT POBOX (#PCDATA)> 
<!ELEMENT EXT (#PCDATA)> 
<!ELEMENT STREET (#PCDATA)> 
<!ELEMENT LOCALITY (#PCDATA)> 
<!ELEMENT REGION (#PCDATA)> 
<!ELEMENT CODE (#PCDATA)> 
<!ELEMENT COUNTRY (#PCDATA)> 

<!ATTLIST POBOX COD CDATA #IMPLIED> 
<!ATTLIST POBOX REGION CDATA #IMPLIED> 
]> 
+0

Nur ein Kommentar: Ihre processing-instruction auf der Oberseite der DTD falsch ist (''). Vielleicht würde das etwas verbessern. – zx485

Antwort

0

Hier sind ein paar Dinge, die ich bemerkt:

  • Wie in einem Kommentar erwähnt, Ihre XML-Deklaration ist ungültig. Es verursacht wahrscheinlich keine Probleme, weil der Parser nicht weiß, was mlx bedeutet und es wird als eine normale Verarbeitungsanweisung behandelt.
  • Fall ist wichtig. Wenn Sie ein Element adr haben, sollte es nicht als ADR deklariert werden.
  • In der XML-Datei hat parameters zwei untergeordnete Elemente, die jedoch nur #PCDATA zulassen.
  • Es ist nicht falsch, aber es ist einfacher zu lesen, wenn Sie nur eine ATTLIST Deklaration für ein Element haben.
  • Wenn Sie eine separate DTD-Datei haben, wird normalerweise die DOCTYPE-Deklaration nicht verwendet. Der DOCTYPE befindet sich normalerweise in der XML-Instanz selbst. Ich bin mir nicht sicher, ob Ihnen das Probleme bereitet oder nicht (wahrscheinlich hängt es davon ab, wie Sie das XML validieren). Es könnte auch in der gleichen Datei sein, aber Sie haben es in der Frage aufgeteilt.

Hier ist eine aktualisierte Version Ihrer DTD:

<?xml version="1.0"?> 
<!DOCTYPE adr [ 
<!ELEMENT adr (parameters, pobox, ext, street, locality, region, code, country)> 
<!ELEMENT parameters (type, label)> 
<!ELEMENT type (text)> 
<!ELEMENT label (text)> 
<!ELEMENT text (#PCDATA)> 
<!ELEMENT pobox (#PCDATA)> 
<!ATTLIST pobox 
    cod CDATA #IMPLIED 
    region CDATA #IMPLIED> 
<!ELEMENT ext (#PCDATA)> 
<!ELEMENT street (#PCDATA)> 
<!ELEMENT locality (#PCDATA)> 
<!ELEMENT region (#PCDATA)> 
<!ELEMENT code (#PCDATA)> 
<!ELEMENT country (#PCDATA)> 
]> 
+0

vielen Dank. –

+0

@FernandoCorreia - Sie sind herzlich willkommen. Bitte überlege, diese Antwort zu akzeptieren. (stackoverflow.com/help/someone-answers) –