美文网首页
03-基于Schema的XML

03-基于Schema的XML

作者: XAbo | 来源:发表于2020-11-22 17:02 被阅读0次

    示例1:
    student.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!-- 
        1.填写xml文档的根元素
        2.引入xsi前缀.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        3.引入xsd文件命名空间.  xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
        4.为每一个xsd约束声明一个前缀,作为标识  xmlns="http://www.itcast.cn/xml" 
     -->
     <students   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://www.itcast.cn/xml  student.xsd"
                 xmlns="http://www.itcast.cn/xml" >
    
        <student number="heima_0001">
            <name>tom</name>
            <age>18</age>
            <sex>male</sex>
        </student>
     </students>
    

    student.xsd

    <?xml version="1.0"?>
    <xsd:schema xmlns="http://www.itcast.cn/xml"
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://www.itcast.cn/xml" elementFormDefault="qualified">
        <xsd:element name="students" type="studentsType"/>
        <xsd:complexType name="studentsType">
            <xsd:sequence>
                <xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
        <xsd:complexType name="studentType">
            <xsd:sequence>
                <xsd:element name="name" type="xsd:string"/>
                <xsd:element name="age" type="ageType" />
                <xsd:element name="sex" type="sexType" />
            </xsd:sequence>
            <xsd:attribute name="number" type="numberType" use="required"/>
        </xsd:complexType>
        <xsd:simpleType name="sexType">
            <xsd:restriction base="xsd:string">
                <xsd:enumeration value="male"/>
                <xsd:enumeration value="female"/>
            </xsd:restriction>
        </xsd:simpleType>
        <xsd:simpleType name="ageType">
            <xsd:restriction base="xsd:integer">
                <xsd:minInclusive value="0"/>
                <xsd:maxInclusive value="256"/>
            </xsd:restriction>
        </xsd:simpleType>
        <xsd:simpleType name="numberType">
            <xsd:restriction base="xsd:string">
                <xsd:pattern value="heima_\d{4}"/>
            </xsd:restriction>
        </xsd:simpleType>
    </xsd:schema> 
    

    实例2:

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:mvc="http://www.springframework.org/schema/mvc"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/mvc
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
      
        <context:annotation-config />
       <context:component-scan base-package="cn.cisol.mvcdemo">
            <context:include-filter type="annotation"
                expression="org.springframework.stereotype.Controller" />
        </context:component-scan>
        <mvc:annotation-driven />
        <mvc:resources mapping="/resources/**" location="/resources/" />
    
        <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
            <property name="order" value="1" />
            <property name="mediaTypes">
                <map>
                    <entry key="json" value="application/json" />
                    <entry key="xml" value="application/xml" />
                    <entry key="htm" value="text/html" />
                </map>
            </property>
            <property name="defaultViews">
                <list>
                    <bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
                    </bean>
                </list>
            </property>
            <property name="ignoreAcceptHeader" value="true" />
        </bean>
        <bean  class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
            <property name="prefix" value="/WEB-INF/jsps/" />
            <property name="suffix" value=".jsp" />
        </bean>
        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize" value="209715200" />
            <property name="defaultEncoding" value="UTF-8" />
            <property name="resolveLazily" value="true" />
        </bean>
    </beans>
    

    Schema约束文档的定义

    XSD文档至少要包含:schema根元素和XML模式命名空间的定义、元素定义。需要注意的是XSD中必须定义一个且只能定义一个schema根元素,根元素中包括模式的约束,XML模式命名空间的定义,其他命名空间的定义、版本信息、语言信息和其他一些信息。

    1、schema根元素定义:

    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      ...
    </xsd:schema>
    

    2、普通元素定义:

    <xsd:element name="user" type="xsd:string" />
    

    XSD中元素是利用element标识符来声明,在上面的示例中name属性是元素的名字,type属性是元素值的类型,可以使XML Schema中内置的数据类型或其他类型。


    2.1元素引用

    避免在文档中多次定义同一个元素,可以使用元素的引用。

    <xsd:element name="user" type="xsd:string" />
    <xsd:sequence>
        <xsd:element ref="user" />  <!--当前元素就是user元素-->
    </xsd:sequence>
    

    2.2 元素别名

    <!--定义-->
    <xsd:element name="user" type="xsd:string" substitutionGroup="yonghu" />
    <!--使用-->
    <yonghu>admin</yonghu>
    <user>admin</user>
    

    2.3 默认值与固定值

    通过default属性的设置,可以在XML文档中没有对city定义时赋予默认值,而是用fixed属性,可以给元素country设定一个固定的值china,并且不允许改变。

    <xsd:element name="city" type="xsd:string" default="xian" />
    <xsd:element name="country" type="xsd:string" fixed="china" />
    

    2.4 组合器

    sequence组合器,定义了一列元素必须按照模式中指定的顺序显示(如果是可选的,也可以不显示)。

    <xsd:sequence>
      <xsd:element name="first" type="xsd:string" />
      <xsd:element name="middle" type="xsd:string" />
      <xsd:element name="last" type="xsd:string" />        
    </xsd:sequence>
    

    all组合器,允许所定义的元素可以按照任意顺序显示,all元素的子元素在默认情况下是必须的,而且每次最多显示一次。

    <xsd:all minOccurs="0">
      <xsd:element name="first" type="xsd:string" />
      <xsd:element name="middle" type="xsd:string" />
      <xsd:element name="last" type="xsd:string" />        
    </xsd:all>
    

    choice组合器,允许指定多组声明中的一个,用于互斥情况。

    <xsd:choice>
      <xsd:element name="first" type="xsd:string" />
      <xsd:element name="middle" type="xsd:string" />
      <xsd:element name="last" type="xsd:string" />        
    </xsd:choice>
    

    3、定义属性

    在XML Schema文档中可以按照定义元素的方法定义属性,但受限制程度较高。可以应用在attribute元素定义中的属性如下表所示。



    创建属性

    <xsd:attribute name="age" type="xsd:integer" />
    

    该语句定义了一个名为age的属性,它的值必须为整数。把它添加到模式中时,它必须是schema元素,complexType元素或者attributeGroup元素的子元素。

    <xsd:element name="name">
      <xsd:complexType>
        <xsd:sequence>
          <xsd:element name="first" type="xsd:string" />
        </xsd:sequence>
         <!--将属性添加到元素name属性中-->  
        <xsd:attribute name="age" type="xsd:integer" use="optional"/>   
      </xsd:complexType>
    </xsd:element>
    

    以上文档对应有效的XML文档如下:

    <?xml version="1.0"?>
    <name age="27">
      <first>string</first>
    </name>
    

    引用:XML Schema <第三篇> - 逆心 - 博客园 (cnblogs.com)

    相关文章

      网友评论

          本文标题:03-基于Schema的XML

          本文链接:https://www.haomeiwen.com/subject/auiuiktx.html