XML学习之Xml Schema:六、复杂类型--模型组

        模型组元素

        如果一个元素的内容是纯元素内容(该元素的内容只包含子元素,没有字符数据),可以使用模型组来构建纯元素的内容。模型组元素有3种,分别是:sequence、choice、all。

        sequence:表示序列,sequence组中的所有子元素要按照指定的顺序出现。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="employee" type="empType"/>
	<xs:complexType name="empType">
		<xs:complexContent>
			<xs:restriction base="xs:anyType">
				<xs:sequence>
					<xs:element name="name" type="xs:string"/>
					<xs:element name="age" type="xs:integer"/>
				</xs:sequence>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
</xs:schema>

        XML Schema规定,如果一个具有复杂内容的复杂类型定义是anyType类型限制派生(<xs:restriction base="xs:anyType">),那么可以省略xs:complexContent和xs:restriction元素,而直接在xs:complexType元素下使用模型组。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="employee" type="empType"/>
	<xs:complexType name="empType">
		<xs:sequence>
			<xs:element name="name" type="xs:string"/>
			<xs:element name="age" type="xs:integer"/>
		</xs:sequence>
	</xs:complexType>
</xs:schema>


choice:表示选择,从所有子元素中选择任意一个,且只能使用一个。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="employee">
		<xs:complexType>
			<xs:choice>
				<xs:element name="telephone">
					<xs:simpleType>
						<xs:restriction base="xs:token">
							<xs:pattern value="\d{3,4}-\d{7,8}"/>
						</xs:restriction>
					</xs:simpleType>
				</xs:element>
				<xs:element name="mobile">
					<xs:simpleType>
						<xs:restriction base="xs:token">
							<xs:pattern value="\d{11}"/>
						</xs:restriction>
					</xs:simpleType>
				</xs:element>
			</xs:choice>
		</xs:complexType>
	</xs:element>
</xs:schema>

ALL:表示任意次序,all组中的所有子元素可以以任意顺序出现,但只能出现一次(即minOccurs和maxOccurs都只能为1)。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="employee" type="empType"/>
	<xs:complexType name="empType">
		<xs:all>
			<xs:element name="number" type="xs:integer"/>
			<xs:element name="name" type="xs:string"/>
		</xs:all>
	</xs:complexType>
</xs:schema>


       指示符

       可以使用指示符来控制元素出现的次数,指示符是minOccurs和maxOccurs,这两个属性可以在模型组元素(xs:sequence、xs:choice、xs:all)或者xs:element上使用。minOccurs属性指定元素出现的最小次数,maxOccurs属性指定元素出现的最大次数,这两个属性的默认值都是1。unbounded表示不限次数。全局声明的元素不能包含minOccurs和maxOccurs属性。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="employee" type="empType"/>
	<xs:complexType name="empType">
		<xs:all>
			<xs:element name="number" type="xs:integer" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="name" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
		</xs:all>
	</xs:complexType>
</xs:schema>

        元素的默认值和固定值

        元素的默认值使用xs:element的default属性来定义。模式处理器在处理元素的默认值和属性的默认值时有些不同,当属性不出现时默认的属性被应用,当元素内容为空时默认的属性被应用。如果元素没有出现,则模式处理器根本不为该元素应用默认值。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="document">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="title" minOccurs="1" maxOccurs="1"/>
				<xs:element name="format" default="PDF"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

        元素的混合内容

        如果一个元素既包含子元素,又包含字符数据,那么元素的内容为混合内容。要定义具有混合内容的元素,可以是使用mixed属性。设置mixed=true,表示可以是混合内容(如果内容不是混合内容,也是可以的)。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="document">
		<xs:complexType mixed="true">
			<xs:sequence>
				<xs:element name="title" type="xs:string"/>
				<xs:element name="format" type="xs:string"/>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>
<?xml version="1.0" encoding="UTF-8"?>
<document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xs5.xml">
	title:<title>C#</title>
	<format>PDF</format>
</document>

        元素组

       把常用的元素放到一个组里,可以便于维护。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
	<xs:element name="company" type="companyType"/>
	<xs:complexType name="companyType">
		<xs:sequence>
			<xs:element name="employee" type="empType" maxOccurs="unbounded"/>
			<xs:element name="manager" type="empType" minOccurs="1" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="empType">
		<xs:sequence>
			<xs:group ref="empGroup"/>
		</xs:sequence>
	</xs:complexType>
	<xs:group name="empGroup">
		<xs:sequence>
			<xs:element name="name" type="xs:string"/>
			<xs:element name="age" type="xs:integer"/>
		</xs:sequence>
	</xs:group>
</xs:schema>


 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值