zoukankan      html  css  js  c++  java
  • xml-dtd

    dtd用于校验XML的语法。
    dtd步骤:
    1、看XML中有多少个元素,有几个元素,在dtd文件中写几个<!ELEMENT>
    2、判断元素是简单元素还是复杂元素
    -复杂元素:有子元素的元素
    <!ELEMENT 元素名称 (子元素)>
    -简单元素:没有子元素
    <!ELEMENT 元素名称 (#PCDATA)>
    3、需要在XML文件中引入dtd文件
    <!DOCTYPE 根元素名称 SYSTEM "dtd文件的路径">

    dtd的三种引入方式:
    1、引入外部的dtd文件
    <!DOCTYPE 根元素名称 SYSTEM "dtd路径">
    2、使用内部的dtd文件
    -<!ELEMENT 根元素名称[
    <!ELEMENT 根元素名称(子元素1,子元素2)>
    <!ELEMENT 子元素1 (#PCDATA)>
    <!ELEMENT 子元素2 (#PCDATA)>
    ]>
    -<!ELEMENT person[
    <!ELEMENT person(name,age)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    ]>
    3、使用外部的dtd文件(网络上的dtd文件)
    -<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文档的URL">
    -框架Struts2使用的是外部的dtd文件

    使用dtd定义元素
    语法:<!ELEMENT 元素名 约束>
    简单元素:没有子元素的元素
    约束简单元素
    (#PCDATA):约束子元素是字符串类型
    EMPTY:元素为空(不能有内容)
    ANY:任意类型
    复杂元素:
    <!ELEMENT person (name,age)>
    <!ELEMENT 根元素名称 (子元素1,子元素2)>
    -子元素只能出现一次
    -表示子元素出现的次数
    +:表示一次或者多次 例:<!ELEMENT person (name+,age)>
    ?:0次或者一次 例:<!ELEMENT person (name,age?)>
    *:0次或者多次 例:<!ELEMENT person (name,age*)>
    -子元素直接使用逗号进行隔开
    表示元素出现的顺序 例:<!ELEMENT person (name,age)>
    -子元素直接使用竖线进行隔开
    表示元素只能出现其中一个 例:<!ELEMENT person (name|age)>

    使用dtd定义属性
    语法:在子元素上面加属性约束:<!ATTLIST 元素名称
    属性名称 属性类型 属性的约束
    >
    属性类型:
    -CDATA:字符串
    例: <!ATTLIST name
    ID2 CDATA #REQUIRED
    >
    -枚举:表示只能在一定的范围内出现值,但是只能每次出现其中的一个
    例:<!ELEMENT person[
    <!ELEMENT person(name,age)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>

    <!ATTLIST age
    ID1 (AA|BB|CC) #REQUIRED
    >
    ]>
    <person>
    <name>zhangsan</name>
    <age ID1="AA" >20</age>
    </person>
    -ID:表示属性只能是字母或者下划线开头
    例: <!ATTLIST name
    ID1 ID #REQUIRED
    >
    -属性的约束:
    -#REQUIRED:表示属性必须出现
    -#IMPLIED:表示属性可有可无
    -#FIXED:表示一个固定值 #FIXED “ABC”;
    -直接值: 不写属性,使用直接值
    写属性值,使用设置那个值
    例:<!ATTLIST name
    ID1 CDATA "aaa";
    >

    定义引用实体
    语法:<!ENTITY 实体名称 "实体的值">
    使用实体 &实体名称;区分大小写 例:&TEST;

    注意:
    定义实体需要写在内部dtd里面;
    如果写在外部的dtd里面,有某些浏览器,内容得不到

    xml的解析简介(写到Java代码)
    -xml是标记型文档
    -js使用dom解析标记型文档?
    -根据html的层级结构,在内存中分配一个树形结构,把html的标签,属性和文本都封装成对象
    -document对象、element对象、属性对象、文本对象、Node节点对象

    -xml的解析方式(技术):dom和sax(重点中重点)
    -使用dom解析:根据xml的层级结构在内存中分配一个树形结构,把xml的标签,属性和文本都封装成对象。
    优点:很方便实现增删改操作
    缺点:如果文件过大,造成内存溢出
    -sax解析:采用事件驱动,边读边解析从上到下,一行一行的解析,解析到某一个对象,把对象名称返回
    优点:如果文件过大不会造成内存溢出,方便查询操作
    缺点:不能实现增删改操作

    解析xml,首先需要解析器
    -不同的公司和组织提供了 针对dom和sax方式的解析器,通过API方式提供
    --sun公司提供了针对dom和sax解析器 jaxp
    --dom4j组织,针对dom和sax解析器 dom4j(--实际开发中---)
    --jdom组织,针对dom和sax解析器 jdom

    jaxp的API的查看(JDK API 1.6.0帮助文档)
    jaxp是javase的一部分
    javax.xml.parsers包中,
    四个类:分别是针对dom和sax解析使用的类
    dom:DocumentBuilder:解析器类
    这个类是一个抽象类,不能new
    可以使用DocumentBuilderFactory.newDocumentBuilder()方法获取

    一个方法,可以解析xml parse("xml路径") 返回是Document整个文档
    返回的document是一个接口,父节点是Node,如果在document里面找不到想要的方法,到Node里面去找
    在document里面方法

    DocumentBuilderFactory:解析器工厂
    newInstance()获取,DocumentBuilderFactory的实例。

    sax:
    SAXParser:解析器类
    SAXParser



    xml的简介
    extensible Markup Language:可扩展标记型语言
    -标记型语言:html是标记型语言
    -也是使用标签来操作
    -可扩展:
    -html里面的标签是固定,每个标签都有特定的含义<h1><br/>
    -标签可以自己定义,可以写中文的标签<person></person>、<猫></猫>
    xml用途
    -html是用于显示数据,xml也可以显示数据(不是主要功能)
    -xml主要功能,为了存储数据
    xml是w3c组织发布的技术
    xml有两个版本 1.0 1.1
    -使用都是1.0版本(1.1版本不能向下兼容)
    xml的应用
    不同的系统之间传输数据
    -qq之间数据的传输
    用来表示生活中有关系的数据 例:国家和城市
    经常用在文件配置
    -比如现在链接数据库 肯定知道数据库的用户名和密码,数据名称

    xml的语法
    1、xml的文档声明
    -创建一个文件,后缀名是.xml
    -如果写xml,第一步 必须有一个文档声明(写了文档声明之后,表示写XML文件的内容)
    -<?xml version="1.0" encoding="gbk">
    -文档声明必须写在第一行第一列

    -属性
    -version:xml的版本1.0
    -encoding:xml编码 gbk utf-8 ISO8859-1(不包含中文)
    -standalone:是否需要依赖其他文件 yes/no

    -xml的中文乱码问题解决
    -保存时候的编码和设置打开时候的编码一致,不会出现乱码
    2、定义元素(标签)
    3、定义属性
    4、注释
    5、特殊字符
    6、CDATA区
    7、PI指令

    xml的元素定义
    -标签定义
    -标签定义有开始必须要有结束:<person></person>
    -标签没有内容,可以在标签内结束<aa/>
    -标签可以嵌套,必须要合理嵌套
    -合理嵌套<aa><bb></bb></aa>
    -一个xml中,只能有一个根标签,其他标签都是这个标签下面的标签

    -在xml中 把空格和换行都当成内容来解析
    -下面这两段代码含义是不一样的,把空格原样输出
    <aa>111</aa>
    <aa>
    111
    </aa>
    -xml标签可以是中文
    -xml中标签的名称规则
    1)xml代码区分大小写
    <a><A>:这两个标签是不一样的
    2)xml标签不能以数字和下划线(_)开头
    3)xml的标签不能以xml、XML、Xml等开头
    4)xml的标签不能包含空格和冒号

    xml中属性的定义
    -html是标记型文档,可以由属性
    -xml也是标记型文档,可以有属性

    属性定义的要求
    !)一个标签上可以有多个属性
    2)属性名称不能相同
    3)属性名称和属性值之间使用= ,属性值使用引号包起来(单引号,双引号都可以)
    4)xml属性的名称规范和元素的名称规范一致

    xml中的注释
    -写法<!--xml的注释 -->
    -注意的地方
    -注释不能嵌套
    -注释也不能放到第一行,第一行第一列必须放文档声明

    xml中的特殊字符
    -如果想要在xml中现在a<b,不能正常显示,因为把<当做标签
    -如果就想要显示,需要对特殊字符<进行转义
    < &lt;
    > &gt;

    CDATA区--了解
    -可以解决多个字符都需要转义的操作
    -if(a<b && B<c && d>f){}把这些内容放到CDATA区里面,不需要转义了
    -写法:
    <![CDATA [ 内容 ]>
    -代码
    <![CDATA [<b> if(a<b && B<c && d>f){} </b>]]>
    把特殊字符,当做文本内容,而不是标签
    PI指令(处理指令)--了解
    -可以在xml中设置样式
    -写法:<?xml-stylesheet type="text/css" href="CSS路径" ?>

    xml的约束
    为什么需要约束?
    比如现在定义一个person的xml文件,只想要这个文件里面保存人多信息,比如name age等,但是如果在xml文件中
    写了一个标签<猫>,发现可以正常显示,因为符合语法规范,但是猫肯定不是人的信息,xml的标签是自定义的,需要技术来规定xml
    中只能出现的元素,这个时候需要约束。

    xml的约束技术:dtd约束 和schema约束 ---看懂

  • 相关阅读:
    AJAX 弹出窗消息类
    正则表达式验证总结
    Coolite 三列布局演示
    Coolite: Button、TextField、DataField、ComBox
    页面返回
    Coolite GridPanel 操作之一:获取gridpanel 选中行的记录信息
    页面上Enter 键禁用
    new、abstract、virtual、override,sealed关键字区别和使用代码示例
    Coolite TreePanel 操作之一:TreePanel 刷新
    调用WCF出现 The remote server returned an error: (401) Unauthorized. 错误
  • 原文地址:https://www.cnblogs.com/xiqoqu/p/9069920.html
Copyright © 2011-2022 走看看