zoukankan      html  css  js  c++  java
  • DTD的学习和理解

    看log4j的官方文档,上面说提供了XML格式的配置,但是没有XML具体示例。发现文档中说的是一个DTD文档,但我根本不知道DTD是什么,于是就简单了解一下。顺带做一下笔记。

    注:结合笔记看log4j的DTD配置文件顿时好理解多了,不过一个完成的 log4j 的XML文件还是参照已有文件最好,不然自己拼太麻烦了..


    一、DOCTYPE 声明:(分为内部和外部)

    内部声明:<!DOCTYPE 根元素 [元素声明]>

    外部声明:<!DOCTYPE 根元素 SYSTEM "文件名">

    二、XML 文档构建模块

    2.1 元素概括:

    2.1.1 文档构建模块

    所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:

    • 元素

    • 属性

    • 实体

    • PCDATA

    • CDATA

    2.1.2 常用个数语法:

    2.2 元素(ELEMENT)

    2.2.1 定义:

    XML 元素的例子是 "note" 和 "message" 。元素可包含文本、其他元素或者是空的。

    2.2.2 声明元素:

    语法:<!ELEMENT 元素名称 类别> 或者 <!ELEMENT 元素名称 (元素内容)> (元素内容应该是指子元素)

    其他元素说明:

    • 空元素:<!ELEMENT 元素名称 EMPTY> ()

    • 只有 PCDATA 的元素:<!ELEMENT 元素名称 (#PCDATA)>

    • 带有任何内容的元素:<!ELEMENT 元素名称 ANY>

    • 带有子元素(序列)的元素:<!ELEMENT 元素名称 (子元素名称 1)><!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)> (当子元素按照由逗号分隔开的序列进行声明时,这些子元素必须按照相同的顺序出现在文档中。在一个完整的声明中,子元素也必须被声明,同时子元素也可拥有子元素。)

    • 声明只出现一次的元素:<!ELEMENT 元素名称 (子元素名称+)>

    • 声明出现零次或多次的元素:<!ELEMENT 元素名称 (子元素名称*)>

    • 声明出现零次或一次的元素:<!ELEMENT 元素名称 (子元素名称?)>

    • 声明“非.../既...”类型的内容:<!ELEMENT note (to,from,header,(message|body))>

    • 声明混合型的内容:<!ELEMENT note (#PCDATA|to|from|header|message)*>

    2.2.3 元素类型:

    2.3 属性(ATTLIST):属性依附于元素存在

    2.3.1 定义和声明语法

    属性可提供有关元素的额外信息。属性总是被置于某元素的开始标签中。属性总是以名称/值的形式成对出现的。

    属性通过 ATTLIST 声明来进行声明:<!ATTLIST 元素名称 属性名称 属性类型 默认值>

    2.3.2 属性类型

    • ID:表明该属性的取值必须是唯一的。

    • IDREF/IDREFS: IDREF是指它的值要指向文档当中其它地方声明的ID。把IDREF当成数据库的外键,把ID当成主键理解就行; IDREFS同IDREF,但是可以具有由空格分开的多个引用;

    • Enumerated:预先定义了一些值,属性的值必须在所列出的值的范围内

    2.3.3 属性特点

    • #REQUIRED:表示元素的所有的实例都必须有该属性的值(NOT NULL)

    • #IMPLIED:表示该属性的值是可以被忽略的。

    • #FIXED:该属性的值必须为指定的固定值。

    • Default:为属性提供一个默认的值。

    2.4 实体(ENTITY)

    定义:实体是用来定义普通文本(或特殊字符的快捷方式)的变量。实体引用是对实体的引用。(简单理解就是C#中的常量)

    声明:实体可在内部或外部进行声明:

    内部实体声明:<!ENTITY 实体名称 "实体的值">

    外部实体声明:<!ENTITY 实体名称 SYSTEM "URI/URL">

    XML 中被预定义的实体:

    2.5 PCDATA

    PCDATA 的意思是被解析的字符数据(parsed character data)。

    可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。

    注:可以包含任何字符串数据,但不能包含子元素。

    2.6 CDATA

    CDATA 的意思是字符数据(character data)。

    CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

    三、对比:PCDATA 和 CDATA

    问题一:属性的CDATA与元素的CDATA节有何区别呢??

    属性的CDATA表示属性值是任何的字符,元素里的CDATA节是表示在CDATA节里面的内容不被xml文档进行解析。

    问题二:#PCDATA与CDATA有何区别??

    PCDATA是限制元素里面的内容是字符类型的,而这个CDATA是限制属性里面的内容是字符类型。

    四、Schema技术

    暂不处理:后续进行补充:xml基础、DTD验证、Schema验证 - CSDN博客

    五、附录

    1. xml基础、DTD验证、Schema验证(备忘) - CSDN博客 (很不错的一个教程,说的很详细,总结的也很详细)

    2. DTD 教程 (W3School几乎成为我学东西的首选地方了.....)

    3. Log4j使用详解(log4j.XML格式)——整理 - 快鸟 - 博客园 (log4j的XML配置文件详解)

  • 相关阅读:
    drf之序列化组件
    RESTful API和Django的drf安装及使用
    Django之CBV中View、APIView源码分析
    Ajax以及crsf的校验
    Django之中间件
    Django之Auth用户认证模块
    Django之cookie、session以及FBV和CBV
    Django之Forms组件
    Django之ORM
    Django基本知识、路由层、视图层、模版层
  • 原文地址:https://www.cnblogs.com/buwuliao/p/9593842.html
Copyright © 2011-2022 走看看