XML-Schema的DTD描述

博客主要展示了 Schema 相关内容,包含数据类型定义,如 string、float、date 等,还涉及元素引用、属性引用、属性定义、元素定义、分组等的定义及相关属性设置,是关于 Schema 结构的详细描述。

转的,相当不错!

<!ENTITY % datatypes "(entity | entities | enumeration | id | idref | idrefs | nmtoken | nmtokens | notation | string | bin.base64 | bin.hex | boolean | char | date | dateTime | dateTime.tz | fixed.14.4 | float | int | number | time | time.tz | i1 | i2 | i4 | r4 | r8 | ui1 | ui2 | ui4 | uri | uuid)"
>

<!-- *** 数据类型 **** -->
<!ELEMENT datatype (description)*>
<!ATTLIST datatype
dt:type %datatypes; #IMPLIED
xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
>
 
<!-- ***** 描述 ***** -->
<!ELEMENT description (#PCDATA) >
 
<!-- **** 元素引用 ***** -->
<!--附加限制: maxOccurs 必须是 1 or "*" -->
<!ELEMENT element (description)* >
<!ATTLIST element
type IDREF #REQUIRED
minOccurs CDATA #IMPLIED
maxOccurs CDATA #IMPLIED
>
 
<!-- **** 属性引用 ***** -->
<!ELEMENT attribute (description)* >
<!ATTLIST attribute
type IDREF #REQUIRED
default CDATA #IMPLIED
required (yes | no) "no"
>
 
<!-- **** 属性定义 ***** -->
<!ELEMENT AttributeType (datatype | description)* >
<!ATTLIST AttributeType
name ID #REQUIRED
default CDATA #IMPLIED
dt:type %datatypes; #IMPLIED
dt:values CDATA #IMPLIED
required (yes | no) #IMPLIED
xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
>
 
<!-- **** 元素定义 ***** -->
<!ELEMENT ElementType (datatype | description | AttributeType | attribute | element | group)* >
<!ATTLIST ElementType
name ID #REQUIRED
model (open | closed) #IMPLIED
content (empty | textOnly | eltOnly | mixed) #IMPLIED
order (one | seq | many) #IMPLIED
dt:type %datatypes; #IMPLIED
dt:values CDATA #IMPLIED
required (yes | no) #IMPLIED
xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
>
 
<!-- **** 分组 ***** -->
<!ELEMENT group (group | element | description)*>
<!ATTLIST group
minOccurs CDATA #IMPLIED
maxOccurs CDATA #IMPLIED
order (one | seq | many) #IMPLIED
>
 
<!-- **** Schema ***** -->
<!ELEMENT Schema (AttributeType | ElementType | description )* >
<!ATTLIST Schema
name CDATA #IMPLIED
xmlns:dt CDATA #FIXED "urn:schemas-microsoft-com:datatypes"
>

XML Schema 定义(XSD)是一种用于描述和验证 XML 文档结构的机制,它提供了一种更强大且灵活的方式来定义数据格式、约束条件以及数据类型[^1]。与传统的 DTD(Document Type Definition)相比,XSD 使用 XML 语法来定义规则,并且支持更多的数据类型(如整数、字符串、日期等),这使得 XML 验证更加精确和可靠。 ### XML Schema 的核心功能 XML Schema 可以定义以下内容: - **元素(Elements)**:定义 XML 文档中允许的标签名称及其嵌套关系。 - **属性(Attributes)**:可以为特定元素指定附加信息,例如 `genre="IT类"`。 - **数据类型(Data Types)**:支持基本数据类型(如字符串、数字、布尔值)以及自定义复杂类型。 - **命名空间(Namespaces)**:避免不同来源的元素或属性名称冲突。 - **约束(Constraints)**:包括最小值/最大值限制、唯一性约束、枚举值等。 ### XML Schema 验证过程 XML Schema 验证是通过解析器对 XML 文件进行检查的过程。具体步骤如下: 1. **加载 XSD 文件**:解析器首先读取并解析 XSD 文件,了解文档的结构要求。 2. **匹配 XML 内容**:解析器将 XML 文档的内容与 XSD 中定义的规则进行比对。 3. **验证数据类型**:检查每个字段是否符合其对应的数据类型要求,例如 `price` 是否为数值型。 4. **报告错误**:如果 XML 文档不符合 XSD 的规则,解析器会生成详细的错误信息。 例如,下面是一个简单的 XML Schema 片段,用于定义书籍的信息: ```xml <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="bookstoreType"> <xs:complexType> <xs:sequence> <xs:element name="book" maxOccurs="unbounded"> <xs:complexType> <xs:sequence> <xs:element name="title" type="xs:string"/> <xs:element name="author"> <xs:complexType> <xs:sequence> <xs:element name="first-name" type="xs:string"/> <xs:element name="last-name" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element name="price" type="xs:decimal"/> </xs:sequence> <xs:attribute name="genre" type="xs:string" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> ``` 这个 XSD 文件定义了书籍的基本结构,包括标题、作者、价格以及分类(genre 属性)。接下来,可以使用编程语言(如 Java 或 Python)进行 XML 和 XSD 的验证。 ### 验证 XML 文件的方法 以下是使用 Java 进行 XML Schema 验证的一个简单示例: ```java import javax.xml.XMLConstants; import javax.xml.transform.Source; import javax.xml.transform.stream.StreamSource; import javax.xml.validation.Schema; import javax.xml.validation.SchemaFactory; import javax.xml.validation.Validator; import java.io.File; public class XMLValidator { public static void main(String[] args) throws Exception { // 指定 XSD 文件路径 File schemaFile = new File("bookstore.xsd"); // 指定 XML 文件路径 File xmlFile = new File("books.xml"); // 创建 SchemaFactory 实例 SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); // 加载 XSD 文件 Schema schema = factory.newSchema(schemaFile); // 创建 Validator 实例 Validator validator = schema.newValidator(); // 加载 XML 文件 Source source = new StreamSource(xmlFile); // 执行验证 validator.validate(source); System.out.println("XML 文件验证成功!"); } } ``` 上述代码演示了如何使用 Java 的 `javax.xml.validation` 包来验证 XML 文件是否符合给定的 XSD 规则。如果 XML 文件不满足 XSD 的要求,程序会抛出异常并显示具体的错误信息。 ### XML Schema 的优缺点 #### 优点 - 支持丰富的数据类型,能够精确地定义字段的格式。 - 提供更强的扩展性和灵活性,可以通过命名空间组织复杂的文档结构。 - 支持更细粒度的约束,例如唯一性、枚举值等。 #### 缺点 - 因为需要进行数据类型的验证,所以处理速度可能较慢。 - 对于某些简单的应用场景来说,XSD 的复杂性可能会显得过于繁琐。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值