Schema和DTD之间的那些事儿

2024-02-17 16:48
文章标签 schema 之间 事儿 dtd

本文主要是介绍Schema和DTD之间的那些事儿,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

      说到Schema和DTD,相信对XML有所了解的人,都会自动化的想到验证两个字。是的,这两个技术就是用来验证XML的。那么为什么要对XML进行验证呢?这就要说到有效的XML了。

      如果一个XML文档规定其文档类型和数据结构的DTD或者Schema,并且与之关联,并且校验正确,则此文档是有效的。那么有效和良好又是什么关系?


  • 格式良好的XML文档,不一定是有效的XML文档。
  • 有效的XML文档,则一定是格式良好的XML文档。
  • 说明:在格式良好的基础上,再看是否满足企业的特殊要求。

      

      明白了Schema和DTD的作用,那么到底它们又是什么它们又有什么区别呢不能互相替代吗?下面且听我细细说来吧。


      先说说DTD。DTDDocument TypeDefinition,文档类型定义)是一套标记的语法规则。具体官方的解释就不说了,用我自己理解的话来说,DTD顾名思义,文档类型定义--定义XML文档的各种类型,例如元素啊,属性等的定义规则。这就是DTD。


      再说说Schema它是用一套预先规定的XML元素和属性创建的,也就是说XMLSchema是用来规定XML文档实例的结构和每个元素/属性的数据类型的。

看到这里,读者大概明白什么是Schema和DTD,可以是不是也不明白为什么他们俩这么相似还要两个都存在呢?请往下看吧~


      正如我们看到的,Schema和DTD确实是非常相似的,但是也只是相似,它们还是有区别的。


      区别一:


      在此区别上,给XML Schema的使用带来许多好处:

  • 使用Schema我们不再需要重新学习特殊的语法,节省了很多时间;
  • 由于Schema本身也是一个XML,所以关于XML的工具,例如XML编辑工具,语法分析器等,Schema都可以直接应用;
  • XML Schema理所当然的继承了XML的自描述性和可扩展性,这使得XML Schema 更具有可读性和灵活性;
  • DTD是用来验证XML的,但是DTD本身的合法性却缺少较好的验证机制,而Schema在此不同,它拥有良好的合法性验证机制.

 

      区别二:


      对于开发者而言,这是两者特别显著的一个区别了.

      1.XML DTD提供的数据类型只有NMTOKENNMTOKENS等十种内置(built-in)数据类型.这些数据类型显然无法满足文档的可理解性和数据交换的需要.

      2.XML Schema则不同,它内置了三十七种数据类型,如intshortdouble等常用的数据类型,并通过将数据类型表示为由value spacelexicalspacefacet三部分组成的三元组而获得更大的灵活性。

       这里需要提一下,XML Schema之所以可以达到这样的灵活性,主要来自于对用户自定义类型的支持.XML Schema提供两种方式来实现数据类型的定义:

          1)简单类型定义simpleType),即在XML Schema内置的数据类型基础上或其它由XML Schema内置的数据类型继承或定义所得到的简单的数据类型(simpleType)基础上,通过restrictionlist或者 union方式定义新的数据类型。

          2)复合类型定义complexType),该方法提供了一种功能强大的复杂数据类型定义机制,可以实现包括结构描述在内的复杂的数据类型。


     其他区别:


      

      综上可知,DTD和Schema的区别还是比较显著的,但是至于Schema能否取代DTD呢?我觉得正如"存在即合理",DTD虽然没有Schema那么强的表现力,但是它让有它的适用范围.

      我觉得这句话来最后总结两者的恩恩怨怨很合适:作为一种强有力的标准,XML Schema作为XML模式的主流已经成为一种趋势;但作为一种最简单的XML模式,XML DTD也还将会在一段时间内发挥它应有的作用。你觉得呢?


这篇关于Schema和DTD之间的那些事儿的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/718401

相关文章

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法

《golang获取当前时间、时间戳和时间字符串及它们之间的相互转换方法》:本文主要介绍golang获取当前时间、时间戳和时间字符串及它们之间的相互转换,本文通过实例代码给大家介绍的非常详细,感兴趣... 目录1、获取当前时间2、获取当前时间戳3、获取当前时间的字符串格式4、它们之间的相互转化上篇文章给大家介

分辨率三兄弟LPI、DPI 和 PPI有什么区别? 搞清分辨率的那些事儿

《分辨率三兄弟LPI、DPI和PPI有什么区别?搞清分辨率的那些事儿》分辨率这个东西,真的是让人又爱又恨,为了搞清楚它,我可是翻阅了不少资料,最后发现“小7的背包”的解释最让我茅塞顿开,于是,我... 在谈到分辨率时,我们经常会遇到三个相似的缩写:PPI、DPI 和 LPI。虽然它们看起来差不多,但实际应用

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方

Python实现PDF与多种图片格式之间互转(PNG, JPG, BMP, EMF, SVG)

《Python实现PDF与多种图片格式之间互转(PNG,JPG,BMP,EMF,SVG)》PDF和图片是我们日常生活和工作中常用的文件格式,有时候,我们可能需要将PDF和图片进行格式互转来满足... 目录一、介绍二、安装python库三、Python实现多种图片格式转PDF1、单张图片转换为PDF2、多张图

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

java父子线程之间实现共享传递数据

《java父子线程之间实现共享传递数据》本文介绍了Java中父子线程间共享传递数据的几种方法,包括ThreadLocal变量、并发集合和内存队列或消息队列,并提醒注意并发安全问题... 目录通过 ThreadLocal 变量共享数据通过并发集合共享数据通过内存队列或消息队列共享数据注意并发安全问题总结在 J

Java文件与Base64之间的转化方式

《Java文件与Base64之间的转化方式》这篇文章介绍了如何使用Java将文件(如图片、视频)转换为Base64编码,以及如何将Base64编码转换回文件,通过提供具体的工具类实现,作者希望帮助读者... 目录Java文件与Base64之间的转化1、文件转Base64工具类2、Base64转文件工具类3、

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点