当前位置: 首页 > 工具软件 > XML to JSON > 使用案例 >

XML Schema与JSON Schema

孟英叡
2023-12-01

XML Schema,XSD (XML Schema Definition)是W3C于2001年5月发布的推荐标准,指出如何形式描述XML文档的元素。XSD是许多XML Schema 语言中的一支。XSD是首先分离于XML本身的schema语言,故获取W3C的推荐地位。

像所有XML Schema 语言一样,XSD用来描述一组规则──一个XML文件必须遵守这些规则,才能根据该schema‘合法(Valid)’。

然而,与其他XML Schema 语言不同,XSD意图设计为在确认一个文档的有效性时,将会产生满足特定数据类型的一个信息集合。这种后验证的XML信息集可用来开发XML文件处理软件。

XML Schema 具体是什么呢?
XML Schema 本身也是一种XML构造,它用来描述[哪个元素,在什么时候出现],[该元素具有什么样的属性]等等,也就是说,XML Schema是对XML的树形构造加以描述说明的一种语言。
原本,使用DTD对XML的树形构造加以描述说明,但DTD存在严重的局限性,DTD不能定义数据的类型,语法也与XML语言完全不一样,在使用的便利性,数据结构表达的严谨性上存在问题。
为什么需要XML Schema?
上面我们解说了XML Schema是什么,但为什么需要XML Schema呢?为了回答这个问题,我们举个例子。
XML作为数据载体,可以用来描述各种各样的数据。在系统开发中,可以使用XML在系统(或不同功能模块)之间传递数据,也可以使用XML作为配置文件,数据文件等。
但系统使用XML,需要对XML文件本身加以解析,也就是说,系统需要知道XML文件的格式是什么。
比如下面两个XML文件:
hello.xml

<?xml version="1.0"?>   
<hello>World</hello>  

order.xml

<?xml version="1.0"?>   
<order>   
    <id>01</id>   
    <name>Order Book</name>   
    <price>100.00</price>   
</order>  

它们的格式不一样,所代表的意思也不一样。
一般来说,一个系统只能处理那些事先决定好的具有固定构造的XML文档。
也就是说,系统在使用它们之前,需要判别它们是否是合法的XML文件格式。
而XML Schema则刚好可以很好地对XML构造加以描述。
事实上,一些XML解析器,以及某些工具需要借助XML Schema来处理XML。
简单的XML Schema例
我们为上面的例子
hello.xml

<?xml version="1.0"?>   
<hello>World</hello>  

写一个简单的XML Schema:
hello.xsd

<?xml version="1.0" encoding="utf-8"?>   
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">   
    <xs:element name="hello" type="xsd:string">   
</xs:schema>  

同样,对于JSON文件的定义,也应该有一个JSON Schema以规范JSON文件内容。

JSON Schema用以标注和验证JSON文档的元数据的文档,可以类比于XML Schema。相对于JSON Schema,一个JSON文档就是JSON Schema的一个instance。
JSON Schema本身就是JSON格式,自己描述自己,它们俩之间的关系可以理解为类与对象的关系,也可以理解为集合与元素的关系,或JSON Schema描述JSON数据的模式。它的特性和用途,可以大致归纳为以下几点:

  1. 用于描述数据结构
    在描述 JSON 数据时,如果数据本身的复杂度很高,高到三维四维,普通的标签函数已经无法表示这种层级结构了,而 JSON Schema 利用 object 和 array 字段类型的反复嵌套,可以规避掉这个缺陷。
    当然,除了键值等基本信息,规范层面还提供了丰富的关键词支持,如果想通过自定义扩展字段,解决特定场景的业务需求,也是非常方便的。
  2. 用于构建人机可读的文档
    计算机领域有个概念叫做自描述。所谓自描述,可以理解为:文档本身包含了自身与其他文档交互相关的描述信息,不需要其他的配置文件或者额外信息来描述。
    而 JSON Schema 就是自描述的,它本身就是一份很完善的说明文档,字段的含义说明、该如何取值、格式的要求等都清晰明了。
  3. 用于生成模拟数据
    通过标签函数生成模拟数据,只能解决基本的格式要求。比如 string 类型的字段,模拟出来的数据,无非是一个随机字符串。
    但在 JSON Schema 中,由于字段的描述不仅仅是类型,更多的约束条件,可以确保模拟数据更接近于真实数据。
  4. 用于校验数据,实现自动化测试
    接口数据的校验工作,往往依赖于测试代码逻辑和用例。如果用 JSON Schema 描述一个数据接口,就不需要再编写测试代码了,所有的逻辑都可以移植到 JSON Schema 中维护。配合 jsv、tv4 等二方校验工具,接口测试可以真正自动化。
 类似资料: