Finally, we need to discard those ID attributes that we created in
Rule 5 that do not have IDREF(S) pointing to them. Since we created
these attributes in the process of building the XML structures,
discarding them if they are not used does not sacrifice information,
and saves developers the trouble of generating unique values for the
attributes.
Rule 11: Remove Unwanted ID Attributes.
Remove ID attributes that are not referenced by IDREF or IDREFS
attributes elsewhere in the XML structures.
Applying Rule 11 to our example gives us our final structure. On
review, the InvoiceID, LineItemID, MonthlyPartTotalID,
MonthlyTotalID, and MonthlyCustomerTotalID attributes are not
referenced by any IDREF or IDREFS attributes. Removing them, we
arrive at our final structure, ch03_ex01.dtd:
<!ELEMENT SalesData (Invoice*, Customer*, Part*,
MonthlyTotal*)>
<!ATTLIST SalesData
Status (NewVersion | UpdatedVersion | CourtesyCopy) #REQUIRED>
<!ELEMENT Invoice (LineItem*)>
<!ATTLIST Invoice
InvoiceNumber CDATA #REQUIRED
TrackingNumber CDATA #REQUIRED
OrderDate CDATA #REQUIRED
ShipDate CDATA #REQUIRED
ShipMethod (USPS | FedEx | UPS) #REQUIRED
CustomerIDREF IDREF #REQUIRED>
<!ELEMENT Customer EMPTY>
<!ATTLIST Customer
CustomerID ID #REQUIRED
Name CDATA #REQUIRED
Address CDATA #REQUIRED
City CDATA #REQUIRED
State CDATA #REQUIRED
PostalCode CDATA #REQUIRED>
<!ELEMENT Part EMPTY>
<!ATTLIST Part
PartID ID #REQUIRED
PartNumber CDATA #REQUIRED
Name CDATA #REQUIRED
Color CDATA #REQUIRED
Size CDATA #REQUIRED>
<!ELEMENT MonthlyTotal (MonthlyCustomerTotal*,
MonthlyPartTotal*)>
<!ATTLIST MonthlyTotal
Month CDATA #REQUIRED
Year CDATA #REQUIRED
VolumeShipped CDATA #REQUIRED
PriceShipped CDATA #REQUIRED>
<!ELEMENT MonthlyCustomerTotal EMPTY>
<!ATTLIST MonthlyCustomerTotal
VolumeShipped CDATA #REQUIRED
PriceShipped CDATA #REQUIRED
CustomerIDREF IDREF #REQUIRED>
<!ELEMENT MonthlyPartTotal EMPTY>
<!ATTLIST MonthlyPartTotal
VolumeShipped CDATA #REQUIRED
PriceShipped CDATA #REQUIRED
PartIDREF IDREF #REQUIRED>
<!ELEMENT LineItem EMPTY>
<!ATTLIST LineItem
Quantity CDATA #REQUIRED
Price CDATA #REQUIRED
PartIDREF IDREF #REQUIRED>