一个适合初学者的Schema小例子

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sun8112133/article/details/89173479

版权声明:本文为 小异常 原创文章,非商用自由转载-保持署名-注明出处,谢谢!
本文网址:https://blog.csdn.net/sun8112133/article/details/89173479








Schema:它其实就是一个XML,使用 XMl的语法规则,XML的解析器解析起来比较方便,其目的是为了替代DTD。但是Schema约束文本内容比 DTD的内容还要多。所以目前也没有真正意义上的替代DTD。扩展名为.xsd



一、Schema小栗子

1、约束文档(.xsd)

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
    xmlns(xml namespace) : 名称空间 / 命名空间
    targetNamespace : 目标名称空间。下面定义的那些元素都与这个名称空间绑定上。
    elementFormDefault : 元素的格式化情况。
-->
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
		targetNamespace="http://www.example.org/teacher" 
		elementFormDefault="qualified">
	<element name="teachers">
		<complexType>
            <!-- 
                maxOccurs/minOccurs : 出现的最大或最小次数
                maxOccurs="unbounded" : 无限大
            -->
			<sequence maxOccurs="unbounded" >
				<!-- 这是一个复杂元素 -->
				<element name="teacher">
					<!-- 这是用于声明这个teacher元素是复杂元素 -->
                    <complexType>
                        <!-- 按顺序排序 -->
                        <sequence>
                            <!-- 以下两个是简单元素 -->
                            <element name="name" type="string"></element>
                            <element name="age" type="int"></element>
                        </sequence>
                    </complexType>
				</element>
			</sequence>
		</complexType>
	</element>
</schema>

2、实例文档(.xml)

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
	xmlns:xsi : 这里必须是这样的写法,也就是这个值已经固定了。
	xmlns : 这里是名称空间,也固定了,写的是schema里面的顶部目标名称空间
	xsi:schemaLocation : 有两段:前一段是名称空间,也是目标空间的值,后面是约束文档的路径。
-->
<teachers
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aa="http://www.example.org/teacher"
	xmlns:bb="http://www.example.org/teacher"
	xsi:schemaLocation="http://www.example.org/teacher teacher.xsd"
>
    <teacher>
        <aa:name>张三</aa:name>
        <age>19</age>
    </teacher>
</teachers>


二、名称空间的作用

一个XML如果想指定它的约束规则,假设使用的是DTD,那么这个XML只能指定一个DTD,不能指定多个DTD。但是如果一个XML的约束是定义在Schema里面,并且是多个Schema,那么是可以的。(简单的说:一个XML可以引用多个Schema约束,但是只能引用一个DTD约束。

名称空间的作用就是在 写元素的时候,可以指定该元素使用的是哪一套约束规则。默认情况下,如果只有一套规则,那么都可以这么写:

<name>张三</name>

<aa:name></aa:name>
<bb:name></bb:name>



猜你喜欢

转载自blog.csdn.net/sun8112133/article/details/89173479