XML以及DTD约束schema约束

xml数据格式和Annotation

1:xml数据格式

1:xml数据格式介绍
    1:可扩展标志语言(Extensible markUp language)标签可以自己定义。
    2:用来存储数据和传输,
2:xml数据格式作用:
        数据传输和存储数据,xml   ==  json一样的作用
        代替:json数据简单没有大量的冗余标签,数据更加清晰,而且符合js 的对象创建格式
        xml数据有大量的冗余,余姚很多的无用标签符号
        xml解析麻烦,也占用大量的内存,早期的手机中不敢实用xml,会导致oom!anr!!!
  json可以在前端转化成前端对象,方便解析
  json是一种数据格式,字符串有规则,方便解析
3:xml语法
    1:一个XML文件只能有一个根标签,
    2:xml标签有一个关闭标签,,,又开始也有结束
    3:xml文件大小写敏感,
    4:xml文件需要正确嵌套
    5:属性在开始标签里面,且一件是对的形式存在
    6:支持特殊编译符号
        &lg  < 
        &gt  >
        &emp &
        ...
4:xml在框架中的作用
    xml作为框架配置文件存在,    利用的是xml文件的存储功能和自我描述功能
        想想,XML文件的标签可以随意定义,因此xml文件可以随意作为框架的配置文件吗
        xml文件不可以随意定义标签,因为框架不可以识别,
        因此写框架的人应该为xml文件添加约束,使其能够满足框架的识别功能
5:xml文件格式的约束
    要求,读的懂约束文件
          会写约束文件
    如何读
    如何写
    如何引用
    HTML = xml+约束
    约束:
        1:约束标签的命名
        2:约束标签的内容
        3:约束标签出现的位置顺序
        4:约束标签出现的次数
        5:月湖标签属性内容
   1:DTD约束:
       文档类型定义:可以定义XML文件的构建模块,他可以申明在xml文档里,也可以作为一个外部
       .dtd文档
   2:如何xml文件使用dtd约束
        内容:
        <?xml version="1.0" encoding="utf-8"?>
        <!DOCTYPE 元素根标签 [约束语法
        ...
        ]>
        <根标签>
            <子标签></子标签>
            ...
        </根标签>
     3:外部编写dtd映入到xml文件中
        步骤一:外部创建一个.dtd文件
        里面直接编写约束内容
        步骤二:将外部的dtd文件引入到dtd文件
        <!DOCTYPE 根标签 SYSTEM "文件名.dtd|网络地址">
     4:约束标签
        <!ELEMENT 元素名 (内容)>
        文本|子标签
         子标签:元素名就行(标签1,标签2,...)没有添加量词就是默认的可以出现一次
         而且元素顺序不可变
         文本内容:#PCDATA
     5:量词:
           +:一次-n次
           *:0-n 
           ?:0|1
           默认只能一次
           (a,b, (a|b))
     6:属性约束
           <!ATTLIST element-name attribute-name attrubute-type attribute-value>
           book i 字符串  必须添加
           attribute-type:
               CDATA 为字符换数据
               (el1|el2|el3) 枚举 (男|女)
               ID 值唯一的id
           attribute-value:
           值             属性默认值(男|女) "男"
           #REQUIRED      属性必须的
           #IMPLIED       属性不是必须的
           #FLIXED  value  属性是固定的
      7:案例:
            1.编写一个外部的dtd文件!
            2.要求xml的根标签是students
            3.根标签至少包含一个student标签
            4.student标签需要包含stuid属性,而且属性值是唯一的!
            5.student标签中 必须出现  name  age  sex 三个标签 只能出现一次 而且顺序固定!
            6.除了以上三个标签,还有可能出现1次  info  address 标签
            7.sex标签有一个 value属性,值默认是男  只能出现男和女
            8.info必须添加一个字符串类型的i属性即可!
            stu.dtd文件   dtd方式
            <!ELEMENT students (student+)>
            <!ELEMENT student (name,age,sex,info?,address?)>
            <!ELEMENT name (#PCDATA)>
            <!ELEMENT age (#PCDATA)>
            <!ELEMENT sex (#PCDATA)>
            <!ELEMENT info (#PCDATA)>
            <!ELEMENT address (#PCDATA)>
            <!ATTLIST sex value (男|女) "男">
            <!ATTLIST address (#PCDATA)>
            <!ATTLIST info i CDATA #REQUIRED>
            stu.xml文件   xml方式
            <?xml version="1.0" encoding="UTF-8" ?>
            <!DOCTYPE students[
                    <!ELEMENT students (student+)>
                    <!ELEMENT student (name,age,sex,info?,address?)>
                    <!ELEMENT name (#PCDATA)>
                    <!ELEMENT age (#PCDATA)>
                    <!ELEMENT sex (#PCDATA)>
                    <!ELEMENT info (#PCDATA)>
                    <!ELEMENT address (#PCDATA)>
                    <!ATTLIST sex value (男|女) "男">
                    <!ATTLIST info i CDATA #REQUIRED>
            ]>
            <students>
                <student>
                    <name>回电话</name>
                    <age>23</age>
                    <sex>男</sex>
                </student>
            </students>
            aaa.xml   引用
            <?xml version="1.0" encoding="UTF-8" ?>
            <!DOCTYPE students SYSTEM "stu.dtd">  //此处的students为引入的文件的根元素
            <students>
                <student>
                    <sex></sex>
                    <age></age>
                    <name></name>
                </student>
            </students>
    8:dtd能 能约束具体的属性内容吗?
    因此诞生了约束更严格的语法更复杂的schema 重点,新版本框架都是schema约束
       1:schema的优点
          1:dtd能干的都能干
          2:dtd不能干的也能干
       2:缺点
          1:语法较为复杂
       3:xml的命名空间
       命名空间就是给一个元素添加前缀,标签名相同但是命名空间不同依然可以区分元素
       <字符串:元素名></字符串:元素名>
       例如:<http://www.baidu.com:student></http://www.baidu.com:student>  
   一个xml文件可以有多个命名空间
      例如:
      <qf:students xmlnsq:qq="www.qq.com"
                   xmlns:bd="http://www.baidu.com"
                   xmlns:ali="http://www.alibaba.com"
      />
   9:命名空间的作用
        1:命名空间相当于一个前缀,用来区分形同名字的标签
        2:schema作用的范围就是指定命名空间里的元素和元素属性
   10:schema的具体实现
         1:schema本身就是XML文件
         2:语法
         schema标签就是每个xml schema的根元素
         申明一个标签
         <schema 命名空间:element name=“标签名” type = "标签属性">
   11:type 属性的写法
        1:基本类型
            xln:string
            ln:int
        2:简单类型:
            xls:string长度必须大于3 小于5
            xls:string男和女
            xls:int  
          enumeration  定义可接受值的一个列表
   fractionDigits  定义所允许的最大的小数位数。必须大于等于0。
   length  定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
   maxExclusive  定义数值的上限。所允许的值必须小于此值。
   maxInclusive  定义数值的上限。所允许的值必须小于或等于此值。
   maxLength  定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
   minExclusive  定义数值的下限。所允许的值必需大于此值。
   minInclusive  定义数值的下限。所允许的值必需大于或等于此值。
   minLength  定义所允许的字符或者列表项目的最小数目。必须大于或等于0。
   pattern  定义可接受的字符的精确序列。
   totalDigits  定义所允许的阿拉伯数字的精确位数。必须大于0。
    whiteSpace  定义空白字符(换行、回车、空格以及制表符)的处理方式。
  <xls:simpleType name"自定义">
            <xls:rstriction base="引入自定义类型">
                规则自定义
            </xls:rstriction>
  </xls:simpleType>
      3:复杂类型
          有属性或者子元素的标签 type应该是复杂类型
           <xls:complexType name="noteType">
           <!-- 声明子元素和子属性 -->
           <xls:sequence>
                <!-- 队列里声明的元素有先后顺序 -->
                <!-- 字符串  长度大于=2 小于=4
                     默认有且只有一次!
                -->
               <xls:element name="from"  type="fromType"
                   minOccurs="0" maxOccurs="1"
                />
           </xls:sequence>
          <!--属性 -->
          <xls:attribute name="i" type="itype"  use="required"></xls:attribute>
     </xls:complexType>
12:schema的引入
        <?xml version="1.0"?>
        <根标签
            xmlns:h="自己在约束声明的命名空间"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"//规定
            xsi:schemaLocation="自己在约束声明的命名空间 约束的文件名">
  </根标签> 
 教师描述:
             teachers 
                 至少一个teacher
                 teacher必须包含一个id属性  id命名 必须是  t_3个数字
                     name标签  一个 字符串 2-4
                     age属性        18-30
                     sex性别        男和女
                     info          可以出现多次! 0-n 字符串不能少于20个字 不能大于200
                     address       标签 
                                  pro    辽宁省   河北省  河南省
                                  city   葫芦岛市  绥中市  东戴河市
                                  xian   长度不超过30就可以
 teacher.xsd
 <?xml version="1.0" encoding="UTF-8" ?>
   <xls:schema
           xmlns:xls="http://www.w3.org/2001/XMLSchema"
           xmlns="http://www.qianfeng.com"
           targetNamespace="http://www.qianfeng.com"
           elementFormDefault="qualified">
       <!--元素-->
       <xls:element name="teachers" type="teachersType" />
       <xls:complexType name="teachersType">
           <xls:sequence>
               <xls:element name="teacher" type="teacherType" minOccurs="1" maxOccurs="unbounded"/>
           </xls:sequence>
       </xls:complexType>
       <!--类型-->
       <xls:complexType name="teacherType">
           <xls:sequence>
               <xls:element name="name" type="nameType"></xls:element>
               <xls:element name="sex" type="sexType"></xls:element>
               <xls:element name="age" type="ageType"></xls:element>
               <xls:element name="info" type="infoType" minOccurs="0"  maxOccurs="unbounded" />
               <xls:element name="address" type="addressType"></xls:element>
           </xls:sequence>
           <xls:attribute name="id" type="idType" use="required"></xls:attribute>
       </xls:complexType>
       <!--类型-->
       <xls:simpleType name="nameType">
           <xls:restriction base="xls:string">
               <xls:minLength value="2"></xls:minLength>
               <xls:maxLength value="4"></xls:maxLength>
           </xls:restriction>
       </xls:simpleType>
       <xls:simpleType name="sexType">
           <xls:restriction base="xls:string">
               <xls:enumeration value="男" />
               <xls:enumeration value="女" />
           </xls:restriction>
       </xls:simpleType>
       <xls:simpleType name="ageType">
           <xls:restriction base="xls:int">
               <xls:minInclusive value="18" />
               <xls:maxInclusive value="30" />
           </xls:restriction>
       </xls:simpleType>
       <xls:simpleType name="infoType">
           <xls:restriction base="xls:string">
               <xls:minLength value="20" />
               <xls:maxLength value="200" />
           </xls:restriction>
       </xls:simpleType>
       <xls:complexType name="addressType">
           <xls:sequence>
               <xls:element name="pro" type="xls:string"/>
               <xls:element name="city" type="xls:string" />
           </xls:sequence>
       </xls:complexType>
       <xls:simpleType name="idType">
           <xls:restriction base="xls:string">
               <xls:pattern value="t_\d{3}"/>
           </xls:restriction>
       </xls:simpleType>
   </xls:schema>
   teacher.xml
   <?xml version="1.0" encoding="UTF-8" ?>
     <teachers xmlns="http://www.qianfeng.com"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xsi:schemaLocation="http://www.qianfeng.com  teacher.xsd"
     >
         <teacher id="t_001">
             <name>hfh</name>
             <sex>男</sex>
             <age>23</age>
             <address>
                 <pro>宁夏</pro>
                 <city>银川</city>
             </address>
         </teacher>
         <teacher id="t_002">
             <name>hfh</name>
             <sex>男</sex>
             <age>23</age>
             <address>
                 <pro>c</pro>
                 <city>vd</city>
             </address>
         </teacher>
     </teachers>
2:Annotation

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值