或
实例:
上面的例子声明了:message 子元素必须出现一次,并且必须只在 “note” 元素中出现一次。
实例:
上面的例子中的加号(+)声明了:message 子元素必须在 “note” 元素内出现至少一次。
实例:
上面的例子中的星号(*)声明了:子元素 message 可在 “note” 元素内出现零次或多次。
实例:
上面的例子中的问号(?)声明了:子元素 message 可在 “note” 元素内出现零次或一次。
实例:
上面的例子声明了: “note” 元素必须包含 “to” 元素、“from” 元素、“header” 元素,以及非 “message” 元素即 “body” 元素。
实例:
上面的例子声明了:“note” 元素可包含出现零次或多次的 PCDATA、“to”、“from”、“header” 或者 “message”。
顺序性: 当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中
完整性: 在一个完整的声明中,子元素也必须被声明
声明格式:
示例:
类型 | 描述 |
---|---|
CDATA | 值为字符数据 (character data) |
(en1|en2|…) | 此值是枚举列表中的一个值 |
ID | 值为唯一的 id |
IDREF | 值为另外一个元素的 id |
IDREFS | 值为其他 id 的列表 |
NMTOKEN | 值为合法的 XML 名称 |
NMTOKENS | 值为合法的 XML 名称的列表 |
ENTITY | 值是一个实体 |
ENTITIES | 值是一个实体列表 |
NOTATION | 此值是符号的名称 |
值 | 解释 |
---|---|
具体的值 | 属性的默认值 |
#REQUIRED | 属性值是必需的 |
#IMPLIED | 属性不是必需的 |
#FIXED value | 属性值是固定的 |
示例:
合法的 XML:
合法的 XML:
非法的 XML:
假如您没有默认值选项,但是仍然希望强制作者提交属性的话,请使用关键词 #REQUIRED。
合法的 XML:
合法的 XML:
假如您不希望强制作者包含属性,并且您没有默认值选项的话,请使用关键词 #IMPLIED。
合法的 XML:
非法的 XML:
如果您希望属性拥有固定的值,并不允许作者改变这个值,请使用 #FIXED 关键词。如果作者使用了不同的值,XML 解析器会返回错误。
XML 例子:
或
如果您希望属性值为一系列固定的合法值之一,请使用列举属性值。
xml内容和dtd在同一个xml文件内.
声明位置: 之后, 元素之前
声明格式:
作用范围: 当前xml范围内
声明示例:
DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Toveto>
<from>Janifrom>
<heading>Reminderheading>
<body>Don't forget me this weekendbody>
note>
以上 DTD 解释如下:
一般项目内声明的dtd约束, 项目内可以复用
格式:
注意: dtdFileName可以是xml的相对路径或文件绝对路径
outer.xml文件内容:
DOCTYPE note SYSTEM "my.dtd">
<note>
<to>Toveto>
<from>Janifrom>
<heading>Reminderheading>
<body>Don't forget me this weekend!body>
note>
my.dtd文件内容(和outer.xml同一级目录下):
第三方公共的dtd约束
声明格式:
示例:
web.xml内容
参考: https://www.runoob.com/dtd/dtd-tutorial.html