XML文件定义(DTD/schema)

一、XML文件的定义结构,任何一个文件的定义都是要遵循一个规范和约束的

XML的约束模式有两种:DTD/Schema

DTD存在一些缺陷(Document Type Definition,文档类型定义而XML Schema是按标准XML规则编写的,更容易掌握):

1.它用不同于XML的语言编写,需要不同的分析器技术。这增加了工具开发商的负担,降低了软件瘦身的可能性,此外开发人员需要多学一门语言及其语法。
2.DTD不支持名称空间。随着大部分的数据处理日益以XML为中心,信息的相互联系变得日益普及与深入,名称空间作用也将凸现。
4.DTD在支持继承和子类方面的局限性。由于面向对象技术的出现,对继承和子类的支持已成为软件技术领域的主流概念。
5.DTD没有数据类型的概念,无法对特定元素施加数据类型,对强制性结构化无计可施,例如,如何规定名为Date的数据必须包含有效值。

二、XML特点

XML 标签对大小写敏感
XML 元素都须有关闭标签
XML 必须正确地嵌套
XML 文档必须有根元素(必须有一个元素是所有其他元素的父元素)
XML 的属性值须加引号

实体引用

在 XML 中,一些字符拥有特殊的意义。比如: "<" 解析器会把它当作新元素的开始。用实体引用来代替 "<" 字符:

在 XML 中,有 5 个预定义的实体引用:
在这里插入图片描述

XML 中的注释
在 XML 中编写注释的语法与 HTML 的语法很相似:

<!-- This is a comment --> 

在 XML 中,空格会被保留

HTML 会把多个连续的空格字符裁减(合并)为一个

XML 以 LF 存储换行

在 Windows 应用程序中,换行通常以一对字符来存储:回车符 (CR) 和换行符 (LF)。
在 Unix 应用程序中,新行以 LF 字符存储。
而 Macintosh 应用程序使用 CR 来存储新行。

XML 命名规则

名称可以含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字符 “xml”(或者 XML、Xml)开始
名称不能包含空格
可使用任何名称,没有保留的字词。

XML文档需要遵守前面的基本 XML 语法规则还可以用DTD严格的定义。

XML 文档必须有根元素
XML 文档必须有关闭标签
XML 标签对大小写敏感
XML 元素必须被正确的嵌套
XML 属性必须加引号

三、使用DTD定义xml(通过 DTD 验证的 XML 是“合法”的 XML)

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>  

在上例中,DOCTYPE 声明是对外部 DTD 文件的引用。

3.1、DTD 的作用是定义 XML 文档的结构

<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]> 

3.2、内部的 DOCTYPE 声明

假如 DTD 被包含XML 中,应当包装在一个 DOCTYPE 声明中:

<!DOCTYPE 根元素 [元素声明]>

带有 DTD 的 XML 文档实例:

<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT note (to,from,heading,body)>
  <!ELEMENT to      (#PCDATA)>
  <!ELEMENT from    (#PCDATA)>
  <!ELEMENT heading (#PCDATA)>
  <!ELEMENT body    (#PCDATA)>
]>
<note>
  <to>George</to>
  <from>John</from>
  <heading>Reminder</heading>
  <body>Don't forget the meeting!</body>
</note>

DTD 解释如下:

!DOCTYPE note (第二行)定义此文档是 note 类型的文档。
!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"
!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型
!ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型
!ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型
!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型

3.3、外部文档声明

假如 DTD 位于 XML 源文件的外部,那么它应通过下面的语法被封装在一个 DOCTYPE 定义中:

<!DOCTYPE 根元素 SYSTEM "文件名">

XML拥有一个外部的 DTD:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note> 

DTD 的 “note.dtd” 文件:

<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

** DTD作用:**

1.通过 DTD,每一个 XML 文件均可携带一个有关其自身格式的描述。
2.可一致地使用某个标准的 DTD 来交换数据。
3.应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。
4.使用 DTD 来验证您自身的数据。

四、XML 文档(以及 HTML 文档)均由以下构建模块构成

  • 元素
  • 属性
  • 实体
  • PCDATA
  • CDATA

4.1、元素*

HTML 元素的例子是 "body" 和 "table"。
XML 元素的例子是 "note" 和 "message" 。
元素可包含文本、其他元素或者是空的。
空的 HTML 元素的例子是 "hr"、"br" 以及 "img"。

实例:

<body>body text in between</body>
<message>some message in between</message>

4.2、属性

属性可提供有关元素的额外信息。

<img src="computer.gif" />

元素的名称是 “img”。属性的名称是 “src”。属性的值是 “computer.gif”。由于元素本身为空,它被一个 " /" 关闭。

4.3、实体

实体引用是对实体的引用。(用一些特殊字符串来代替一些符号)
在这里插入图片描述

4.4、PCDATA

PCDATA 的意思是被解析的字符数据(parsed character data)。

可把字符数据想象为 XML 元素的开始标签与结束标签之间的文本。
PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。
文本中的标签会被当作标记来处理,而实体会被展开。不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;、&lt; 以及 &gt; 实体来分别替换它们。
XML 解析器通常会解析 XML 文档中所有的文本。
当某个 XML 元素被解析时,其标签之间的文本也会被解析:

<message>此文本也会被解析</message>

解析器之所以这么做是因为 XML 元素可包含其他元素,就像这个例子中,其中的 <name> 元素包含着另外的两个元素(first 和 last)<name>first>Bill</first>last>Gates</last></name>


而解析器会把它分解为像这样的子元素:
<name>
   <first>Bill</first>
   <last>Gates</last>
</name>

4.5、CDATA

CDATA 的意思是字符数据(character data)。意味着当作字符串处理。
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。
某些文本,比如 JavaScript 代码,包含大量 "<""&" 字符。为了避免错误,可以将脚本代码定义为 CDATA。
CDATA 部分中的所有内容都会被解析器忽略。
CDATA 部分由 "<![CDATA[" 开始,由 "]]>" 结束:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
  {
  return 1;
  }
else
  {
  return 0;
  }
}
]]>
</script>
在上面的例子中,解析器会忽略 CDATA 部分中的所有内容。

PCDATA和CDATA的区别是:前者可能需要解析里面标签,后者不解析直接当作字符文本了。

五、Schema (概要/结构/模式/架构)

基于 XML 的 DTD 替代者。
描述 XML 文档的结构。

XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)

定义可出现在文档中的元素
定义可出现在文档中的属性
定义哪个元素是子元素
定义子元素的次序
定义子元素的数目
定义元素是否为空,或者是否可包含文本
定义元素和属性的数据类型
定义元素和属性的默认值以及固定值

5.1、Schema 相比 DTD 的优势

XML Schema 可针对未来的需求进行扩展
XML Schema 更完善,功能更强大
XML Schema 基于 XML 编写
XML Schema 支持数据类型
XML Schema 支持命名空间

一个简单的 XML 文档:

<?xml version="1.0"?>
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

用DTD 文件定义xml:

<!ELEMENT note (to, from, heading, body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>

第 1 行定义 note 元素有四个子元素:“to, from, heading, body”。

第 2-5 行定义了 to, from, heading, body 元素的类型是 “#PCDATA”。
用XML Schema定义xml:

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">

<xs:element name="note">
    <xs:complexType>
      <xs:sequence>
    <xs:element name="to" type="xs:string"/>
    <xs:element name="from" type="xs:string"/>
    <xs:element name="heading" type="xs:string"/>
    <xs:element name="body" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
</xs:element>
</xs:schema>

xml对 DTD 的引用:

<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "http://www.w3school.com.cn/dtd/note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

xml对 XML Schema 的引用:

<?xml version="1.0"?>
<note
xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

补充:命名空间:
1.xml命名空间的定义:

<d:student xmlns:d=”http://www.develop.com/student;

其中student 是命名空间的标签。http://www.develop.com是命名空间的标识。d是命名空间的前缀。

命名空间标签:

由于命名空间采取元素/属性的定义方式,所以需要一个标签。

命名空间标识:

实际当输出一个命名空间时就直接转换为这个标识。标识规范的称呼:URI(统一资源定位符)。
URI的最大特点是唯一性。如果不唯一就失去了辨识的意义。
实际上相同URI不同的命名空间名称(即前缀)被看成同一个命名空间。

命名空间的地址不会被解析器用于查找信息。作用是赋予命名空间一个惟一的名称。
不过,常常会使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。

URI分为两种类型:

URL(统一资源定位器):
通俗的说URL就是网页地址。因为每个网页在internat上都是唯一的。

URN(统一资源名称):
可以不使用网页地址而使用唯一名称来定义。如:
urn:2007-12-9/workgrop/xin/projiectname
urn:E7f73B13-05FE-44ec-81CE-F898C4A6CDB4
这个编号是在系统中注册的控件编号,因此是唯一的。

前缀(其实就是命名空间的简称):

前缀用于在XML中作为URI的简化引用。因为URI太长了。
<d:student xmlns:d="http://www.develop.com/student">
<d:id>3235329</d:id>
<d:name>Jeff Smith</d:name>
</d:student>

前缀的定义固定格式是:xmlns:开头。(个人觉得xmlns也可以看成是xml固有的一种空间前缀,命名空间具有继承能力)

命名空间其他一些特定:

1.命名空间不一定要定义在根节点
2.命名空间还可以嵌套或者被重定义。
3.一个xml文件中可以拥有多个命名空间。

默认命名空间(即没有前缀):xmlns=namespace
2.schemal命名空间:

个人理解:
schemal中的命名空间意义:
xmlns:xsd:数据类型
xmlns:xsi:元素名称
上面两个是schemal的基本规则
目标命名空间:表示这个schemal个人所定义的规则(主要是一些为限定xml新元素/属性)是在这个命名空间中。(或者说这个schemal定义的规则就是这个命名空间,以用于引用)

初学schema—schema命名空间理解
2.1 常用命名空间
schema元素引用了三个最常使用的命名空间:

xmlns="http://www.w3c.org/2001/XMLSchema"(默认命名空间,元素没有前缀就是属于默认命名空间)
xmlns:xsd="http://www.w3c.org/2001/XMLSchema-datatypes"(xsd是XML Schema datatypes的意思)
xmlns:xsi="http://www.w3c.org/2001/XMLSchema-instances"(xsi是XML Schema Instances的意思)
第二和第三个属性用XML命名空间来标识W3C中的两个XML schema规范。
第二个xmlns属性定义了标准的XML schema属性类型例如string, float, integer等。
第三个 xmlns属性包含基本的XML schema元素,如element, attribute, complexType, group,simpleType等。

schemal最常用的应该还有一个”xmlns:xs=“命名空间。

2.2 默认命名空间(default namespaces)

每一个Schema可以有且只有一个默认命名空间如:

xmlns="http://www.w3.org/2001/XMLSchema"
或
xmlns=”http://www.w3school.com.cn”

如果文档中的元素没有前缀的,就是属于默认命名空间。但文档中还可以有其他命名空间的元素标签比如"xmlns:xs="

2.3 元素

是每一个XML Schema 的根元素。对于任何一个XML Schema定义文档(XSD)都有一个最顶层的schema 元素。

而且该schema (XSD)元素定义必须包含标准命名空间(<xs:schema xmlns:xs=“http://www.w3.org/2001/XMLSchema”)作为命名空间的标识符,可以不使用xsd或xsi。

<?xml version="1.0"?>
<xs:schemaxmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
...
</xs:schema>

2.4.elementFormDefault属性:

详解:1 ;2
1、在xml中,所有引用xsd的全局的元素都必须加上命名空间的前缀(例如<aa:根元素 xmlns:aa=http://www.example.org/classroom,全局元素都得加上aa)。
2、非全局的元素当设置为qualified时,必须添加命名空间的前缀。(子元素都要有命名空间的前缀)
3、非全局的元素当设置为unqualified时,不必也不能添加前缀。(子元素不能有前缀)

2.5.目标命名空间(target namespace)

即该schemal(xsd)的地址,xml引用该schemal需要该地址

每一个Schema有且只有一个目标命名空间。
Xml Schema定义文档中一系列元素名称,类型名称,属性名称和属性组名称等的有效作用范围都在这个目标名字空间(target namespace)
1.Xsd指定目标命名空间

Xsd文件node.xsd:
<xs:schema xmlns:xs=”http://www.w3.org/2001/XMLSchema”
targetNamespace=”http://www.w3school.com.cn”
xmlns=”http://www.w3school.com.cn” elementFormDefault="qualified">

xml引用
<note xmlns=”http://www.w3school.com.cn”  
xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” 
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

2.Xsd没指定目标命名空间

Xsd文件node.xsd:
< schema xmlns =”http://www.w3.org/2001/XMLSchema”
elementFormDefault="qualified">

xml引用
<note xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:noNamespaceSchemaLocation="note.xsd">
note.xsd与xml在同一目录或者相对路径目录。

Xml引用xsd实例:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"(定义一个Schema的实例命名空间,只有作了这个定义才能使用schemaLocation属性)
xsi:schemaLocation="http://www.w3schools.com note.xsd"
schemaLocation属性了有两个值:
第一个值是需要使用的命名空间。
第二个值是供命名空间使用的 XML schema 的位置。
schemaLocation属性由成对的值组成,可以有多对。(因为一个XML文档可以有多个命名空间,所以schemaLocation值可以有多对)

细说schema:
包括:定义元素(简单元素和符合元素),定义属性,自定义类型(可以使用正则对简单类型做限制);

<?xml version="1.0"?>
 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
...
...
</xs:schema>

元素是每一个 XML Schema 的根元素

元素可包含属性

xmlns:xs="http://www.w3.org/2001/XMLSchema"

schema 中用到的元素和数据类型来自命名空间 “http://www.w3.org/2001/XMLSchema”。同时它还规定了元素和数据类型应该使用前缀 xs:

targetNamespace="http://www.w3school.com.cn" 

schema 定义的元素 (note, to, from, heading, body) 来自命名空间: “http://www.w3school.com.cn”。

xmlns="http://www.w3school.com.cn" 

指出默认的命名空间是 “http://www.w3school.com.cn”。

elementFormDefault="qualified"

指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
xml

<?xml version="1.0"?>

<note xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">

<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>

xmlns=“http://www.w3school.com.cn
规定了默认命名空间的声明。使用的所有元素都被声明于 “http://www.w3school.com.cn” 这个命名空间。
(命名空间,类似包名,因为xml的标签可自定义,需要命名空间来区分)
xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance
拥有了可用的 XML Schema 实例命名空间:
(这个命名空间里面的元素或者属性就必须要以xsi:这种方式来写,比如schemaLocation就是他的一个属性,所以写成xsi:schemaLocation)
xsi:schemaLocation=“http://www.w3school.com.cn note.xsd”
可以使用 schemaLocation 属性了。此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置:
“shiporder.xsd” 的 schema 文件的文档清单:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:element name="shiporder">
 <xs:complexType>
  <xs:sequence>
   <xs:element name="orderperson" type="xs:string"/>
   <xs:element name="shipto">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="name" type="xs:string"/>
      <xs:element name="address" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
      <xs:element name="country" type="xs:string"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
   <xs:element name="item" maxOccurs="unbounded">
    <xs:complexType>
     <xs:sequence>
      <xs:element name="title" type="xs:string"/>
      <xs:element name="note" type="xs:string" minOccurs="0"/>
      <xs:element name="quantity" type="xs:positiveInteger"/>
      <xs:element name="price" type="xs:decimal"/>
     </xs:sequence>
    </xs:complexType>
   </xs:element>
  </xs:sequence>
  <xs:attribute name="orderid" type="xs:string" use="required"/>
 </xs:complexType>
</xs:element>

</xs:schema>

xs:complexType 可以包含其他的元素,认定为复合类型
xs:sequence 包含的元素是有序的
xs:string是命名空间的前缀规定的简易类型
maxOccurs 和 minOccurs 属性来定义某个元素可能出现的次数。
maxOccurs 定义某元素出现次数的最大值,而 minOccurs 则定义某元素出现次数的最小值。maxOccurs 和 minOccurs 的默认值都是 1!
“item” 元素的 maxOccurs 属性的值设定为 “unbounded” ,意思元素就可出现任意多次。
“note” 元素的 minOccurs 属性设定为 0 ,意思是可选元素

<xs:attribute name=“orderid” type=“xs:string” use=“required”/>

use="required"意思这是一个必选属性,此属性的声明必须被置于最后:
分割 Schema(分开定义可重复调用)
上面的文档很复杂时却难以阅读和维护。

新方法设计的 schema 文件:首先对所有元素和属性的定义,然后再使用 ref 属性来引用它们。

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<!-- 简易元素的定义 -->
<xs:element name="orderperson" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="address" type="xs:string"/>
<xs:element name="city" type="xs:string"/>
<xs:element name="country" type="xs:string"/>
<xs:element name="title" type="xs:string"/>
<xs:element name="note" type="xs:string"/>
<xs:element name="quantity" type="xs:positiveInteger"/>
<xs:element name="price" type="xs:decimal"/>

<!-- 属性的定义 -->
<xs:attribute name="orderid" type="xs:string"/>

<!-- 复合元素的定义 -->
<xs:element name="shipto">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="name"/>
   <xs:element ref="address"/>
   <xs:element ref="city"/>
   <xs:element ref="country"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>
<xs:element name="item">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="title"/>
   <xs:element ref="note" minOccurs="0"/>
   <xs:element ref="quantity"/>
   <xs:element ref="price"/>
  </xs:sequence>
 </xs:complexType>
</xs:element>

<xs:element name="shiporder">
 <xs:complexType>
  <xs:sequence>
   <xs:element ref="orderperson"/>
   <xs:element ref="shipto"/>
   <xs:element ref="item" maxOccurs="unbounded"/>
  </xs:sequence>
  <xs:attribute ref="orderid" use="required"/>
 </xs:complexType>
</xs:element>

</xs:schema>

自定义类型:使用指定的类型(Named Types)
首先对简易元素和复合元素进行命名,然后通过元素的 type 属性来指向它们。

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:simpleType name="stringtype">
 <xs:restriction base="xs:string"/>
</xs:simpleType>

<xs:simpleType name="inttype">
 <xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>

<xs:simpleType name="dectype">
 <xs:restriction base="xs:decimal"/>
</xs:simpleType>

<xs:simpleType name="orderidtype">
 <xs:restriction base="xs:string">
  <xs:pattern value="[0-9]{6}"/>
 </xs:restriction>
</xs:simpleType>

<xs:complexType name="shiptotype">
 <xs:sequence>
  <xs:element name="name" type="stringtype"/>
  <xs:element name="address" type="stringtype"/>
  <xs:element name="city" type="stringtype"/>
  <xs:element name="country" type="stringtype"/>
 </xs:sequence>
</xs:complexType>

<xs:complexType name="itemtype">
 <xs:sequence>
  <xs:element name="title" type="stringtype"/>
  <xs:element name="note" type="stringtype" minOccurs="0"/>
  <xs:element name="quantity" type="inttype"/>
  <xs:element name="price" type="dectype"/>
 </xs:sequence>
</xs:complexType>

<xs:complexType name="shipordertype">
 <xs:sequence>
  <xs:element name="orderperson" type="stringtype"/>
  <xs:element name="shipto" type="shiptotype"/>
  <xs:element name="item" maxOccurs="unbounded" type="itemtype"/>
 </xs:sequence>
 <xs:attribute name="orderid" type="orderidtype" use="required"/>
</xs:complexType>

<xs:element name="shiporder" type="shipordertype"/>

</xs:schema>

restriction 元素常被用于向元素施加限制。

<xs:simpleType name="orderidtype">
 <xs:restriction base="xs:string">
  <xs:pattern value="[0-9]{6}"/>
 </xs:restriction>
</xs:simpleType>

restriction 元素显示出数据类型源自于 W3C XML Schema 命名空间的数据类型。

上面的元素或属性的值必须为字符串,并且必须是连续的六个字符,同时这些字符必须是 0-9 的数字。

http://www.w3school.com.cn/schema/index.asp

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
添加DTD约束: 1. 在xml文件的开头添加以下代码: ```xml <!DOCTYPE 根元素名 SYSTEM "dtd文件路径"> ``` 其中,根元素名是xml文件中根元素的名称,dtd文件路径是DTD文件所在的路径。 2. 创建一个名为dtd文件的文件,然后在文件中定义DTD。例如: ```xml <!ELEMENT 根元素名 (子元素名1, 子元素名2, 子元素名3)> <!ELEMENT 子元素名1 (#PCDATA)> <!ELEMENT 子元素名2 (#PCDATA)> <!ELEMENT 子元素名3 (#PCDATA)> ``` 其中,根元素名是xml文件中根元素的名称,子元素名1、子元素名2和子元素名3是根元素的子元素名称,#PCDATA表示文本节点。 添加Schema约束: 1. 在xml文件的开头添加以下代码: ```xml <根元素名 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="schema文件路径"> ``` 其中,根元素名是xml文件中根元素的名称,schema文件路径是Schema文件所在的路径。 2. 创建一个名为schema文件的文件,然后在文件中定义Schema。例如: ```xml <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="根元素名"> <xs:complexType> <xs:sequence> <xs:element name="子元素名1" type="xs:string"/> <xs:element name="子元素名2" type="xs:string"/> <xs:element name="子元素名3" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> ``` 其中,根元素名是xml文件中根元素的名称,子元素名1、子元素名2和子元素名3是根元素的子元素名称,xs:string表示该元素的类型为字符串。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值