XML with DTDs
Exercise 1 – Create an internal DTD for your XML file
- Look up your XML code describing the film from last week. Ensure that your XML is well-formed and includes all necessary elements.
- List the data points required to describe your favorite movie. You can look up the film on IMDB.com
- Then create an INTERNAL DTD to describe your file. Please ensure you write this code manually to help consolidate the lecture content.
- Validate your XML file using an XML validator. Create CSV files to describe the films according to the data points you decided on above.
xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE movies [
<!ELEMENT movies (movie)*>
<!ELEMENT movie (title, director, year, release_date, language, genre, rating, duration, cast, plot)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT director (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT release_date (#PCDATA)>
<!ELEMENT language (#PCDATA)>
<!ELEMENT genre (#PCDATA)>
<!ELEMENT rating (#PCDATA)>
<!ELEMENT duration (#PCDATA)>
<!ELEMENT cast (actor*)>
<!ELEMENT actor (#PCDATA)>
<!ATTLIST actor prefix CDATA #REQUIRED>
<!-- #REQUIRED表示必选属性 -->
<!-- <!ATTLIST actor prefix CDATA #IMPLIED> #IMPLIED表示可选属性 -->
<!ELEMENT plot (#PCDATA)>
]>
<!-- This XML document contains a list of movies with their details -->
<movies>
<movie>
<title>Home Alone</title>
<director>Chris Columbus</director>
<year>1990</year>
<release_date>1990-11-16</release_date>
<language>English</language>
<genre>Comedy & Family</genre>
<rating>7.6</rating>
<duration>103</duration>
<cast>
<actor prefix="Mr.">Macauley Culkin</actor>
<actor prefix="Mr.">Joe Pesci</actor>
<actor prefix="Mr.">Daniel Stern</actor>
<actor prefix="Mrs.">Catherine O'Hara</actor>
</cast>
<plot>
An eight-year-old boy is accidentally left behind when his family flies to Paris for their Christmas vacation. He must defend his home against two burglars.
</plot>
</movie>
<movie>
<title>Zootopia</title>
<director>Byron Howard</director>
<year>2016</year>
<release_date>2016-03-17</release_date>
<language>English</language>
<genre>Animation & Adventure</genre>
<rating>8.0</rating>
<duration>108</duration>
<cast>
<actor prefix="Ms.">Ginnifer Goodwin</actor>
<actor prefix="Mr.">Jason Bateman</actor>
<actor prefix="Mr.">Idris Elba</actor>
<actor prefix="Ms.">Shakira</actor>
</cast>
<plot>
In a city of anthropomorphic animals, a bunny cop and a cynical con artist fox must work together to uncover a conspiracy.
</plot>
</movie>
</movies>Exercise 2 – Create an external DTD for the CustomerDB file
Good Cinemas have given you 3 data files (supplied in CSV format). They want to transmit this data into one XML vocabulary to pass it to developers in one go.
- Create a single XML file with three random rows of data from CustomerDB (you will need to manually add the relevant Geo and Films data to the transactions).
- Check that the XML file is well written.
- Create a DTD file to describe this data (link the DTD as an EXTERNAL DTD.)
- Check your work by using an XML validator.
xml
<!ELEMENT Customers (Customer+)>
<!ELEMENT Customer (FirstName, LastName, FullName, Cinema, Film, Tickets, Date, Time, Movie, City, Region, Country)>
<!ELEMENT FirstName (#PCDATA)>
<!ELEMENT LastName (#PCDATA)>
<!ELEMENT FullName (#PCDATA)>
<!ELEMENT Cinema (#PCDATA)>
<!ELEMENT Film (#PCDATA)>
<!ELEMENT Tickets (#PCDATA)>
<!ELEMENT Date (#PCDATA)>
<!ELEMENT Time (#PCDATA)>
<!ELEMENT Movie (Certificate, Duration)>
<!ELEMENT Certificate (#PCDATA)>
<!ELEMENT Duration (#PCDATA)>
<!ELEMENT City (#PCDATA)>
<!ELEMENT Region (#PCDATA)>
<!ELEMENT Country (#PCDATA)>xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE Customers SYSTEM "CustomerdbDTD.dtd">
<!-- This XML document contains a list of customers with their details -->
<Customers>
<Customer>
<FirstName>Lawrence</FirstName>
<LastName>Aadimulam</LastName>
<FullName>Aadimulam, Lawrence</FullName>
<Cinema>Birmingham</Cinema>
<Film>Godzilla</Film>
<Tickets>1</Tickets>
<Date>26/07/2014</Date>
<Time>20:00:00</Time>
<Movie>
<Certificate>12</Certificate>
<Duration>123</Duration>
</Movie>
<City>Birmingham</City>
<Region>Midlands</Region>
<Country>England</Country>
</Customer>
</Customers>