命名空间和XML Schema

命名空间和XML Schema

什么是命名空间

namespace

命名空间是一组保持唯一的名称。例如,可以将一个公司所有人的姓名视为一个命名空间。命名空间就是在逻辑上相关的任何一组名称,而且每个名称都必须唯一。

<?xml version="1.0" encoding="GB2312" standalone="yes"?>

<a:note xmlns:a="http://www.baidu.com">
<a:to>lvqi</a:to>
<a:from>pingdu</a:from>
<a:heading>reminder</a:heading>
<a:body> dont forget eat grass!</a:body>
</a:note>

//默认命名空间
<note xmlns="http://www.Google.com">
<to>lvqi</to>
<from>pingdu</from>
<heading>reminder</heading>
<body> dont forget eat grass!</body>
</note>

<!--
加前缀
在XML中使用命名空间,使用属性,xmlns的值为URL.
命名空间别名:使用":"
<a:note xmlns:a="http://www.baidu.com"></a:note>
默认命名空间,没有别名
-->

Schema

XML格式

Xml Schema

语法

DTD

<!ELEMENT MingCheng (#PCDATA)>

Schema

<element name="mingCheng" type="string" />

schema单独为一个文件 文件扩展名: .xsd(不能插入到XML文件中) 两个是独立的 不能内嵌

XML SCHEMA 文档结构:

<?xml version="1.0" ?>
<!-- 根元素-->
<schema xmlns:xs="http://www.w3c.org/2001/XMLSCHEMA" <!--schema中的命名空间--> targetNameSpace="http://www.cnblogs.com/tqdm" xml实例的命名空间
        xmlns="http://www.cnblogs.com/tqdm" 默认命名空间 没有别名
        elementFormDefault="qualified">
    <!--定义  xs xmlschema-->
    
</schema>

targetNameSpace="http://www.cnblogs.com/tqdm" xml实例的命名空间
        xmlns="http://www.cnblogs.com/tqdm" 默认命名空间 没有别名
这两条要自己更改

元素:

定义简易元素:只有文本,没有属性

<xs:element name="元素名称" type="基本类型"></xs:element>
<xs:element name="mingZi" type="datatype"/>
datatype:     xs:string
			xs:integer
			xs:date
			xs:tip
			xs:boolean
			xs:decimal
<xs:element name="note" type="xs:string"/>
<note>abssss</note>
错误:<note><a></a></note>
<xs:element name="datetime" type="xs:date"/>
<datetime>2021/3/2</datetime>

默认值 default

<xs:element name="" type="datatype" default="dd"></xs:element>

属性:attribute

<xs:attribute name="属性名称" type="datatype"></xs:attribute>

<xs:element name="note" type="xs:string">
<xs:attribute name="属性名称" type="datatype"/>
</xs:element>

属性的默认值和固定值 default

<xs:attribute name="属性名称" type="datatype" default="data"/>   默认

<xs:attribute name="属性名称" type="datatype" fixed="data"/>    固定

<xs:attribute name="属性名称" type="datatype" use="requried"/>  必须

对数据的限定:

范围:

<xs:element name="age">
	<xs:simpleType>
    	<xs:restriction base="xs:integer">
        	<xs:minInclusive value="0"/>(xs:限定类型 value:" 限定类型的取值")
            <xs:maxInclusive value="150"/>
        </xs:restriction>
    </xs:simpleType> 
</xs:element>


	<xs:simpleType name="mytype">
    	<xs:restriction base="xs:integer">
        	<xs:minInclusive value="0"/>(xs:限定类型 value:" 限定类型的取值")
            <xs:maxInclusive value="150"/>
        </xs:restriction>
    </xs:simpleType> 

<xs:element name="age" type="mytype"></xs:element>

数值限定:枚举(之一) enumeration

	<xs:simpleType name="mytype">
    	<xs:restriction base="xs:string">
        	<xs:enumeration value="a1"/>
            <xs:enumeration value="a2"/>(有几个重复几次)
        </xs:restriction>
    </xs:simpleType> 

数值限定:一系列值 (模式匹配) pattern

	<xs:simpleType name="mytype">
    	<xs:restriction base="xs:string">
        	<xs:pattern value="匹配的模式(字符串)"></xs:pattern>
        </xs:restriction>
    </xs:simpleType> 
        
        匹配的模式(字符串):
        1.范围[a-z][A-Z0]:[a-z][a-z][a-z](3个小写字母组成的字符串)
        [a-zA-Z](可小写,也可大写)
        2.[xyz]:之一:x|y|z
        3.[0-9]:数值  手机号"1[35789][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]"
        4.重复:()*  :0-n次
        5.()+:  1-n
        6."|" 之一
        7.重复的次数指定:(内容){次数}: (abv){10}

空白字符:writeSpace

	<xs:simpleType name="mytype">
    	<xs:restriction base="xs:string">
        	<xs:writeSpace value="preserve"> (保留)
            </xs:writeSpace>
        </xs:restriction>
    </xs:simpleType> 
         replace:  移除 (空格、回车、换行、Tab)
		preserve:保留
		collapse: 替换,连续多个空格替换成一个

长度限定:length

	<xs:simpleType name="mytype">
    	<xs:restriction base="xs:string">
        	<xs:length value="8"></xs:length>
            <xs:maxLength value="10"></xs:maxLength>
            <xs:minLength value="0"></xs:minLength>
        </xs:restriction>
    </xs:simpleType> 
         length:指定长度
		Minlength:最小长度
		Maxlength:最大长度

复合元素 ( 混合、复杂 complex)

类型:

1.空元素(没有数据,有属性)

<product pid="1001"/>
Schema:
<xs:element name="product">
	<xs:complexType>
		<xs:attribute name="pid">
        	<xs:simpleType base="string">
            	<xs:length value="4"/>
            </xs:simpleType>
        </xs:attribute>
</xs:complexType>
</xs:element>

<xs:element name="product"/>
	<xs:complexType>
		<xs:attribute name="pid" type="xs:string">
        </xs:attribute>
</xs:complexType>

或
<xs:complexType name="myType">
		<xs:attribute name="pid" type="xs:string">
        </xs:attribute>
</xs:complexType>

2.仅含子元素 sequence

xml

<person>
	<pname>zhangsan</pname>
    <age></age>
</person>

schema

<xs:element name="person">
<xs:complexType>
    	<xs:sequence>
    		子元素<xs:element name="pname" type="xs:string"/>
            <xs:element name="age" type="xs:integer"/>
    </xs:sequence>
    </xs:complexType>
</xs:element>

3.仅包含文本(有属性)

xml

<food type="abc" >ice cream</food>

schema

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

4.含文本 和 子元素

xml

<letter>
	Hello
    <pname>zhaogan</pname>
</letter>

Schema

<xs:element name="letter">
	<xs:complexType mixed="true">
		<xs:sequence>
        	<xs:element name="pname" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

DTD:标记

"*" "+" "?"

Schema:标记 指示器(7 中)

Order: all, choice, sequence 定义元素顺心

ALL:

<element name="person">
<xs:complexType>
            <xs:all>    任意顺序  不需再pname在前
    		子元素<xs:element name="pname" type="xs:string"/>
            <xs:element name="age" type="xs:integer"/>
                </xs:all>
    </xs:complexType>
</element>

Choice

 <xs:choice>    二选一
    		<xs:element name="pname" type="xs:string"/>
            <xs:element name="age" type="xs:integer"/>
                </xs:choice>

Sequence

 <xs:sequence>    按照指定的顺序排列(pname元素在前 age元素在后)
    		<xs:element name="pname" type="xs:string"/>
            <xs:element name="age" type="xs:integer"/>
                </xs:sequence>

Occurrence(频次): maxOccus, minOccus 指定元素重复出现的次数(默认1)

 <xs:maxOccus>
    		<xs:element name="pname" type="xs:string" maxOccus="10"/>
            <xs:element name="age" type="xs:integer"/>
                </xs:maxOccus>

Group: Group name, attributeGroup name

ref

<xs:group name="组名"></xs:group>

<xs:element name="letter">
	<xs:complexType mixed="true">
		<xs:sequence>
        	<xs:element name="pname" type="xs:string"/>
            <xs:element name="age" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
</xs:element>

定义组:complex组里的内容
<xs:group name="myGroup">
		<xs:sequence>
        	<xs:element name="pname" type="xs:string"/>
            <xs:element name="age" type="xs:string"/>
        </xs:sequence>
</xs:group>

<xs:element name="newPerson">
	<xs:complexType>
        
        <xs:sequence>
    	<xs:element name="pid" type="xs:string"/>  扩充
        <xs:gruop ref="myGruop"/>
        <xs:element name="birthday" type="xs:date"/>
        </xs:sequence>
            
    </xs:complexType>
</xs:element>

属性组

<xs:attributeGroup name="myAttributeGroup">
   	<xs:sequence>
       	<xs:element name="pname" type="xs:string"/>
           <xs:element name="age" type="xs:string"/>
       </xs:sequence>
</xs:attributeGroup>

引用也是使用ref属性

posted @ 2021-03-03 14:51  弹琴的猫  阅读(62)  评论(0)    收藏  举报