学习笔记——XML Schema复杂类型

来源:互联网 发布:炒股软件安全吗 编辑:程序博客网 时间:2024/05/21 20:26

复杂类型分2种:

包含简单内容的复杂类型——内容是简单类型值,并包含属性;

包含复杂内容的复杂类型——包含子元素、空元素或混合内容的元素,不管是否包含属性。

 

复杂类型定义使用<complexType.../>,其可接受如下两种子元素:

<simpleContent.../>:用于定义包含简单内容的复杂类型

<complexContext.../>:用于定义包含复杂内容的复杂类型

 

复杂类型的派生方式:

<restriction.../>:限制派生(<simpleContent.../>或<complexContext.../>的子元素);

<extension.../>:扩展派生(<simpleContent.../>或<complexContext.../>的子元素);

 

包含简单内容的复杂类型可由扩展简单类型扩展复杂类型限制包含简单内容的复杂类型而来。

即:

扩展简单类型—>包含简单内容的复杂类型

扩展复杂类型—>包含简单内容的复杂类型

限制复杂类型—>包含简单内容的复杂类型

 

限制包含简单内容的复杂类型派生方式:

1:为元素内容或属性增加进一步的约束;

2:删除某些属性。

 

包含复杂内容的复杂类型可有限制anyType派生新类型扩展简单类型扩展复杂类型

 

Schema有这么一个约定:如果某个复杂类型是由现在anyType派生出来的,那么在定义该复杂类型时可以省略<complexContent.../>和<restriction.../>元素,而直接在<complexType.../>元素内使用<sequence.../>、<choice.../>、<all.../>和<attribute.../>来定义元素和属性。

 

Schema的复杂类型可由复杂类型进一步派生而来。 

 

以限制派生方式来派生新类型时,Schema对基类型中的子元素和属性的属性的处理方式是不一样的:派生类型默认会删除基类型中的所有子元素定义,但会保留其中的所有属性定义。

所以派生新类型是如果需要保留基类型的子元素,必须重新定义这些子元素,如果要删除指定属性,则定义该属性是使用use="prohibited"。

 

扩展包含子元素的类型时派生出来的新类型不可以是混合内容类型。

 

基类型中使用<all.../>定义子元素时,其通过扩展派生出来的新类型无法添加新的子元素;

即使基类型中没有使用<all.../>元素的定义子元素,在通过扩展派生新类型时也不能添加由<all.../>元素包含的子元素。

 

扩展混合内容类型派生出来的新类型必须也是混合内容类型。

原创粉丝点击