(Example: Student, Campus)
Each relation has a set of attributes (or columns), with a distinct name within its relation.
(Example: label Student, Campus)
Each tuple (or row) in a relation has a value for each attribute.
(Example: some tuples for Student, Campus relations)
Each attribute has a type (or domain).
ID:char(9), name:char(25), GPA:float, age:integerWe'll use atomic (indivisible) types only for now.
Specifying the schema (on paper):
Student(ID, name, GPA, age)
Student(ID: char(9), name: char(25), GPA: float, age: integer)
Student(ID, name, GPA, age) Campus(name, enrollment) <- duplicate use of "name" okay Apply(ID, Campus) <- "ID" okay, "Campus" not okayNull values:
Keys: A key for a relation is a set of attributes such that no two tuples can have the same values for all of their key attributes.
create table
", see book and Oracle
help documents for details
http://www.w3.org/TR/2006/REC-xml-20060816/It will keep you busy for days. Less detailed references are linked from the course schedule and are required reading.
In HTML, tags denote formatting: <Title>, <I>, <Table>
, etc.
In XML, tags denote meaning of data: <Student>, <Book_Title>
, etc.
XML data can be formatted using CSS (Cascading Style Sheets) or XSL (Extensible Stylesheet Language) to translate XML to HTML.
Example: bookstore data
<?xml version="1.0" standalone="yes"?> <Bookstore> <Book ISBN="ISBN-0-13-035300-0" Price="$65" Edition="2nd"> <Title>A First Course in Database Systems</Title> <Authors> <Author> <First_Name>Jeffrey</First_Name> <Last_Name>Ullman</Last_Name> </Author> <Author> <First_Name>Jennifer</First_Name> <Last_Name>Widom</Last_Name> </Author> </Authors> </Book> <Book ISBN="ISBN-0-13-031995-3" Price="$75"> <Title>Database Systems: The Complete Book</Title> <Authors> <Author> <First_Name>Hector</First_Name> <Last_Name>Garcia-Molina</Last_Name> </Author> <Author> <First_Name>Jeffrey</First_Name> <Last_Name>Ullman</Last_Name> </Author> <Author> <First_Name>Jennifer</First_Name> <Last_Name>Widom</Last_Name> </Author> </Authors> <Remark> Amazon.com says: Buy this book bundled with "A First Course," it's a great deal! </Remark> </Book> </Bookstore>A well-formed XML document can contain regular data (as above) or very irregular data.
A DTD is a grammar that describes the legal attributes of tagged elements and the legal ordering and nesting of the elements.
<!ELEMENT Bookstore (Book | Magazine)*> <!ELEMENT Book (Title, Authors, Remark?)> <!ATTLIST Book ISBN CDATA #REQUIRED Price CDATA #REQUIRED Edition CDATA #IMPLIED> <!ELEMENT Magazine (Title)> <!ATTLIST Magazine Month CDATA #REQUIRED Year CDATA #REQUIRED> <!ELEMENT Title (#PCDATA)> <!ELEMENT Authors (Author+)> <!ELEMENT Remark (#PCDATA)> <!ELEMENT Author (First_Name, Last_Name)> <!ELEMENT First_Name (#PCDATA)> <!ELEMENT Last_Name (#PCDATA)>The DTD is specified at the top of the document or in a separate file referenced at the top of the document. In both cases use
standalone="no"
.
Question: What are the benefits of using a DTD?
Question: What are the benefits of not using a DTD?
ID
attribute to an
element, then point to that element with a special IDREF
or
IDREFS
attribute in another element.
<?xml version="1.0" standalone="no"?> <!DOCTYPE Bookstore SYSTEM "bookstore.dtd"> <Bookstore> <Book ISBN="ISBN-0-13-035300-0" Price="$65" Edition="2nd" Authors="JU JW"> <Title>A First Course in Database Systems</Title> </Book> <Book ISBN="ISBN-0-13-031995-3" Price="$75" Authors="HG JU JW"> <Title>Database Systems: The Complete Book</Title> <Remark> Amazon.com says: Buy this book bundled with <BookRef book="ISBN-0-13-035300-0" />, It's a great deal! </Remark> </Book> <Author Ident="HG"> <First_Name>Hector</First_Name> <Last_Name>Garcia-Molina</Last_Name> </Author> <Author Ident="JU"> <First_Name>Jeffrey</First_Name> <Last_Name>Ullman</Last_Name> </Author> <Author Ident="JW"> <First_Name>Jennifer</First_Name> <Last_Name>Widom</Last_Name> </Author> </Bookstore>DTD for this data:
<!ELEMENT Bookstore (Book*, Author*)> <!ELEMENT Book (Title, Remark?)> <!ATTLIST Book ISBN ID #REQUIRED Price CDATA #REQUIRED Edition CDATA #IMPLIED Authors IDREFS #REQUIRED> <!ELEMENT Title (#PCDATA)> <!ELEMENT Remark (#PCDATA | BookRef)*> <!ELEMENT BookRef EMPTY> <!ATTLIST BookRef book IDREF #REQUIRED> <!ELEMENT Author (First_Name, Last_Name)> <!ATTLIST Author Ident ID #REQUIRED> <!ELEMENT First_Name (#PCDATA)> <!ELEMENT Last_Name (#PCDATA)>
#PCDATA
is only for element content, CDATA
is
only for attribute types, you cannot use them interchangeably, and
there are no keywords PCDATA
or #CDATA
. Both
CDATA
and #PCDATA
essentially specify text where the
special characters "<", ">", and "&" have to be escaped as
"<", ">" and "&" respectively.
CDATA
for string-valued
attributes, use #PCDATA
for elements containing text. If you
want an element to contain a mixture of text and other elements, do so
by specifying the element types along with #PCDATA
in a
0-or-more list, e.g., (#PCDATA
| Author | Editor)*.