1. 元素:元素=名称+类型(简单类型,复合类型)
示例:
<书本>
<名称>书剑恩仇录</名称>
<作者>金庸</作者>
</书本>
DTD写法
<!ELEMENT 书本(名称,作者)>
<!ELEMENT 名称(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
### XML学习笔记
#### 一、XML基础知识
**1. 元素**
在XML文档中,元素是最基本的构成单位,由名称与类型组成。其中类型可以是简单类型(Simple Type)或复合类型(Complex Type)。例如,在下面的示例中,“书本”是一个复合类型元素,它包含了两个子元素:“名称”和“作者”,这两个子元素都是简单类型。
```xml
<书本>
<名称>书剑恩仇录</名称>
<作者>金庸</作者>
</书本>
```
对于上面的例子,其DTD定义如下:
```xml
<!ELEMENT 书本 (名称, 作者)>
<!ELEMENT 名称 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
```
这里,`#PCDATA` 表示纯文本数据,即这些元素只能包含文本内容而不能有其他子元素。
#### 二、XML Schema (XSD)
**1. Schema 元素**
XML Schema 定义了如何验证XML文档的结构和数据类型。一个简单的Schema示例如下:
```xml
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://mynamespace/myschema"
elementFormDefault="unqualified">
<!-- elementFormDefault: unqualified (默认情况下所有元素都是未限定的),
qualified (所有元素都限定于命名空间内) -->
<xs:element name="book" type="bookType" />
<xs:complexType name="bookType">
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:schema>
```
- **elementFormDefault**: 指定了该Schema中的元素是否默认限定到命名空间中。
- `<xs:element>`: 定义了一个名为“book”的元素,类型为“bookType”。
- `<xs:complexType>`: 定义了一个复合类型的元素,它包含了一系列子元素。
**2. 数据类型**
XML Schema 支持多种内置的数据类型,包括但不限于:
- `boolean`: 布尔值类型,如 true 或 false。
- `string`: 字符串类型。
- `float`, `double`: 浮点数类型。
- `duration`: 时间持续类型,表示一段时间间隔。
- `dateTime`, `time`, `date`: 分别表示日期时间、时间、日期。
- `hexBinary`: 十六进制二进制数据类型。
- `anyURI`: URI 类型,用于标识资源。
- `NOTATION`: 枚举类型,可以定义特定的标记。
**3. 属性和约束**
- **属性(Attribute)**:可以在 `<xs:attribute>` 元素中定义。例如:
```xml
<xs:attribute name="id" type="xs:string" use="required" />
```
- `name`: 属性名称。
- `type`: 属性的数据类型。
- `use`: 指定该属性是否必须出现。可以是 `required`(必需)、`optional`(可选)或 `prohibited`(禁止)。
- **约束(Restrictions)**:用于限制数据的有效值范围。例如:
```xml
<xs:simpleType name="ageType">
<xs:restriction base="xs:integer">
<xs:minInclusive value="0" />
<xs:maxInclusive value="150" />
</xs:restriction>
</xs:simpleType>
```
- `<xs:minInclusive>` 和 `<xs:maxInclusive>` 定义了年龄的有效取值范围。
**4. 复合类型**
- **complexType**: 定义了包含多个子元素和/或属性的复合类型。例如:
```xml
<xs:complexType name="bookType">
<xs:sequence>
<xs:element name="title" type="xs:string" />
<xs:element name="author" type="xs:string" />
</xs:sequence>
</xs:complexType>
```
- **simpleContent**: 定义了对简单内容进行扩展的方式。
- **complexContent**: 用于扩展复合类型。
**5. Schema 结构元素**
- **schema**: 定义整个Schema文档。
- **element**: 定义XML文档中的一个元素。
- **group**: 定义一组元素的集合。
- **attribute**: 定义元素的一个属性。
- **attributeGroup**: 定义一组属性。
- **choice**: 定义了元素之间互斥的选择关系。
- **simpleType**: 定义简单类型。
- **complexType**: 定义复合类型。
- **list**: 定义列表类型。
- **union**: 定义联合类型。
- **unique**: 定义唯一性约束。
**6. 元素声明**
- **name**: 元素的名称。
- **type**: 元素的类型。
- **minOccurs**: 元素至少出现的次数。
- **maxOccurs**: 元素最多出现的次数。
- **ref**: 引用另一个已定义的元素。
- **fixed**: 元素的固定值。
- **default**: 元素的默认值。
- **substitutionGroup**: 允许替代的元素组。
**7. 属性声明**
- **use**: 属性的使用情况。
- `required`: 必须存在。
- `optional`: 可选。
- `prohibited`: 不允许出现。
以上是关于XML Schema 的基本介绍及其主要元素的使用方法,通过这些基本概念的学习,我们可以更好地理解和使用XML Schema 来验证XML文档的结构和内容。