博客
关于我
【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/

你可能感兴趣的文章
python--003--百分号字符串拼接、format
查看>>
Python--10、线程
查看>>
Python--Redis实战:第四章:数据安全与性能保障:第4节:复制
查看>>
python--基本代码规范
查看>>
Python--抽象类接口类
查看>>
PYTHON--欧拉习题二
查看>>
python--高级应用总结
查看>>
python-520表白代码,我看谁说程序员不懂浪漫,送你几套表白代码,一步到位
查看>>
Python-Asyncio TypeError:无法在‘;等待‘;表达式中使用对象DICT
查看>>
Python-AttributeError:‘;dict&39;对象没有属性‘;序列‘;
查看>>
Python-ldap:是否可以在不显式写入密码的情况下进行绑定?
查看>>
python出现 unknown encoding: idna 的处理方法
查看>>
Python出现 RuntimeError: dictionary changed size during iteration 的解决方法
查看>>
Python-numpy(2)数组的操作
查看>>
Python-Numpy的tile函数用法
查看>>
python-open函数
查看>>
Python-Pandas-将特定函数应用于给定级别-多索引数据框架
查看>>
python-queue队列通信
查看>>
python-ros No module named PyKDL
查看>>
python-social-auth 是否需要会话
查看>>