【发布时间】:2015-03-10 23:55:37
【问题描述】:
我需要创建一个不重复 XML 元素值的 dtd 规则,在这种情况下,我有一个包含 5 首歌曲(名称、艺术家、专辑...)的目录,并且名称元素值可以'不能重复,不能有两首歌同名,我的代码在这里:
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。
-
我的网络老师要我这样做
-
@mzjn - 这在技术上是可行的(参见下面的丑陋黑客),但我同意有更好的技术来确保这种类型的约束。