CSDN博客

img naive1010

.NET Framework 中的 XML 设计目标

发表于2004/11/2 10:54:00  910人阅读

NET Framework 中的 XML 目标是:
  • 符合 W3C 标准。
  • 扩展性。
  • 可插接式结构。
  • 性能。
  • 与 ADO.NET 紧密集成。

符合标准

符合标准意味着类完全符合 XML、命名空间、XSLT、XPath、架构和文档对象模型 (DOM) 的当前 W3C 建议标准。符合标准确保了互操作性并使跨平台应用程序开发变得容易。

最显著的一点是,.NET Framework 中的 XML 类支持 W3C XML 架构定义语言 (XSD) 1.0 建议。.NET Framework 中有一些 XML 类提供验证,还有一个对象模型可用于在内存中生成 XSD 架构。可针对架构、DTD、XDR 和 XSD 进行验证的快速只进分析器称为 XmlValidatingReaderXmlValidatingReader 是符合标准的 XML 分析器。XmlSchemaCollection 类可用于在使用 XmlValidatingReader 时缓存常用的 XSD 或 XDR 架构。

.NET Framework 中有一个 XML 类集提供架构对象模型 (SOM),使用该模型可以以编程方式生成和编译 XSD 架构。XmlSchema 类表示 XSD 架构。使用 XmlReaderXmlWriter 类可以加载和保持这些架构。

XmlDocument 类实现文档对象模型级别 1 和级别 2 建议,它是根据 .NET Framework 的通用设计指南定制的。例如,方法名称使用大写字母。

XslTransform 类符合用于使用 XSLT 转换文档的 XSL 转换 (XSLT) 1.0 版建议和 XML 路径语言 (XPath) 1.0 建议。

扩展性

.NET Framework 中的 XML 通过使用抽象基类和虚方法而变得可扩展。这种扩展性(或子类创建)由 XmlReaderXmlWriterXPathNavigator 抽象类阐释,这些抽象类是使得能够在不同的存储区或数据源上开发新实现的类和公开 XML 的类。例如,XPathNavigator 是集成了 XPath 查询引擎的 API,该引擎可在现有存储区(如文件系统、注册表和关系数据库)上实现。它不仅将数据显示为 XML,还使用 XPath API 查询方法(如 Select)的默认实现,提供对不同数据源的 XPath 查询支持。

扩展性的另一个示例是 XmlReader,它提供一个用于对存储区进行快速只进分析的 API,公开在它移动通过流时所发现的 XML Infoset。.NET Framework 中的 XML 具有以下 XmlReader 实现:用于读取流的 XmlTextReader 类、用于读取节点树的 XmlNodeReader 类和用于在 XmlTextReader 上分层验证支持的 XmlValidatingReader。

XmlWriter 使用基于推送的 API 生成 XML 流。.NET Framework 中的 XML 具有一个称为 XmlTextWriterXmlWriter 实现。

可以进一步从这些类的实现派生,创建可以实现特定处理的其他读取器。例如,通过从 XmlTextReader 派生,创建一个称为 MyXmlTextReader 的自定义读取器,可以创建具有特定于应用程序处理需求的逻辑的读取器版本。

XmlResolver 抽象类提供 XML 文档中引用的外部资源的挂钩。这使您可以用特定于应用程序(如数据库)的方式来缓存资源,或通过从该类派生来解析具有不同协议的资源。XmlResolver 的两个实现 XmlUrlResolverXmlSecureResolver 将解析使用 http://https://file:// 协议的资源。

可插接式结构

.NET Framework 中的 XML 具有可插接式结构。在此基于流的结构中,可插接式意味着可以很容易替代 .NET Framework 中基于这些抽象类的组件。可插接式结构还意味着数据可以在组件之间以流的形式传送,以及插入到此流中的新组件可以改变处理。例如,来自 XML Web services 的流可用 XmlTextReader 分析。可以使用 XmlTextReader 创建 XmlDocument,然后可以使用 XmlDocument 创建 XmlNodeReader

另一个示例是从 XmlReader 加载 DOM(XmlDocument 类)并使用 XmlWriter 保存输出。通过扩展现有类来创建自己的这些类的实现,可以影响 XmlDocument 类的行为。例如,如果创建了一个称为 MyXmlFileReaderXmlReader 实现,并且它可以将文件系统公开为 XML,则可以从此读取器加载 XmlDocument。或者可以从 XmlTextReader 继承,创建一个新的自定义读取器将以属性为中心的文档转换为以元素为中心的文档,它可以用于加载 XmlDocument。这为基于现有类的新类提供了可插接式结构。

将组件插接在一起的另一个示例是在转换过程中使用不同的数据存储区(如 XPathDocumentXmlDocument)。这些数据存储区可用 XslTransform 类转换,输出然后可以流入另一个存储区或以流的形式从 XML Web services 返回。下图说明了这一点。


通过使用 IXPathNavigable 接口,实现 XPathNavigator 的任何存储区都可以插入到 XslTransform 类中以允许对该存储区进行 XSLT 转换。XmlDocumentXPathDocumentXmlDataDocument 类具有此能力。然后,来自 XslTransform 的流式输出可以发送到可插接式结构样式的 XmlReaderXmlWriter

性能

.NET Framework 中的 XML 类表示低级别 XML 处理组件,这些组件不仅用作 .NET Framework 的一部分,还用于将 XML 集成到应用程序中。这些类需要具有极高的性能。

.NET Framework 中的 XML 类旨在支持基于流处理的模型,它具有下列特性:

  • 使用 XmlReader 进行的只进、拉模型分析所用的缓存最小。
  • 使用 XmlValidatingReader 进行只进验证。
  • XPathNavigator 的创新游标样式导航,它将节点创建最小化为单个虚节点,但仍提供对文档的随机访问。这不需要在内存中生成完整的节点树,如 DOM。
  • 来自 XslTransform 类的增量流式输出。

XPathDocument 是 XPath 查询的优化只读存储区,建议在需要进行 XSLT 处理的任何时候都使用它。通过使用此存储区和 XslTransform 类,可以实现高性能的 XSLT 转换。

与 ADO.NET 集成

通过 XML 类和 ADO.NET 之间的紧密集成,关系数据和 XML 在 .NET Framework 中结合在一起。

DataSet 组件表示断开连接的数据库,它能够使用 XmlReaderXmlWriter 类读取和写入 XML、将其内部关系架构结构保持为 XML 架构 (XSD) 以及从 XML 文档推测架构结构。

通过将 DataSetXmlDocument 同步,使其中一个所维护的数据在适当的时候在另一个中得到更新,XmlDataDocument 确实超出了 XML 和关系数据领域的边界。由于 XmlDocument 能够存储半结构化数据,因此在获得 XML 存储区的所有功能的同时,DataSet 基于它的架构提供 XML 上的关系视图。

有关 .NET Framework 如何通过 DataSet 对象和 XmlDataDocument 对象启用对数据的关系和分层表示形式的实时同步访问的更多信息,请参见关系数据和 ADO.NET 的 XML 集成

阅读全文
0 0

相关文章推荐

img
取 消
img