zoukankan      html  css  js  c++  java
  • 3.【xml schema】复杂元素

    4.复合元素

    xml 包含下面几种类型的复合元素【复合元素指包含其他元素及/或属性的 XML 元素。】
    • 空元素
    • 包含其他元素的元素
    • 仅包含文本的元素
    • 包含元素和文本的元素

    上面几种都可以包含属性

    <product pid="1234"/> 是一个空元素

    <employ>
        <firstname>John</firstname>
        <lastname>Smith</lastname>
    </employ>

    这个是一个复合元素 包含其他的元素 下面是一个只包含文本的复合元素

    <food type="dessert">Ice Cream</food> 也可包含文本和元素

    <description>
        I have a book on <date lang="norwegian">01.01.99</date> ....
    </description>

    上面的这个就和原生的xml 不一样了

    xsd 定义复合元素

    方式1

    <employee>
        <firstname>John</firstname>
        <lastname>Smith</lastname>
    </employee>

    可以直接对 employee 进行定义

    <xs:element name="employment">
      <xs:complexType>
          <xs:sequence>
            <xs:element name="firstname" type="xs:string">
            <xs:element name="lastname" type="xs:string">
          </xs:sequence>
      </xs:complexType>
    </xs:element>

    被包围在指示器 <sequence>中。这意味着子元素必须以它们被声明的次序出现 具体查询 连接

    一样的可以使用type属性 可以多个element 使用同一个 type

    <xs:element name="employment" type="employmentType"/>
    <xs:element name="another_employment" type="employmentType"/>
    <xs:complexType name="employmentType">
      <xs:sequence>
        <xs:element name="firstname" type="xs:string">
        <xs:element name="lastname" type="xs:string">
      </xs:sequence>
    </xs:complexType>

    在某个的基础上

    <xs:complexType name="employmentType">
      <xs:sequence>
        <xs:element name="firstname" type="xs:string">
        <xs:element name="lastname" type="xs:string">
      </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="fullinfo">
        <xs:extension base="employmentType">
            <xs:sequence>
                <xs:element name="address" type="xs:string"/>
                <xs:element name="city" type="xs:string"/>
                <xs:element name="country" type="xs:string"/>
            </xs:sequence>
        </xs:extension>
    </xs:complexType>

    上面 代码有错误 

    正确要加一个xs:complexContent 应该是下面的代码:

    <xs:complexType name="employmentType">
        <xs:sequence>
    	<xs:element name="firstname" type="xs:string"/>
    	<xs:element name="lastname" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    
    <xs:complexType name="fullinfo">
        <xs:complexContent>
    	<xs:extension base="employmentType">
    	  <xs:sequence>
    		<xs:element name="address" type="xs:string"/>
    		<xs:element name="city" type="xs:string"/>
    		<xs:element name="country" type="xs:string"/>
    	  </xs:sequence>
    	</xs:extension>
        </xs:complexContent>
    </xs:complexType>    
    

      

    1 详解【空的复合元素】

    不能包含内容,只能含有属性。
    <product prodid="1345" />

    <xs:element name="product">
        <xs:complexType>
            <xs:complexContext>
                <xs:restriction base="xs:integer">
                    <xs:attribute name="prodid" type="xs:positiveInteger"/>
                </xs:restriction>
            </xs:complexContext>
        </xs:complexType>
    </xs:element>

    和之前不一样的是 多了一个 xs:complexContext
    xs:attribute 类型 没有element restriction

    complexContent 元素给出的信号是,我们打算限定或者拓展某个复合类型的内容模型,而 integer 限定则声明了一个属性但不会引入任何的元素内容 integer 虽然声明了 但是没有一个element

    <xs:element name="product">
      <xs:complexType>
        <xs:attribute name="prodid" type="xs:positiveInteger"/>
      </xs:complexType>
    </xs:element>

    xs:positiveInteger 正整数 这个是一个紧凑的写法是和上面 xs:complexContent>xs:restriction 的一样

    或者您可以为一个 complexType 元素起一个名字,然后为 "product" 元素设置一个 type 属性并引用这个 complexType 名称(通过使用此方法,若干个元素均可引用相同的复合类型

    不使用type的时候 将会使用 element 包住 complexType

    <xs:element name="product" type="prodtype"/>
    //注意这边只是一个 闭合标签
    
    <xs:complexType name="prodtype">
      <xs:attribute name="prodid" type="xs:positiveInteger"/>
    </xs:complexType>

    2.仅含文本的复合元素

    内容添加 simpleContent 元素

    <xs:element name="product">
      <xs:complexType>
          <xs:sequence>
              <xs:element name="firstname" type="xs:positiveInteger">
              <xs:element name="lastname" type="xs:positiveInteger">
          </xs:sequence>
      </xs:complexType>
    </xs:element>

    3.仅含文本复合元素

    <label>content</label> 此类型仅包含简易的内容(文本和属性)所有使用 simpleContent元素

    <xs:element name="simplename">
        <xs:complexType>
            <simpleContent>
                <xs:extension base="basetype">
                    ....
                </xs:extension>
            </simpleContent>
        </xs:complexType>
    </xs:element>

    或者

    <xs:element name="simplename">
        <xs:complexType>
            <simpleContent>
                <xs:restriction base="basetype">
                    ....
                </xs:restriction>
            </simpleContent>
        </xs:complexType>
    </xs:element>

    使用xs:extension 或者 xs:restriction 元素扩展或限制元素的基本简易类型

    <shoesize country="france">35</shoesize>

    <xs:element name="shoesize">
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base="xs:integer">
                    <xs:attribute name="country" type="xs:string">
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>

    或者

    <xs:element name="shoesize">
        <xs:complexType>
            <xs:simpleContent>
                <xs:restriction base="xs:integer">
                    <xs:attribute name="country" type="xs:string">
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>

    xml 如下
    <?xml version="1.0" encoding="UTF-8"?>
    
    <shoesize xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:noNamespaceSchemaLocation="test1.xsd" country="ste">
    1233 </shoesize>

    上面的xml 可以通过验证

    4.带有混合内容的复合类型

    包含属性,元素 和文本

    DEMO

    <letter>
    Dear Mr.<name>John Smith</name>.
    Your order <orderid>1032</orderid>
    will be shipped on <shipdate>2001-07-13</shipdate>.
    </letter>

    下面是xsd

    <xs:element name="letter">
       <xs:complexType mixed="true">
           <xs:sequence>
               <xs:element name="name" type="xs:string">
               <xs:element name="orderid" type="xs:positiveInteger">
               <xs:element name="shipdate" type="xs:date">
           </xs:sequence>
       </xs:complexType>
    </xs:element>
    慢慢沉淀自己
  • 相关阅读:
    彻底解决IE6下Asp.net Ajax客户端框架未能加载
    mootools【二】 Array篇
    SQL Server存储过程编写和优化措施
    Calendar ——漂亮的MooTools 日历插件
    免费使用和 Ajax & Javascript 操纵和显示图片的代码
    26步获得网站流量
    SEO中的十个“没必要”
    如何选择关键字
    建设一个成功的网站
    jQuery 编辑器(转载)
  • 原文地址:https://www.cnblogs.com/martinding/p/7478944.html
Copyright © 2011-2022 走看看