XML元素限制
DTD (Document Type Definition):文档类型定义
DTD作用:可以通过 DTD 验证的XML是"合法"的 XML。
DTD语法格式
1. DTD元素限制
关键字:ELEMENT
语法格式:<!ELEMENT element-name (child-name)>
<!ELEMENT C (ssh)> <!--此处指定在C节点下必须存在ssh元素节点且只能出现一次-->
<!ELEMENT C (ssh+)> <!--此处指定在C节点下必须存在ssh元素节点且至少出现一次-->
<!ELEMENT C (ssh*)> <!--此处指定在C节点下可存在ssh元素节点出现任意次数(包含0次)-->
<!ELEMENT C (ssh?)> <!--此处指定在C节点下ssh元素节点不出现或者只出现一次-->
<!ELEMENT C (ssh|telnet)> <!--此处指定在C节点下必定出现其中(ssh或telnet元素)-->
<!ELEMENT C (ssh,telnet)> <!--此处指定在C节点下必定先出现ssh元素一次,再出现telnet元素一次-->
<!ELEMENT C (#PCDATA)> <!--此处指定在C节点下输入字符数据->
符号 | 含义 |
---|---|
PCDATA | 被解析器解析的文本。这些文本将被解析器检查实体以及标记对于实体字符需要进行替换 |
CDATA | C不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。 |
+ | 出现一次或多次 |
* | 出现任意次数 |
? | 出现一次或不出现 |
, | 指定出现顺序 |
参考资料:DTD 元素
2. DTD属性限制
关键字:ATTLIST
语法格式:<!ATTLIST element-name attribute-name attribute-type attribute-value>
<!ATTLIST C type CDATA "NTFS"><!---DTD限制(group1):NTFS是默认值,type属性未赋值时填入-->
<C type="" /> </C><!---XML符合(group1)-->
<C type="FAT32" /> </C><!---XML符合(group1)-->
<!ATTLIST C type CDATA #REQUIRED><!---DTD限制(group2):type属性必须赋值-->
<C type="" /> </C><!---XML不符合(group2)-->
<C type="FAT32" /> </C><!---XML符合(group2)-->
<!ATTLIST C type CDATA #IMPLIED><!---DTD限制(group3):type属性可选-->
<C type="" /> </C><!---XML符合(group3)-->
<C type="FAT32" /> </C><!---XML符合(group3)-->
<C size="52GB" /> </C><!---XML符合(group3)-->
<!ATTLIST C type CDATA #FIXED "NTFS"> <!---DTD限制(group4):type属性拥有固定的值,并不允许修改-->
<C type="FAT32" /> </C><!---XML不符合(group4)-->
<C type="NTFS" /> </C><!---XML符合(group4)-->
<!ATTLIST C type (NTFS|FAT16|FAT32) "NTFS"> <!---DTD限制(group5):type属性枚举值,默认为NTFS-->
<C type="" /> </C><!---XML不符合(group5)-->
<C type="FAT32" /> </C><!---XML符合(group5)-->
<C type="NTFS" /> </C><!---XML符合(group5)-->
符号 | 含义 |
---|---|
CDATA | 值为字符数据 |
(value1|value2|value3....) | 此值是枚举列表中的一个值 |
ID | 值为唯一的 id |
IDREF | 值为另外一个元素的 id |
ENTITY | 值是一个实体 |
ENTITIES | 值是一个实体列表 |
xml: | 值是一个预定义的 XML 值 |
参考资料:DTD 属性
第一篇:XML简介(1)--头部声明
第二篇:XML编写(2)--语法要求
第四篇:XML引用(4)--DTD应用
第五篇:XXE基础(1)--实体类别
第六篇:XXE利用(2)--漏洞实现
第七篇:XXE后记(3)--抛砖引玉
网友评论