命名空间和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属性