博客
关于我
【PHP XML与dtd概述【完整版】】
阅读量:441 次
发布时间:2019-03-06

本文共 1772 字,大约阅读时间需要 5 分钟。

XML文件简介

对于XML,这是一个不陌生的话题。HTML→xhtml→XML,这是HTML发展的历史轨迹。XML不仅仅是简单的标记语言,它还可以作为配置文件或小型数据库来使用。这使得它在各种应用场景中都有其独特的价值。

XML文档的基本特性

  • 版本:文档必须符合XML1.0规范。
  • 编码:默认使用UTF-8编码。
  • standalone:可以选择standalone="yes",表示文档独立使用DTD约束。
  • 根元素:每个XML文档必须有且仅有一个根元素。
    • 根元素的标签必须放在所有其他元素的标签之前。
    • 根元素的结束标签必须放在所有其他元素的结束标签之后。

XML文件的命名规范

  • 标签区分大小写。
  • 元素名称不能以数字或下划线开头。
  • 元素名称中不能包含空格或冒号。
  • 元素名称中不能包含特殊字符,除非使用实体引用。

XML文件的注释和属性值

  • XML文件使用HTML文件的注释方式。
  • 属性值必须用双引号包裹。

DTD文件概述

DTD的概念

DTD(Document Type Definition,文档类型定义)是XML技术中用来约束XML文档书写规范的一种机制。它可以确保XML文档的结构和内容符合预期。

DTD在PHP中的应用

在编程中,DTD可以提供以下约束:

  • 元素的存在性和顺序。
  • 元素的内容类型(如是否可以包含子元素、文本或其他内容)。
  • 属性的定义和约束。

DTD的必要性

举例:如果XML文件中定义了<person>元素,里面包含<name><age>等元素,但还包含<除毛净重><面积>,这显然不合理。DTD可以帮助避免这样的错误。

DTD文档的语法

元素定义
  • NAME是元素名称。
  • CONTENT表示元素的内容类型,可能包括:
    • EMPTY:该元素不能包含子元素或文本。
    • ANY:该元素可以包含任何定义的元素内容。
    • #PCDATA:允许包含任何字符数据,但不能包含子元素。
简单DTD示例
组合示例
  • ?表示该元素可以出现0次或1次。
  • *表示该元素可以出现0次或多次。
  • +表示该元素必须出现至少一次。
通配符
  • +:表示1-n个(必须至少出现一次)。
  • *:表示0-n个(可以出现0次或多次)。
  • ?:表示0或1次。
属性定义
属性类型
  • CDATA:属性值可以是任意字符。
  • ID:属性值必须是唯一的,且以字母开头。
  • IDREF/IDREFS:属性值必须在XML文档中有定义。
  • Emumerated:属性值来自预定义的枚举列表。
  • ENTITY/ENTITIES:属性值可以引用已定义的实体。
属性特点
  • #REQUIRED:属性必须存在。
  • #IMPLIED:属性可以存在或不存在。
  • #FIXED value:属性值是固定的。
  • DEFAULT value:属性值的默认值。

引入DTD约束

内部DTD和外部DTD

  • 内部DTD:将DTD定义写在XML文件中。
  • 外部DTD:将DTD单独写在一个文件中,并通过引用方式引入XML文件。

引入DTD的语法

  • 内部DTD示例:
  • 外部DTD示例:

内外部DTD结合使用


JS验证XML规范性的案例

DTD控制.dtd文件内容

Person.xml文件内容

张三
16
张燕
17
赵六
20

JS验证代码


XML与DTD的实际应用

产品目录DTD示例


总结

通过上述内容,我们可以看到XML与DTD的重要性。DTD为XML文件提供了结构和内容上的约束,从而确保XML文档的规范性和一致性。在实际开发中,合理设计DTD可以显著提升项目的可维护性和稳定性。虽然对于普通开发人员来说,编写DTD可能不是每天都需要的事情,但理解其原理和用法是非常有帮助的。

转载地址:http://vwcyz.baihongyu.com/

你可能感兴趣的文章
Objective-C实现字符串复制功能(附完整源码)
查看>>
Objective-C实现字符串是否回文Palindrome算法 (附完整源码)
查看>>
Objective-C实现字符串查找子串(附完整源码)
查看>>
Objective-C实现守护进程(附完整源码)
查看>>
Objective-C实现完整的ComplexNumber复数类(附完整源码)
查看>>
Objective-C实现完整的matrix矩阵类(附完整源码)
查看>>
Objective-C实现实现rabin karp算法(附完整源码)
查看>>
Objective-C实现对图像进行色调处理算法(附完整源码)
查看>>
Objective-C实现对称矩阵压缩存储(附完整源码)
查看>>
Objective-C实现寻找Find Lcm最小公倍数算法(附完整源码)
查看>>
Objective-C实现寻找无向图的关节点Articulation Points算法(附完整源码)
查看>>
Objective-C实现寻找欧拉路径/回路(附完整源码)
查看>>
Objective-C实现导弹跟踪算法(附完整源码)
查看>>
Objective-C实现将 b 除以模 n 的有效算法(附完整源码)
查看>>
Objective-C实现将 base64 字符串转换为字节数组算法(附完整源码)
查看>>
Objective-C实现将两个给定的字符串以O(n)的时间复杂度排列在一个字符串中算法(附完整源码)
查看>>
Objective-C实现将位转换为浮点数bitsToFloat算法(附完整源码)
查看>>
Objective-C实现将列表向右旋转 k 个位置算法(附完整源码)
查看>>
Objective-C实现将字符串中大写字母转换为小写字母(附完整源码)
查看>>
Objective-C实现将字符串从一个基转换为另一个基算法(附完整源码)
查看>>