当前位置:   article > 正文

Schema约束

schema约束

1.Schema简介

1.Schema(模式):

其作用与DTD一样,也用于验证XML文档的有效性,只不过它提供了比DTD更强大的功能和更细粒度的数据类型,另外,Schema还可以自定义数据类型。

此外,Schema也是一个XML文件,而DTD不是。

2.所有的schema文档,其根元素必须为schema。

3.simpleType与complexType的区别:

(1) simpleType类型的元素没有子元素,也没有属性。

(2)当需要定义的元素包含了子元素或者属性时,必须要使用complexType。

4.simpleContent用于complexType元素上,用于限定complexType的内容类型,表示complexType没有子元素
同时该complexType需要有属性,否则它就成为了simpleType了。
通过DOCTYPE可以明确指定文档的根元素,因为DOCTYPE后面跟的元素就是文档的根元素;通过Schema是没法明确指定目标XML文件的根元素的,
XmlSpy是通过推断哪个元素包含了其它元素来选择包含其它元素最多的那个元素作为文档的根,但我们可以明确指定文档的根元素而不必按照XmlSpy的生成来做。
5.Xml schema 也是用于定义和描述xml文档内容和结构的模式语言,其出现是为了克服dtd的局限性

XML SCHEMA VS DTD

2.schema和dtd的比较

1.XML SCHEMA 符合XML语法结构

2.DOM,SAX等XML API 很容易解析xml schema 文档中的内容

3.XML SCHEMA对名称空间支持的非常好。

4.XML SCHEMA比XML DTD支持更好的数据类型,并支持用户自定义新的数据类型。

5.XML SCHEMA定义约束的能力非常强大,可以对XML实例文档做出细致的语言限制。

6.XML SCHEMA不能像DTD一样定义实体,比DTD复杂,但是XMLSCHEMA现在是W3C组织的标准,正在取代DTD。

3.Schema在sevelet中的示例

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  PrintWriter out = response.getWriter();
  String path = this.getServletContext().getRealPath("/")+ "xml\\shiporder.xsd";
  File file = new File(path);
  SchemaFactory factory = SchemaFactory.newInstance("http://www.w3.org/2001/XMLSchema");
  Schema schema = null;
  try {
   schema = factory.newSchema(file);
  } catch (SAXException e) {
   e.printStackTrace();
  }
  String input = this.getServletContext().getRealPath("/")+ "xml\\shiporder.xml";
  Source source = new StreamSource(input);
  Validator validator = schema.newValidator();
  try {
   validator.validate(source);
   out.println(input + "\tis\tvalid");
  } catch (Exception e) {
   out.println(input + "\tis\tnot\tvalid");
   e.printStackTrace();
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

注:path路径不能有空格否则造成以下异常

   java.net.MalformedURLException: unknown protocol: d
        at java.net.URL.<init>(URL.java:574)
        at java.net.URL.<init>(URL.java:464)
        at java.net.URL.<init>(URL.java:413)
  • 1
  • 2
  • 3
  • 4

4.Sxhema约束

1.语法
在这里插入图片描述
(1)dtd语法: <!ELEMENT 元素名称 约束>,但是一个xml 只能有一个dtd 约束
(2)schema符合xml的语法,xml语句,一个xml中可以有多个schema
2.创建schema
在这里插入图片描述
创建一个schema文件 后缀名是 .xsd
根节点
在schema文件里面
(1) 属性 xmlns=“http://www.w3.org/2001/XMLSchema
- 表示当前xml文件是一个约束文件
3.区分xml 和schema 哪一个是约束呢
在这里插入图片描述
(1)看xml中有多少个元素

<element>
  • 1

(2)看简单元素和复杂元素 如果复杂元素

<complexType>
                    <sequence>
                        子元素
                    </sequence>
            </complexType>
  • 1
  • 2
  • 3
  • 4
  • 5

(3)简单元素,写在复杂元素的

<element name="person">
            <complexType>
            <sequence>
                    <element name="name" type="string"></element>
                    <element name="age" type="int"></element>
            </sequence>
            </complexType>
            </element>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

在这里插入图片描述

5.使用Schema约束

book.xsd(一个XML Schema文档通常称之为模式文档(约束文档))

<?xml version="1.0" encoding="UTF-8" ?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                      targetNamespace="http://www. itcast.cn"
                      elementFormDefault="qualified">
<xs:element name='书架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' >
                <xs:element name='书' >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='书名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售价' type='xs:string' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

book.xml(遵循这个文档书写的xml文件称之为实例文档)

<?xml version="1.0" encoding="UTF-8"?>

<itcast:书架 xmlns:itcast="http://www.itcast.cn"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://www.itcast.cn book.xsd">

    <itcast:书>
        <itcast:书名>JavaScript网页开发</itcast:书名>
        <itcast:作者>张孝祥</itcast:作者>
        <itcast:售价>28.00元</itcast:售价>
    </itcast:书>
</itcast:书架>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

1.对book.xsd的分析:

xmlns:xs=”http://www.w3.org/2001/XMLSchema”
表明此schema中使用的元素和数据类型来自于http://www.w3.org/2001/XMLSchema名称空间(namespace),xs是这个命名空间的别名targetNamespace=”http://www. itcast.cn
表明此schema定义的元素 (书架, 书, 书名, 作者, 售价)来自于http://www.w3schools.com名称空间
elementFormDefault=”qualified”
指定该schema文档中声明的根元素及其所有子元素都属于targetNamespace所指定的名称空间

2.对book.xml的分析

xmlns:itcast=”http://www.itcast.cn

表明itcast声明的标签来自http://www.itcast.cn命名空间

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

固定写法,用来对xml文件头部写法的规范

xsi:schemaLocation=”http://www.itcast.cn book.xsd”

表明http://www.itcast.cn命名映射到book.xsd文档(中间是空格)

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号