Итак, я написал этот XML-документ, но мне не удалось написать DTD, в котором он действителен. Я знаю, что проблема в том, что идентификатор (имя студента «DB») встречается дважды в документе, и поэтому он не является uniqe. Но как я могу изменить свой DTD, чтобы позволить ID сделать это? Я действительно зеленый в этой области, так что это может быть глупый вопрос.XML недействителен для DTD (тот же идентификатор)
<?xml version="1.0" standalone="no"?>
<!DOCTYPE COURSES [
<!ELEMENT COURSES (COURSE*)>
<!ELEMENT COURSE (PROFESSOR+, STUDENT+)>
<!ATTLIST COURSE name ID #REQUIRED>
<!ELEMENT PROFESSOR EMPTY>
<!ATTLIST PROFESSOR name ID #REQUIRED>
<!ELEMENT STUDENT (NOTES*)>
<!ATTLIST STUDENT name ID #REQUIRED>
<!ATTLIST STUDENT enrolled IDREFS #IMPLIED>
<!ELEMENT NOTES (#PCDATA)>
]>
<COURSES>
<COURSE name="Architecture">
<PROFESSOR name="Andersson"/>
<STUDENT name="JB" enrolled="Architecture">
<NOTES>2nd BaSC</NOTES>
</STUDENT>
<STUDENT name="DB" enrolled="Architecture"/>
</COURSE>
<COURSE name="Mechanics">
<PROFESSOR name="Geerts"/>
<STUDENT name="DB" enrolled="Mechanics"/>
</COURSE>
</COURSES>
Это действительно зависит от вашей семантики. ID означает, что это уникальный атрибут. Вместо этого вы можете использовать CDATA. http://xmlwriter.net/xml_guide/attlist_declaration.shtml – Phil
Вы, вероятно, столкнетесь с той же проблемой с профессорами, если профессор преподает более одного курса. Думали ли вы о разделении профессоров, студентов и курсов на свои собственные структуры? Таким образом, вы можете использовать IDREF/IDREFS в качестве ссылок на профессоров/студентов/курсов, которые нужно создать только один раз. –
Если бы вы хотели привести пример раскола, о котором я говорил, дайте мне знать, и я добавлю его. –