• xml 深入学习


     
    专业术语
    DTD document type defination 文档类型定义
    PCDATA parsed character data 已解析字符数据
    XSD xml shcema Defination XML模型定义
     
    1.简介
    xml 可扩展标记语言 Extensible Markup Language
    XML的设计宗旨是传输数据,而非显示数据
    • 和html 的差异
    1.xml传输数据 html 显示数据 设计的目的不一样
    2. html 的标签固定 xml的标签不固定
    • xml的用处
    1. 描述事物的树形结构
    2.作为配置文件
    3.解决数据传输不规范的情况
    4. 是html 的补充 简化了数据传输,共享
    5. 应用场景: HTML,WSDL,WAP,RSS,RDF,OWL,SML
    xml 是纯文本
     
    2.语法
    分成文档声明,元素,属性,注释,CDATA区域,特殊字符,处理指令几块
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 上面是声明 -->
    <?xml-stylesheet type="text/css" href="xml2.css" ?>
    <!-- 上面是处理指令 -->
     
    <books>
    <!-- 根 -->
    <!-- comments -->
    <![CDATA[contents what ever]]>
    <!-- CDATA 下面一段是错误代码区-->
    <book attr='wow'> <!-- 属性 这些注释是错误的 -->
    <name>My life</name> <!-- 元素 这些注释是错误的-->
    <price>100$</price>
    </author><!-- 空标签 这些注释是错误的 空标签这种也不合格 我使用simplexml_load_file函数解析xml 的时候会出错-->
    <author/> <!-- 这个才是正确的写法 -->
    </book>
    <book>
    <name>Your Life</name>
    <price>101$</price>
    <author>Someone</author>
    </book>
    </books>
     
    上面一部分错误的xml正确写法
    <book attr='wow'>
    <name>My life</name>
    <price>100$</price>
    <author/>
    </book>
     
    1. 所有标签都有关闭标签 空标签简写 也必须是</author> 这样的
    2.标签大小写敏感 <author>authorname</Author> 会发生错误
    3.标签必须正确嵌套
    4.必须有根标签
    5.属性值加引号 单双都可以
    6.标签里面的内容不能包含 <,>, & [ 三个都已经测试过不行,必须转义】
    < &lt;
    > &gt;
    & &amp;
    测试代码
    $file = "/Users/dingmac/Desktop/demo.xml";
    $string = file_get_contents($file);
    $xml = simplexml_load_file($file);
    var_dump($xml);
    其中有个问题在解析元素的时候 在xml 中添加了注释<!-- 我是备注 -->
    在解析的时候会出现 comments 元素 so 第7点上面的代码 元素部分
    7. 所有注释不能放在元素名中间,也不能嵌套
    8.元素内容中的空格 会保留 包括换行符
    9.声明部分有几部分组成
    version 版本号
    encoding 编码
    standalone yes|no 表示文档定义是否独立使用
    10.标签命名规则
    1.不能使用xml开始的名字
    2.正常程序中使用的变量名字
    3.不要使用- 使用_ 特殊符号 % & 等等别用 不要用: ,. 等 使用英语 中文也行 但是别扭不?
    11.xml 是可以扩展的
    12.属性通过 simplexml_load_file 函数解析之后 会出现下面的内容
    ["@attributes"]=>
    array(1) {
    ["attr"]=>
    string(3) "wow"
    }
    13.属性也能提供信息但是必须加引号,but 尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息 元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素
     
    3.xml定义要遵循 DTD
    DTD document type defination 文档类型定义
    基本语法

    #file myclass.dtd
    <! ELEMENT 元素名 类型>
    可以定义自己的DTD文件 文件名 myclass.dtd
    <!ELEMENT class (student+)>
    <!ELEMENT student (name,age,introduce)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT introduce (#PCDATA)>
     

    #file demo.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 上面是声明 -->
    <!DOCTYPE class SYSTEM "myclass.dtd">
    <!-- 使用规则 SYSTEM使用本地文件,public 使用网络文件 -->
    <class>
    <student>
    <name>周小星</name>
    <age>23</age>
    <introduce>学习刻苦</introduce>
    <score>99</score>
    </student>
    <student>
    <name>林晓</name>
    <age>25</age>
    <introduce>是一个好学生</introduce>
    <score>100</score>
    </student>
    </class>

    引用 : Take a look at PHP's DOM, especially DOMDocument::schemaValidate and DOMDocument::validate.
     
    #file xml_validate.php
     
    <?php
    $dom = new DOMDocument();
    $dom->load("demo.xml");
    if($dom->validate()){
    echo "The DOM is validate";
    }

    DTD 语法
     
    1. 文件位置
    本地文件
    <!DOCTYPE 根元素 SYSTEM "DTD文件路径">
    网络文件
    <!DOCTYPE 根元素 PUBLIC "DTD 名称" "DTD url">
    比如
     
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    2.基本语法 <!ELEMENT 元素 内容>
    - ELEMENT是关键字,是不能修改的 
    - NAME表示元素名称 
    - CONTENT是元素类型,必须要大写!CONTENT的内容有三种写法:
    (1)EMPTY——表示该元素不能包含子元素和文本,但可以有属性。 
    (2)ANY——表示该元素可以包含任何在该DTD中定义的元素内容 
    (3)#PCDATA——可以包含任何字符数据,但是不能在其中包含任何子元素
    EMPTY < #PCDATA <ANY
    另外一点需要注意的是 元素 内容之间一定要有空格 包括下面提到的第三点
     
    3.元素的组合类型
    <!ELEMENT 元素 类型>
    demo:
    <!ELEMENT class (student+)> 注意这边的空格是一定要的
     
    符号 用途 示例 示例说明
    () 用来给元素分组 (古龙|金庸),(王朔|余杰) 分成两组
    | 在列出的对象中选择一个 (男人|女人) 表示男人或者女人必须出现,两者至少选其一
    + 该对象必须出现一次或者多次 (成员+) 表示成员必须出现,而却可以出现多个成员
    * 该对象允许出现0次或者多次 (爱好*) 爱好可以出现两次到多次
    ? 该对象必须出现0次或者1次 (菜鸟?) 菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次
    , 对象必须按指定的顺序出现 (西瓜,苹果,香蕉) 表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现
     
    4.定义属性
     
    <!ATTLIST 元素
    属性名称 类型 属性的特点
    属性名称 类型 属性的特点
    ...
    >
     
    属性的类型有
    1. CDATA 字符数据 任何字符
    <!ATTLIST student
    address CDATA #REQUIRED
    >
    2.ID 唯一的字符串 不能以数字开头
    <!ATTLIST student
    no ID #REQUIRED
    >
    3.IDREF/IDREFS - IDREF属性的值指向文档中其它地方声明的ID类型的值 - IDREFS同IDREF,但是可以具有由空格分开的多个引用。
    <!ATTLIST student
    relID ID #REQUIRED
    parentID IDREFS #IMPLIED
    name CDATA #REQUIRED
    >
    4.Enumerated 属性类型-Enumerated,事先定义好一些值,属性的值必须在所列出的值的范围内。
    <!ATTLIST student
    marriage (sigle|married|devorced|widowed) #IMPLIED
    >
    5.ENTITY/ENTITIES
    我测试下来如果要使用 ENTITY 就必须使用 内嵌的DTD 方式
     
    <!DOCTYPE 节点名称 [
    <!ENTITY copyright "this is copyright">
    <!ELEMENT student (name,age,instroduce)>
    ]>
     
    - 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
    - 在DTD定义中,一条!ENTITY语句用于定义一个实体。
    - 实体可分为两种类型:引用实体和参数实体。引用实体是被XML文档应用的,而参数实体是被DTD文件本身应用的。
     
    1.引用实体:
     
    引用实体主要在XML文档中被应用
    语法格式如下,引用实体的定义内容最好放在DTD文件的最后。
     
    <!ENTITY 实体名称 "实体内容">
    引用方式:&实体名称; 末尾要带上分号,这个引用将直接转变成实体内容
    demo
    #我测试下来在dtd 文件中定义没有用只能在xml里面定义才有用
     
    <!DOCTYPE class SYSTEM "myclass.dtd"> // 这样在myclass.dtd 文件中定义没有用
    只能在xml 文件中定义
    <!DOCTYPE class [
    <!ENTITY copyright "I am a Copyright">
    ]>
    <copyright> &copyright</copyright>
     
    在xml 里面直接使用 &copyright 可以直接调用 I am a Copyright
     
    引用 外面文件
    <!ENTITY chapter.1 SYSTEM "chapter1.xml"> // 本地文件
     
    调用的时候 &chapter.1;
     
    2.参数实体 被DTD文件本身应用的
    <!ENTITY % 实体名称 "实体内容">
    应用方式
    % 实体名称; 记得分好 这个可以在DTD 文件中定义
     
    demo
    dtd 文件
    #myclass.dtd
     
    <!ELEMENT class (student+)>
    <!ENTITY js "Jo Smith">
    <!ENTITY % TAG_NAME "name|age|introduce">
    <!ATTLIST student
    address CDATA #IMPLIED
    >
    <!ELEMENT student (%TAG_NAME;|生日)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT introduce (#PCDATA)>
    <!ELEMENT 生日 (#PCDATA)>
     
    xml 文件
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 上面是声明 -->
    <!DOCTYPE class SYSTEM "myclass.dtd">
    <class>
    <student address="HONGKONG">
    <name>周小星</name>
    <age>23</age>
    <introduce>学习刻苦</introduce>
    </student>
    <student address="Shanghai">
    <name>林晓</name>
    <age>25</age>
    <introduce>是一个好学生 </introduce>
    </student>
    </class>
     
    验证的时候将会有如下提示
     
    Warning: DOMDocument::validate(): Element student content does not follow the DTD, expecting (name | age | introduce | 生日), got (name age introduce ) in /Users/dingmac/Desktop/xml_validator.php on line 5
    说明生效了
     
     
     
    属性的特点有
    #REQUIED 表示这个属性必须给,不给就报错
    #IMPLIED 表示这个属性可以给也可以不给
    #FIXED value 表示这个属性必须给一个固定的value值
    Default value 表示这个属性如果没有值,就分配一个默认的value值
    demo <!ATTLIST name id CDATA "0">
     
    修改上面的myclass.dtd 文件
     
    <!ELEMENT class (student+)>
    <!ENTITY js "Jo Smith">
    <!ENTITY % TAG_NAME "name|age|introduce">
    <!ATTLIST student
    address CDATA #IMPLIED
    >
    <!ELEMENT student (%TAG_NAME;|birthday)+ >
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT introduce (#PCDATA)>
    <!ELEMENT birthday (#PCDATA)>
     
    xml 如下
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 上面是声明 -->
    <!DOCTYPE class SYSTEM "myclass.dtd">
    <class>
    <student address="HONGKONG">
    <name>周小星</name>
    </student>
    <student address="Shanghai">
    <name>林晓</name>
    <age>25</age>
    <introduce>是一个好学生 </introduce>
    <birthday></birthday>
    </student>
    </class>
     
    是ok的
     
    最后看到了一个蛮好的解决方案
    又是文本引用 也包含我们想要的 ENTITY 引用
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 上面是声明 -->
    <!DOCTYPE class SYSTEM "myclass.dtd" [ <!ENTITY name "xiaomug"> ]>
    <class>
    <student address="HONGKONG">
    <name>周小星</name>
    </student>
    <student address="Shanghai">
    <name>林晓</name>
    <age>25</age>
    <introduce>是一个好学生 </introduce>
    <birthday>&name;</birthday>
    </student>
    </class>
     
    扩展阅读
    Using Entities to Include Files XML Primer
    ATTLIST Declaration
    教程
    https://www.tutorialspoint.com/dtd/dtd_attributes.htm 如果本文没有使你明白 请首先参考这个链接的教程
     
    参考
     
     

     
    4. XML Schema(图解,模式)
     
    1. XML Schema Defination 简写 XSD 是 DTD Document Type Defination 的替代品 支持namespace
     
    优点:
    • XML Schema 可针对未来的需求进行扩展
    • XML Schema 更完善,功能更强大
    • XML Schema 基于 XML 编写
    • XML Schema 支持数据类型
    • XML Schema 支持命名空间
     
    通过对数据类型的支持:
    • 可更容易地描述允许的文档内容
    • 可更容易地验证数据的正确性
    • 可更容易地与来自数据库的数据一并工作
    • 可更容易地定义数据约束(data facets)
    • 可更容易地定义数据模型(或称数据格式)
    • 可更容易地在不同的数据类型间转换数据
     
    <! [CDATA [文本内容]] > 在特殊的标签CDATA下,所有的标签、实体引用都被忽略,而被XML处理程
    序一视同仁地当作字符数据看待。
     
    2. 处理指令 (PI process Instruction)处理指令用来指挥解析引擎如何解析XML文档内容
    处理指令必须以“<?”作为开头,以“?>”作为结尾 【看到了了没 和php的简写标签是一样的】
     
    例如,在XML文档
    中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容
     
    3.对xsd 文件的引用
    <?xml version="1.0"?> <note xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
     
    <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
     
    对 DTD 的引用
    <?xml version="1.0"?>
    <!DOCTYPE note SYSTEM "http://www.w3school.com.cn note.dtd"> <note>
    <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    专业术语
    DTD document type defination 文档类型定义
    PCDATA parsed character data 已解析字符数据
    XSD xml shcema Defination XML模型定义
     
    1.简介
    xml 可扩展标记语言 Extensible Markup Language
    XML的设计宗旨是传输数据,而非显示数据
    • 和html 的差异
    1.xml传输数据 html 显示数据 设计的目的不一样
    2. html 的标签固定 xml的标签不固定
    • xml的用处
    1. 描述事物的树形结构
    2.作为配置文件
    3.解决数据传输不规范的情况
    4. 是html 的补充 简化了数据传输,共享
    5. 应用场景: HTML,WSDL,WAP,RSS,RDF,OWL,SML
    xml 是纯文本
     
    2.语法
    分成文档声明,元素,属性,注释,CDATA区域,特殊字符,处理指令几块
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 上面是声明 -->
    <?xml-stylesheet type="text/css" href="xml2.css" ?>
    <!-- 上面是处理指令 -->
     
    <books>
    <!-- 根 -->
    <!-- comments -->
    <![CDATA[contents what ever]]>
    <!-- CDATA 下面一段是错误代码区-->
    <book attr='wow'> <!-- 属性 这些注释是错误的 -->
    <name>My life</name> <!-- 元素 这些注释是错误的-->
    <price>100$</price>
    </author><!-- 空标签 这些注释是错误的 空标签这种也不合格 我使用simplexml_load_file函数解析xml 的时候会出错-->
    <author/> <!-- 这个才是正确的写法 -->
    </book>
    <book>
    <name>Your Life</name>
    <price>101$</price>
    <author>Someone</author>
    </book>
    </books>
     
    上面一部分错误的xml正确写法
    <book attr='wow'>
    <name>My life</name>
    <price>100$</price>
    <author/>
    </book>
     
    1. 所有标签都有关闭标签 空标签简写 也必须是</author> 这样的
    2.标签大小写敏感 <author>authorname</Author> 会发生错误
    3.标签必须正确嵌套
    4.必须有根标签
    5.属性值加引号 单双都可以
    6.标签里面的内容不能包含 <,>, & [ 三个都已经测试过不行,必须转义】
    < &lt;
    > &gt;
    & &amp;
    测试代码
    $file = "/Users/dingmac/Desktop/demo.xml";
    $string = file_get_contents($file);
    $xml = simplexml_load_file($file);
    var_dump($xml);
    其中有个问题在解析元素的时候 在xml 中添加了注释<!-- 我是备注 -->
    在解析的时候会出现 comments 元素 so 第7点上面的代码 元素部分
    7. 所有注释不能放在元素名中间,也不能嵌套
    8.元素内容中的空格 会保留 包括换行符
    9.声明部分有几部分组成
    version 版本号
    encoding 编码
    standalone yes|no 表示文档定义是否独立使用
    10.标签命名规则
    1.不能使用xml开始的名字
    2.正常程序中使用的变量名字
    3.不要使用- 使用_ 特殊符号 % & 等等别用 不要用: ,. 等 使用英语 中文也行 但是别扭不?
    11.xml 是可以扩展的
    12.属性通过 simplexml_load_file 函数解析之后 会出现下面的内容
    ["@attributes"]=>
    array(1) {
    ["attr"]=>
    string(3) "wow"
    }
    13.属性也能提供信息但是必须加引号,but 尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息 元数据(有关数据的数据)应当存储为属性,而数据本身应当存储为元素
     
    3.xml定义要遵循 DTD
    DTD document type defination 文档类型定义
    基本语法

    #file myclass.dtd
    <! ELEMENT 元素名 类型>
    可以定义自己的DTD文件 文件名 myclass.dtd
    <!ELEMENT class (student+)>
    <!ELEMENT student (name,age,introduce)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT introduce (#PCDATA)>
     

    #file demo.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 上面是声明 -->
    <!DOCTYPE class SYSTEM "myclass.dtd">
    <!-- 使用规则 SYSTEM使用本地文件,public 使用网络文件 -->
    <class>
    <student>
    <name>周小星</name>
    <age>23</age>
    <introduce>学习刻苦</introduce>
    <score>99</score>
    </student>
    <student>
    <name>林晓</name>
    <age>25</age>
    <introduce>是一个好学生</introduce>
    <score>100</score>
    </student>
    </class>

    引用 : Take a look at PHP's DOM, especially DOMDocument::schemaValidate and DOMDocument::validate.
     
    #file xml_validate.php
     
    <?php
    $dom = new DOMDocument();
    $dom->load("demo.xml");
    if($dom->validate()){
    echo "The DOM is validate";
    }

    DTD 语法
     
    1. 文件位置
    本地文件
    <!DOCTYPE 根元素 SYSTEM "DTD文件路径">
    网络文件
    <!DOCTYPE 根元素 PUBLIC "DTD 名称" "DTD url">
    比如
     
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems,Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
    2.基本语法 <!ELEMENT 元素 内容>
    - ELEMENT是关键字,是不能修改的 
    - NAME表示元素名称 
    - CONTENT是元素类型,必须要大写!CONTENT的内容有三种写法:
    (1)EMPTY——表示该元素不能包含子元素和文本,但可以有属性。 
    (2)ANY——表示该元素可以包含任何在该DTD中定义的元素内容 
    (3)#PCDATA——可以包含任何字符数据,但是不能在其中包含任何子元素
    EMPTY < #PCDATA <ANY
    另外一点需要注意的是 元素 内容之间一定要有空格 包括下面提到的第三点
     
    3.元素的组合类型
    <!ELEMENT 元素 类型>
    demo:
    <!ELEMENT class (student+)> 注意这边的空格是一定要的
     
    符号 用途 示例 示例说明
    () 用来给元素分组 (古龙|金庸),(王朔|余杰) 分成两组
    | 在列出的对象中选择一个 (男人|女人) 表示男人或者女人必须出现,两者至少选其一
    + 该对象必须出现一次或者多次 (成员+) 表示成员必须出现,而却可以出现多个成员
    * 该对象允许出现0次或者多次 (爱好*) 爱好可以出现两次到多次
    ? 该对象必须出现0次或者1次 (菜鸟?) 菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次
    , 对象必须按指定的顺序出现 (西瓜,苹果,香蕉) 表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现
     
    4.定义属性
     
    <!ATTLIST 元素
    属性名称 类型 属性的特点
    属性名称 类型 属性的特点
    ...
    >
     
    属性的类型有
    1. CDATA 字符数据 任何字符
    <!ATTLIST student
    address CDATA #REQUIRED
    >
    2.ID 唯一的字符串 不能以数字开头
    <!ATTLIST student
    no ID #REQUIRED
    >
    3.IDREF/IDREFS - IDREF属性的值指向文档中其它地方声明的ID类型的值 - IDREFS同IDREF,但是可以具有由空格分开的多个引用。
    <!ATTLIST student
    relID ID #REQUIRED
    parentID IDREFS #IMPLIED
    name CDATA #REQUIRED
    >
    4.Enumerated 属性类型-Enumerated,事先定义好一些值,属性的值必须在所列出的值的范围内。
    <!ATTLIST student
    marriage (sigle|married|devorced|widowed) #IMPLIED
    >
    5.ENTITY/ENTITIES
    我测试下来如果要使用 ENTITY 就必须使用 内嵌的DTD 方式
     
    <!DOCTYPE 节点名称 [
    <!ENTITY copyright "this is copyright">
    <!ELEMENT student (name,age,instroduce)>
    ]>
     
    - 实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
    - 在DTD定义中,一条!ENTITY语句用于定义一个实体。
    - 实体可分为两种类型:引用实体和参数实体。引用实体是被XML文档应用的,而参数实体是被DTD文件本身应用的。
     
    1.引用实体:
     
    引用实体主要在XML文档中被应用
    语法格式如下,引用实体的定义内容最好放在DTD文件的最后。
     
    <!ENTITY 实体名称 "实体内容">
    引用方式:&实体名称; 末尾要带上分号,这个引用将直接转变成实体内容
    demo
    #我测试下来在dtd 文件中定义没有用只能在xml里面定义才有用
     
    <!DOCTYPE class SYSTEM "myclass.dtd"> // 这样在myclass.dtd 文件中定义没有用
    只能在xml 文件中定义
    <!DOCTYPE class [
    <!ENTITY copyright "I am a Copyright">
    ]>
    <copyright> &copyright</copyright>
     
    在xml 里面直接使用 &copyright 可以直接调用 I am a Copyright
     
    引用 外面文件
    <!ENTITY chapter.1 SYSTEM "chapter1.xml"> // 本地文件
     
    调用的时候 &chapter.1;
     
    2.参数实体 被DTD文件本身应用的
    <!ENTITY % 实体名称 "实体内容">
    应用方式
    % 实体名称; 记得分好 这个可以在DTD 文件中定义
     
    demo
    dtd 文件
    #myclass.dtd
     
    <!ELEMENT class (student+)>
    <!ENTITY js "Jo Smith">
    <!ENTITY % TAG_NAME "name|age|introduce">
    <!ATTLIST student
    address CDATA #IMPLIED
    >
    <!ELEMENT student (%TAG_NAME;|生日)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT introduce (#PCDATA)>
    <!ELEMENT 生日 (#PCDATA)>
     
    xml 文件
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 上面是声明 -->
    <!DOCTYPE class SYSTEM "myclass.dtd">
    <class>
    <student address="HONGKONG">
    <name>周小星</name>
    <age>23</age>
    <introduce>学习刻苦</introduce>
    </student>
    <student address="Shanghai">
    <name>林晓</name>
    <age>25</age>
    <introduce>是一个好学生 </introduce>
    </student>
    </class>
     
    验证的时候将会有如下提示
     
    Warning: DOMDocument::validate(): Element student content does not follow the DTD, expecting (name | age | introduce | 生日), got (name age introduce ) in /Users/dingmac/Desktop/xml_validator.php on line 5
    说明生效了
     
     
     
    属性的特点有
    #REQUIED 表示这个属性必须给,不给就报错
    #IMPLIED 表示这个属性可以给也可以不给
    #FIXED value 表示这个属性必须给一个固定的value值
    Default value 表示这个属性如果没有值,就分配一个默认的value值
    demo <!ATTLIST name id CDATA "0">
     
    修改上面的myclass.dtd 文件
     
    <!ELEMENT class (student+)>
    <!ENTITY js "Jo Smith">
    <!ENTITY % TAG_NAME "name|age|introduce">
    <!ATTLIST student
    address CDATA #IMPLIED
    >
    <!ELEMENT student (%TAG_NAME;|birthday)+ >
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT introduce (#PCDATA)>
    <!ELEMENT birthday (#PCDATA)>
     
    xml 如下
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 上面是声明 -->
    <!DOCTYPE class SYSTEM "myclass.dtd">
    <class>
    <student address="HONGKONG">
    <name>周小星</name>
    </student>
    <student address="Shanghai">
    <name>林晓</name>
    <age>25</age>
    <introduce>是一个好学生 </introduce>
    <birthday></birthday>
    </student>
    </class>
     
    是ok的
     
    最后看到了一个蛮好的解决方案
    又是文本引用 也包含我们想要的 ENTITY 引用
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 上面是声明 -->
    <!DOCTYPE class SYSTEM "myclass.dtd" [ <!ENTITY name "xiaomug"> ]>
    <class>
    <student address="HONGKONG">
    <name>周小星</name>
    </student>
    <student address="Shanghai">
    <name>林晓</name>
    <age>25</age>
    <introduce>是一个好学生 </introduce>
    <birthday>&name;</birthday>
    </student>
    </class>
     
    扩展阅读
    Using Entities to Include Files XML Primer
    ATTLIST Declaration
    教程
    https://www.tutorialspoint.com/dtd/dtd_attributes.htm 如果本文没有使你明白 请首先参考这个链接的教程
     
    参考
     
     

     
    4. XML Schema(图解,模式)
     
    这一部分正在看 之后补全
     
    1. XML Schema Defination 简写 XSD 是 DTD Document Type Defination 的替代品 支持namespace
     
    优点:
    • XML Schema 可针对未来的需求进行扩展
    • XML Schema 更完善,功能更强大
    • XML Schema 基于 XML 编写
    • XML Schema 支持数据类型
    • XML Schema 支持命名空间
     
    通过对数据类型的支持:
    • 可更容易地描述允许的文档内容
    • 可更容易地验证数据的正确性
    • 可更容易地与来自数据库的数据一并工作
    • 可更容易地定义数据约束(data facets)
    • 可更容易地定义数据模型(或称数据格式)
    • 可更容易地在不同的数据类型间转换数据
     
    <! [CDATA [文本内容]] > 在特殊的标签CDATA下,所有的标签、实体引用都被忽略,而被XML处理程
    序一视同仁地当作字符数据看待。
     
    2. 处理指令 (PI process Instruction)处理指令用来指挥解析引擎如何解析XML文档内容
    处理指令必须以“<?”作为开头,以“?>”作为结尾 【看到了了没 和php的简写标签是一样的】
     
    例如,在XML文档
    中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容
     
    3.对xsd 文件的引用
    <?xml version="1.0"?> <note xmlns="http://www.w3school.com.cn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
     
    <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
     
    对 DTD 的引用
    <?xml version="1.0"?>
    <!DOCTYPE note SYSTEM "http://www.w3school.com.cn note.dtd"> <note>
    <to>George</to> <from>John</from> <heading>Reminder</heading> <body>Don't forget the meeting!</body> </note>
      
     
    慢慢沉淀自己
  • 相关阅读:
    大数斐波那契数列
    1、硬件IO口配置;
    1通过URL对象的openStream()方法能够得到指定资源的输入流。
    题意:
    一、作用:
    倒是在网上有看到显卡没装风尚导致该问题的,最后换了一个带风扇的显卡就解决的:
    Jeewx 捷微管家操作配置文档(开源版本号)
    工业控制系统USB存储设备可信管理方案的(ICICS2015)论文PPT:TMSUI: A Trust Management Scheme
    java.lang.ArithmeticException: Rounding necessary
    springcloud 熔断处理
  • 原文地址:https://www.cnblogs.com/martinding/p/7471098.html
Copyright © 2020-2023  润新知