2016-08-28 4 views
1

Ich habe einen SQL-Kurs gestartet und ich bin gerade in XML, kann aber nicht über diese beiden Übungen hinaus kommen, die mir immer wieder Fehler machen.Probleme mit zwei DTD-Übungen

Übung 1 XML: https://prod-c2g.s3.amazonaws.com/db/Winter2013/files/courses-ID.xml

Mein Code:

<!ELEMENT Course_Catalog (Department*)> 

<!ELEMENT Department (Title, Course+, Professor+, Lecturer?)> 
<!ELEMENT Course (Title, Description?)> 
<!ELEMENT Description (Courseref)> 
<!ELEMENT Professor (First_Name, Middle_Initial?, Last_Name)> 
<!ELEMENT Lecturer (First_Name, Middle_Initial?, Last_Name)> 

<!ATTLIST Department Code IDREFS #REQUIRED 
        Chair IDREFS #REQUIRED> 
<!ATTLIST Course Number ID #REQUIRED 
       Prerequisites IDREFS #IMPLIED 
       Instructors IDREFS #REQUIRED 
       Enrollment CDATA #IMPLIED> 
<!ATTLIST Professor InstrID IDREF #REQUIRED> 
<!ATTLIST Lecturer InstrID IDREF #REQUIRED> 
<!ATTLIST Courseref Number IDREF #REQUIRED> 

<!ELEMENT Title (#PCDATA)> 
<!ELEMENT Description (#PCDATA)> 
<!ELEMENT First_Name (#PCDATA)> 
<!ELEMENT Middle_Initial (#PCDATA)> 
<!ELEMENT Last_Name (#PCDATA)> 
<!ELEMENT Courseref (#PCDATA)> 

Übung 2 XML: https://prod-c2g.s3.amazonaws.com/db/Winter2013/files/countries.xml

Mein Code:

<!ELEMENT countries (Country*)> 

<!ELEMENT Country (City? | Language?)*> 
<!ELEMENT City (Name, Population)> 

<!ATTLIST Country Name ID #REQUIRED 
        Population CDATA #REQUIRED 
        Area CDATA #REQUIRED> 
<!ATTLIST Language Percentage CDATA #REQUIRED> 

<!ELEMENT Language (#PCDATA)> 
<!ELEMENT Name (#PCDATA)> 
<!ELEMENT Population (#PCDATA)> 

Zuerst gibt man mir diesen Fehler:

/tmp/tmpfFfDHT.dtd:19: parser error : ATTLIST: no name for Attribute <!ELEMENT Title (#PCDATA)>

Zweitens gibt man mir diesen Fehler:

/home/sandbox/countries.xml:4: element country: validity error : No declaration for element country

EDIT: Edited einige Fehler Leute haben darauf hingewiesen, aber beide Übungen geben mir immer noch Fehler.

+0

Welche natürlich was bietet den Schülern keine Hilfe? –

+0

Nun, es ist nicht so, dass es keine Hilfe anbietet, es gibt ein ganzes Forum für Fragen und Antworten, aber ich habe dort gepostet und niemand hat überhaupt geantwortet. :/ –

+0

Sie haben gnädige Hilfe zu den genauen Fehlern erhalten, die Sie gepostet haben. Ihre Antwort auf diese Hilfe zeigt an, dass Sie jemanden suchen, der all Ihre Übungen für Sie durchführt, nicht dass Sie daran interessiert sind zu lernen. Tut mir leid, aber so funktioniert diese Seite nicht, und es ist auch nicht das Beste für deine Ausbildung. – kjhughes

Antwort

2

Für beide Beispiele nehme ich an, dass nur DTD-Änderungen erlaubt sind und nicht Änderungen an der XML.

Beispiel DTD # 1

Folgende DTD Änderungen waren notwendig für die XML zu validieren:

  • Die Elementdeklaration für Department nur bei einem Auftreten von einer oder mehreren Professor Elementen ermöglicht, gefolgt von null oder eins Lecturer Element. Ich habe dies geändert, um ein oder mehrere Vorkommnisse zu ermöglichen. (Wrapped Professor+, Lecturer? in Parens und hinzugefügt + Auftreten Indikator.)
  • Es gibt zwei Element Deklarationen für Description. In der XML hat Description gemischten Inhalt. Gemischter Inhalt bedeutet, dass es sowohl Text- als auch untergeordnete Elemente enthält. Es gibt nur eine Möglichkeit, gemischten Inhalt zu deklarieren, also habe ich die erste Deklaration aktualisiert und die zweite Deklaration gelöscht. (Siehe unten.)
  • Es wurden mehrere Attribute mit dem Attributtyp IDREF deklariert. Wenn ein Attribut als IDREF deklariert ist und im XML verwendet wird, muss dieser Wert auch in einem Attribut vorhanden sein, das als ID deklariert ist. Ich habe einige der IDREF-Typen in ID für Attribute geändert, die IDs zu sein scheinen. (Siehe unten.
  • ) ist

Hier ist die neue DTD:

<!ELEMENT Course_Catalog (Department*)> 

<!ELEMENT Department (Title, Course+, (Professor+, Lecturer?)+)> 
<!ELEMENT Course (Title, Description?)> 
<!ELEMENT Description (#PCDATA|Courseref)*> 
<!ELEMENT Professor (First_Name, Middle_Initial?, Last_Name)> 
<!ELEMENT Lecturer (First_Name, Middle_Initial?, Last_Name)> 

<!ATTLIST Department Code ID #REQUIRED 
        Chair IDREFS #REQUIRED> 
<!ATTLIST Course Number ID #REQUIRED 
       Prerequisites IDREFS #IMPLIED 
       Instructors IDREFS #REQUIRED 
       Enrollment CDATA #IMPLIED> 
<!ATTLIST Professor InstrID ID #REQUIRED> 
<!ATTLIST Lecturer InstrID ID #REQUIRED> 
<!ATTLIST Courseref Number IDREF #REQUIRED> 

<!ELEMENT Title (#PCDATA)> 
<!ELEMENT First_Name (#PCDATA)> 
<!ELEMENT Middle_Initial (#PCDATA)> 
<!ELEMENT Last_Name (#PCDATA)> 
<!ELEMENT Courseref (#PCDATA)> 

Hier ist ein diff zwischen DTD (links) und der modifizierten DTD (rechts):

exercise 1 diff report

Beispiel DTD # 2

Die folgenden DTD-Änderungen waren für das XML erforderlich, um va lidate:

  • Die Elementnamen in der DTD haben alle den ersten Großbuchstaben. Das XML hat alle Kleinbuchstaben. Die Elementnamen in der DTD wurden in Kleinbuchstaben geändert.
  • In der Elementdeklaration für country bedeutet das Modell (city? | language?)* null oder eins city Elemente oder null oder eins language Elemente Null oder mehrmals. Ich vereinfachte dies zu (city|language)* was city oder language Elemente Null oder mehr bedeutet. Diese Änderung war nicht erforderlich.
  • Das name Attribut für das country Element wurde mit dem Typ ID deklariert. Das eigentliche XML schien jedoch keine IDs zu haben. Zum Beispiel ist Antigua and Barbuda keine gültige ID. Ich habe dieses Attribut in den Typ CDATA geändert. Hier

ist die neue DTD:

<!ELEMENT countries (country*)> 

<!ELEMENT country (city|language)*> 
<!ELEMENT city (name, population)> 

<!ATTLIST country name CDATA #REQUIRED 
     population CDATA #REQUIRED 
     area CDATA #REQUIRED> 
<!ATTLIST language percentage CDATA #REQUIRED> 

<!ELEMENT language (#PCDATA)> 
<!ELEMENT name (#PCDATA)> 
<!ELEMENT population (#PCDATA)> 

Hier ist ein diff zwischen DTD (links) und der modifizierten DTD (rechts):

exercise 2 diff report

+0

Danke. Aber es gibt mir immer noch Fehler, beide Übungen. Kannst du irgendwelche anderen Fehler sehen? :/ –

+0

@Evan - Ich habe meine Antwort aktualisiert. Bitte werfen Sie einen Blick und lassen Sie es mich wissen, wenn Sie irgendwelche Fragen haben. –

+0

Danke! Ich muss gehen, werde es heute Abend versuchen! Ich hoffe ich kann es endlich mit deiner Hilfe lösen ^^ –

1

Ich kann nicht sofort den ersten Fehler sehen, aber der zweite ist, dass "Land" und "Land" zwei verschiedene Namen sind.

+0

Danke! Das behebt es nicht, sondern gibt mir immer einen Fehler. :/ –

0

Übung 1: hinzufügen > am Ende dieser Zeile in der DTD:

<!ATTLIST Courseref Number IDREF #REQUIRED 

Übung 2: XML-Elementnamen sind Groß- und Kleinschreibung (als Michael Kay bereits erwähnt). Machen Sie Ihre XML- und DTD-Vereinbarung für den Fall country.

+0

Danke. Hat es getan, aber das Problem bleibt bestehen. : S –