XML模式规范dtd,schema总结
发布时间:2020-12-15 23:42:29 所属栏目:百科 来源:网络整理
导读:===XML=== 1.什么是xml? eXtensible Markup Language 可扩展的标记语言 1)html和xml的区别? html: 目的:展示,数据和显示方式结合 特点:标记是固定的,不可扩展. 语法宽松,浏览器接受不规范的语法 xml: 目的:数据 特点:标记可扩展 语法严格 2)xml主要用途:
===XML===
1.什么是xml? eXtensible Markup Language 可扩展的标记语言 1)html和xml的区别? html: 目的:展示,数据和显示方式结合 特点:标记是固定的,不可扩展. 语法宽松,浏览器接受不规范的语法 xml: 目的:数据 特点:标记可扩展 语法严格 2)xml主要用途: 保存数据,交换数据,配置文件 解析器: html:浏览器 xml:浏览器,myeclipse,xml spy 2.xml语法 1)声明: <?xml version="1.0" encoding="utf-8"?> 必须出现在文件的开始位置 2)标记: 自定义,有开始标记和结束标记,严格区分大小写 3)根元素: 有且只有一个 4)实体引用: <: < >: > &: & ": " ': ' 5)属性 属性一定出现在开始标记 属性必须有值(等号右边必须有内容) 6)CDATA:忽略所有实体引用的纯文本 <![CDATA[本文内容]]> 7)命名空间 <前缀:标记名称> <f:table> <f:name>apple</f:name> <f:price>5</f:price> </f:table> <w:table> <w:name>wood</w:name> <w:price>100</w:price> </w:table> ======DTD/Schema===== ----DTD---- 1.什么是DTD? Document Type Definition <计算机书籍> <书名 bh="123">xxx</书名> <价格>30</价格> </计算机书籍> <Computer> <bh>123</bh> <bookname>xxx</bookname> <price>30</price> </Computer> 交换数据时,要求xml文件格式相同,所以需要遵守相同的规范. 比如:两份文件要有相同的元素嵌套关系,相同的属性定义,相同的元素顺序,元素出现的次数等. 限制条件: 书籍列表:根元素 计算机书籍:在书籍列表中可以有多个元素 武侠书籍:在书籍列表中可以有多个元素 计算机书籍:书名,作者,价格,简介,必须有序 1)DTD文档的声明及应用 内部DTD文档 <!DOCTYPE 根元素 [定义内容]> 外部的DTD文档 <!DOCTYPE 根元素 SYSTEM "DTD文件(.dtd)路径"> 内部使用和外部结合 <!DOCTYPE 根元素 SYSTEM "DTD文件(.dtd)路径" [定义内容]> 2)元素 格式1:<!ELEMENT 标记名称 (子元素名,子元素名....)> 符号: ():用来给元素分组 *:0到多个 ,:表示有序 +:表示1到多次 |:表示或 ?:表示0或1次 格式2:<!ELEMENT 标记名称 类型> 类型: (#PCDATA):可以包含任何字符数据,但是不能包含子元素 EMPTY:该元素不能包含子元素和文本,但是可以有属性 ANY:该元素可以包含任何在DTD中定义的元素内容 2)属性 <!ATTLIST 标记名称 属性名称 类型 属性特点> 类型: CDATA:值为字符数据,可以是中文和数字,字母 NMTOKEN:是CDATA的一个子集,表示属性值必须是英文字母,数字,句号,破折号,下划线,或冒号,属性值中不能含有空格做分隔. NMTOKENS:与NMTOKEN类似.但可以出现空格. ID:表示该属性的取值必须是唯一的,并且ID属性值必须是"字母+数字",不能是纯数字 属性特点: #REQUIRED:该属性在元素中必须出现 #IMPLIED:该属性不是必须的,可有可无 #FIXED "value":属性值是固定的,属性本身可有可无 本质思想就是:树结构; <?xml version="1.0" encoding="UTF-8"?> <!ELEMENT 学生成绩信息 (林科大?,农大?,铁道?)> <!ELEMENT 林科大 (学生信息)+> <!ELEMENT 农大 (学生信息)+> <!ELEMENT 铁道 (学生信息)+> <!ELEMENT 学生信息 (姓名,性别,成绩表)> <!ELEMENT 姓名 (#PCDATA)> <!ELEMENT 性别 (#PCDATA)> <!ELEMENT 成绩表 (科目)+> <!ELEMENT 科目 (#PCDATA)> <!ATTLIST 学生信息 学号 ID #REQUIRED> <!ATTLIST 学生信息 是否已婚 CDATA #FIXED "true"> <!ATTLIST 科目 名称 CDATA #REQUIRED> ====Schema=== DTD的局限性: 1)DTD不遵守xml的语法 2)DTD数据数据有限(与数据库数据类型不一致) 3)DTD不可扩展 4)DTD不支持命名空间(命名冲突) Schema的优势: 1)Schema也是基于xml的语法 2)Schema扩充了数据类型,可以自定义数据类型 3)Schema支持元素继承 4)Schema支持属性组 Schema的文档结构: <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="www.zhongxin.com" elementFormDefault="qualified" attributeFormDefault="unqualified"> xs:schema 根元素 xmlns:xs 验证schema文件本身的命名空间所属 targetNamespace: 当前schema文件的命名空间(自定义) elementFormDefault:用于指示子元素是否放到命名空间中,值有两种: qualified:来自目标命名空间的元素必须用命名空间前缀限定. unqualified:来自目标命名空间的元素不必须用命名空间前缀限定. attributeFormDefault:用于指示属性是否放到命名空间中,值有两种: qualified:来自目标命名空间的属性必须用命名空间前缀限定. unqualified:来自目标命名空间的属性不必须用命名空间前缀限定. 1.元素定义: 一般格式 <xs:element name="book" type="xs:int"></xs:element> element 常用属性: name:定义的元素名称 type:定义元素的数据类型 -常用的简单数据类型: xs:string xs:int xs:boolean xs:date xs:time xs:decimal 任意精度 xs:double 双精度 ref:必须指向一个全局元素 default:为元素定义默认值(仅当元素是简单类型或textOnly时使用) maxOccurs:值表示该元素在父元素中出现的最大次数,它的取值为大于或等于0 默认值为unbounded. minOccurs:值表示该元素在父元素中出现的最小次数,它的取值为大于或等于0 默认值为1. --xml中引用Schema文件: 有命名空间: <my:book xmlns="www.zhongxin.com" xmlns:my="www.zhongxin.com" xsi:schemaLocation="www.zhongxin.com firstSchema.xsd"> 无命名空间: xsi:noNamespaceSchemaLocation="firstSchema.xsd" fixed:为简单元素设置固定值 注意: 在元素中的值不能有空格 2.属性定义: <xs:attribute name="id" type="xs:string"/> attribute主要属性:name,default,fixed,ref,type use:指示元素该如何使用该attribute类型 值有: optional(默认):表示该属性可以是任何值,属性可选 prohibited:表示不能使用该属性 required:表示该属性必须出现一次 3.SimpleType类型元素:(不能包含子元素或属性) 用于xml元素或者属性中定义可接受的值 方式有内嵌和应用两种 注意: a.内嵌的时候不能使用类型名 b.推荐使用引用类型,方便扩展,但注意是否有nameSpace="xx",有的话加上 xmlns="xx" 1)引用类型基本使用: <xs:element name="ageTest" type="ageType"/> <xs:simpleType name="ageType"> <xs:restriction base="xs:int"> <xs:minInclusive value="0"/> <xs:maxInclusive value="200"/> </xs:restriction> </xs:simpleType> restriction元素: 属性:base属性指定数据类型 子元素: minInclusive:最小值(包含边界) maxInclusive:最大值(包含边界) minExclusive:最小值(不包含边界) maxExclusive:最大值(不包含边界) pattern:主要用于对某个属性或元素进行约束,可以使用正则表达式 enumeration:元素的内容限制为一组可接受的值 简单类型的例子: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="www.zhongxin.com" targetNamespace="www.zhongxin.com" elementFormDefault="qualified" attributeFormDefault="unqualified"> <!--内嵌 <xs:element name="age"> <xs:simpleType> <xs:restriction base="xs:int"> <xs:minExclusive value="0"/> <xs:maxExclusive value="200"/> </xs:restriction> </xs:simpleType> </xs:element> --> <!--引用方式 <xs:element name="ageTest" type="ageType"/> <xs:element name="ageTest1" type="ageType"/> <xs:simpleType name="ageType"> <xs:restriction base="xs:int"> <xs:minInclusive value="0"/> <xs:maxInclusive value="200"/> </xs:restriction> </xs:simpleType> --> <xs:element name="id" type="idType"/> <xs:simpleType name="idType"> <xs:restriction base="xs:string"> <xs:pattern value="[A-Za-z]{3}-d{3}"/> </xs:restriction> </xs:simpleType> <xs:element name="car" type="carType"/> <xs:simpleType name="carType"> <xs:restriction base="xs:string"> <xs:enumeration value="奥迪"/> <xs:enumeration value="玛莎拉蒂"/> <xs:enumeration value="雷克萨斯"/> <xs:enumeration value="吉利"/> </xs:restriction> </xs:simpleType> </xs:schema> 4.复杂类型 复杂类型是可以包含其他元素,属性和组的元素定义 1)sequence:要求一组中元素以指定的顺序出现 属性: maxOccurs:定义最多出现的次数 minOccurs:定义最少出现的次数 2)all:一组元素可以无序出现 maxOccurs:定义最多出现的次数 minOccurs:定义最少出现的次数 案例: 1.仅包含子元素的元素
2.含文本和属性的复杂元素 <xs:complexType name="peoType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="id" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> simpleContent:用于对complexType元素或字符数据做约束.但是不能包含子元素 子元素: extension:扩展simpleType的元素内容 restriction:限制数据,simpleType元素的子集 3.包含文本,子元素和属性的复杂元素 <xs:complexType name="peoType"> <xs:attribute name="idCard" type="xs:string" use="required"/> </xs:complexType> 注意: a.使用sequence或all在设置属性attribute之前 b.mixed="true":表示是字符数据可以出现在子元素之间 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="www.zhongxin.com" targetNamespace="www.zhongxin.com" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="peoples" type="peoplesType"/> <xs:complexType name="peoplesType"> <xs:sequence minOccurs="1" maxOccurs="unbounded"> <xs:element name="people" type="peopleType1"/> <xs:element ref="peo"/> </xs:sequence> </xs:complexType> <!--有序出现--> <xs:complexType name="peopleType"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="age" type="ageType"/> <xs:element name="car" type="carType"/> </xs:sequence> </xs:complexType> <!--无序出现,有属性idCard,通过设置mixed="true"标签之中可以出现文本--> <xs:complexType name="peopleType1" mixed="true"> <xs:all> <xs:element name="name" type="xs:string"/> <xs:element name="age" type="ageType"/> <xs:element name="car" type="carType"/> <xs:element ref="class"/> </xs:all> <xs:attribute name="idCard" use="required"/> </xs:complexType> <xs:simpleType name="ageType"> <xs:restriction base="xs:int"> <xs:minInclusive value="0"/> <xs:maxInclusive value="200"/> </xs:restriction> </xs:simpleType> <xs:simpleType name="carType"> <xs:restriction base="xs:string"> <xs:enumeration value="奥迪"/> <xs:enumeration value="玛莎拉蒂"/> <xs:enumeration value="雷克萨斯"/> <xs:enumeration value="吉利"/> </xs:restriction> </xs:simpleType> <!--含文本和属性的复杂元素--> <xs:element name="peo" type="peoType"/> <xs:complexType name="peoType"> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="id" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> <!--定义教室标签中文本数据简单类型限定--> <xs:simpleType name="simpleType1"> <xs:restriction base="xs:string"> <xs:enumeration value="small"/> <xs:enumeration value="middle"/> <xs:enumeration value="big"/> </xs:restriction> </xs:simpleType> <!--对简单类型做数据限定 <xs:simpleType name="simpleType2"> <xs:restriction base="simpleType1"> <xs:enumeration value="middle"/> <xs:enumeration value="big"/> </xs:restriction> </xs:simpleType> --> <xs:element name="class" type="class1"/> <xs:complexType name="class"> <xs:simpleContent> <!--通过extension扩展属性--> <xs:extension base="simpleType1"> <xs:attribute name="id" type="xs:string" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> <xs:complexType name="class1"> <xs:simpleContent> <!--数据限定,只能限定复杂类型--> <xs:restriction base="class"> <xs:enumeration value="middle"/> <xs:enumeration value="big"/> </xs:restriction> </xs:simpleContent> </xs:complexType> </xs:schema> 3.choice选择器 规定可出现一组元素的某一个. <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="www.zhongxin.com" targetNamespace="www.zhongxin.com" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="authors" type="asType"/> <xs:complexType name="asType"> <xs:sequence> <xs:element name="author" type="aType"/> </xs:sequence> </xs:complexType> <xs:complexType name="aType"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="age" type="xs:int"/> <xs:choice> <xs:element name="phone" type="xs:string"/> <xs:element name="tel" type="xs:string"/> </xs:choice> </xs:sequence> </xs:complexType> </xs:schema> 4.group组 group声明内部定义一个all,choice,sequence元素 <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xs:element name="students" type="stusType"></xs:element> <xs:complexType name="stusType"> <xs:sequence maxOccurs="unbounded"> <xs:element name="student" type="stuType"/> </xs:sequence> </xs:complexType> <xs:complexType name="stuType"> <xs:sequence> <xs:group ref="stuGro"/> <xs:element name="school" type="xs:string"/> </xs:sequence> <xs:attributeGroup ref="attrGro"/> </xs:complexType> <!--定义元素组信息--> <xs:group name="stuGro"> <xs:sequence> <xs:element name="name" type="xs:string"/> <xs:element name="age" type="xs:int"/> <xs:element name="sex" type="sexType"/> </xs:sequence> </xs:group> <!--定义属性组信息--> <xs:attributeGroup name="attrGro"> <xs:attribute name="id" type="xs:string" use="required"/> <xs:attribute name="idCard" type="xs:string"/> </xs:attributeGroup> <xs:simpleType name="sexType"> <xs:restriction base="xs:string"> <xs:enumeration value="男"/> <xs:enumeration value="女"/> </xs:restriction> </xs:simpleType> </xs:schema> 5.ComplexContent: 定义对复杂类型的扩展或限定 层次关系总结: Grounp simpleType ComplexType all 无序 sequence 有序 choice 选择之一 simpleContent conmplexContent restriction限制 extension 扩展 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |