XML模式世界中的原始数据类型和派生数据类型有什么区别?

时间:2015-03-19 16:01:47

标签: xml types xsd

有人可以详细说明这个概念吗? 我是一名初学者,无法在这篇文章中找到一篇不错的文章。

1 个答案:

答案 0 :(得分:2)

首先查看完整的type system of XML Schema。下图显示了几乎整个类型系统,除了anySimpleType(以下所有类型都是简单类型)和任意的,用户定义的复杂类型。

  

enter image description here

查看被称为"原始类型"的类型:

  

enter image description here

现在,是什么让这些类型"原始"?它们是原始的,因为它们所代表的对象很少(如果没有)共同,它们的表现非常不同。另一种说法是这些原始类型的语义几乎没有重叠。从这个事实也可以得出,没有一种原始类型可以通过另一种原始类型的定义来解释。此外,原始类型是应该键入XML时最迫切需要的类型(例如,在XSLT 2.0中)。

然后,有派生类型:

  

enter image description here

派生类型被称为"派生"因为它们来自一种特定的原始类型。如您所见,只有stringdecimal具有内置的派生类型。例如,token源自stringnormalizedString也是如此。

至关重要的是,从string派生的所有类型仍然符合string的条件,每个类型都定义了string允许的特定字符串子集。另一方面,人们找不到所有基本类型的共同祖先类型 - 除了anySimpleType,这是一种相当抽象的类型。

原始类型和派生类型之间区别的原因是XML Schema的类型系统是模块化:有一组有限的原子构建块(原始类型),在此基础上一切别的建成。

最后,specification本身非常好地说:

[Definition:]  Primitive datatypes are those that are not defined in terms of other datatypes; they exist ab initio.
[Definition:]  Derived datatypes are those that are defined in terms of other datatypes.
  

无法在这一篇文章上找到一篇不错的文章。

有许多资源可以解释此主题,其中包括http://books.xmlschemata.org/relaxng/relax-CHP-8-SECT-1.htmlhttp://www.w3.org/TR/xmlschema-2/https://msdn.microsoft.com/en-us/library/ms761405%28v=vs.85%29.aspx