Мне нужно создать правило dtd, чтобы не повторять значения элемента XML, в этом случае у меня есть каталог, содержащий 5 песен (имя, исполнитель, альбом, ...), а значения элемента имени не могут Повторюсь, что не может быть две песни с таким же названием, мой код здесь:Как создать правило dtd для этого XML?
XML
<?xml version="1.0"?>
<!DOCTYPE catalog SYSTEM "catalog.dtd">
<catalog>
<song>
<name>Bed of Roses</name>
<artist>Bon Jovi</artist>
<album>Cross Road</album>
<year>1995</year>
<genre>Ballad</genre>
<coments>Good song</coments>
<path></path>
</song>
<song>
<name>Fly Away from here</name>
<artist>Aerosmith</artist>
<album>Just Push Play</album>
<year>2001</year>
<genre>Rock</genre>
<coments>Good song</coments>
<path></path>
</song>
</catalog>
DTD
<?xml version="1.0"?>
<!ELEMENT catalog (song)>
<!ELEMENT song (name,artist,album,year,genre,comments,path)>
<!ELEMENT song (name)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT artist (#PCDATA)>
<!ELEMENT album (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT genre (#PCDATA)>
<!ELEMENT comments (#PCDATA)>
Это невозможно. DTD не могут выразить требуемое ограничение (обеспечивая уникальные значения для определенных элементов). Вам придется использовать некоторые другие технологии, например [Schematron] (http://en.wikipedia.org/wiki/Schematron). – mzjn
Мой Учитель в Интернете просит меня сделать это –
@mzjn - Это технически возможно (см. Уродливый хак ниже), но я согласен, что есть лучшие технологии для обеспечения такого ограничения. –