哈喽大家好,这里是Java框架学习笔记专栏第一期 本期内容——schema约束 笔者还是菜菜,还请大家多多指教呀~
XML Schema是一种用于定义和描述XML文档结构与内容的模式语言,它的出现克服了DTD的局限性。 那么XML Schema有哪些显著优点呢?这里我们通过以下比较来看看。 XML Schema与DTD的比较:
XML Schema的功能比DTD强大很多,但相应的语法也比DTD复杂很多。
一个XML文档可以引入多个约束文档,但是,约束文档中的元素或属性都是自定义的,所以在XML文档中,极有可能出现代表不同含义的同名元素或者属性,导致名称发生冲突。为此,在XML文档中,提供了名称空间,它可以唯一标识一个元素或者属性。
名称空间的声明就是在XML实例文档中为某个模式文档的名称空间指定一个临时的简写名称,它通过一系列的保留属性来声明,名字必须是以xmlns或者xmlns:作为前缀。 声明的语法格式如下:
<元素名 xmlns:prefixname=“URI”> 元素名指的是在哪一个元素上声明名称空间,在这个元素上声明的名称空间适用于声明它的元素和属性,以及该元素中嵌套的所有元素及其属性。
xmlns:prefixname
指的是该元素的属性名,对应的值是一个URI引用,用来标识该名称空间的名称。 如果有两个URI并且其组成的字符完全相同,就可以认为它们标识的是同一个名称空间。
通过属性xsi:schemaLocation
来声明名称空间的文档,xsi:schemaLocation
属性是在标准名称空间http://www.w3.org/2001/XMLSchema-instance中定义的。
第一个URI是名称空间的名称,第二个URI是文档的位置。
任何语言都有一定的语法,Schema也不例外。接下来,让我们一起来了解Schema语法吧~
元素定义的语法格式如下:
element
用于声明一个元素
xxx
指的是元素的名称
yyy
指元素你的数据类型
<xs:element name=“xxx” type=“yyy”/>
XML中常用的内建的数据模型:
xs:string
:表示字符串类型xs:decimal
:表示小数类型xs:integer
:表示整数类型xs:boolean
:表示布尔类型 xs:date
:表示日期类型xs:time
:表示时间类型属性定义的语法格式如下: xxx指的是属性名称,yyy指的是属性的数据类型。其中,属性的常用数据类型与元素相同,都使用的是XML Schema中内建的数据类型。
<xs:attribute name=“xxx” type=“yyy”/>
简单类型使用xs:simpleType
元素来定义。如果想对现有元素内容的类型进行限制,则需要使用xs:restriction
元素。
xs:minlnclusive
和xs:maxlnclusive
元素对值进行限定,可以限定值的范围。
xs:enumeration
元素对一组值的限定:如果希望将XML元素的内容限制为一组可接受的值,可以使用枚举约束。
xs:pattern
元素对一系列值的限定:如果希望把XML元素的内容限制定义为一系列可使用的数字或者字母,可以使用模式约束。
xs:restriction
元素对空白字符的限定:空白字符比较特殊,如果需要对空白字符进行处理,可以使用whiteSpace元素。
whiteSpace
元素有三个属性值可以设定,即preserve、replace、collapse。preserve
:不对元素中的任何空白字符进行处理replace
:移除所有的空白字符collapse
:将所有的空白字符缩减为一个单一字符。
除简单类型之外的其他类型都是复杂类型,在定义复杂类型时,需要使用xs:complexContent
元素来定义。
复杂类型的元素可以包含子元素和属性,这样的元素称为复合元素。
在定义复合元素时,如果元素的开始标记和结束标记之间只包含字符数据内容,那么这样的内容是简易内容,需要使用xs:simpleContent
元素来定义。
反之,元素的内容都是复杂内容,需要使用xs:complexContent
元素来定义。
复合元素有4种基本类型:空元素、包含其它元素的元素、仅包含文本的元素、包含元素和文本的元素
以上就是今天学习的内容啦,分享给大家~ 咱们下期再见噢~