• 热门标签

当前位置: 主页 > 航空资料 > 计算机 >

时间:2010-08-09 13:05来源:蓝天飞行翻译 作者:admin
曝光台 注意防骗 网曝天猫店富美金盛家居专营店坑蒙拐骗欺诈消费者

(3) 复合类型定义
这些是XML 模式里重要的结构。没有它们,将不能组成重要的元素内容模型。< t y p e >元素包
含在一个复合的类型定义里。嵌套在里面,我们声明了元素和属性,或者对模型组的引用。例如:
程序清单7 - 1 5
复合类型定义可能变得非常棘手。在学习了怎样去声明属性和元素之前,这些非常难以理
解。在我们向前走时你把注意力放在看到的< t y p e >元素上,然后你将会明白我的意思。
(4) 属性与属性组
属性声明由< a t t r i b u t e >元素组成,而< a t t r i b u t e >元素至少包含一个n a m e属性。< a t t r i b u t e >元素也有
可选的c a r d i n a l i t y属性:m i n O c c u r s和m a x O c c u r s,它可用来指出属性是否显示,以及如果是,经常怎
样显示。一个t y p e属性指明了属性的数据类型,比如说字符串或整型。一个属性声明可能是d e f a u l t和
f i x e d属性。这些更像D T D里的关键字I M P L I E D和F I X E D。f i x e d属性的值是必须经常有的值。d e f a u l t
属性的值是假如属性没有明确地在X M L文档元素里出现时的值。这里有属性声明的几个例子:
我们经常遇到一组相关的属性,它们在一个模式里应用于多元素声明。XML 模式结构为这
些提供属性组的想法。这是一个命名的属性声明的集合:
程序清单7 - 1 6
212使用XML 高级编程
下载
这里我们声明了t r o o p P a r a m e t e r s属性组,然后在o ff i c e r P a r m s类型定义里使用了它。
(5) 内容模型
我们不想在没有内容模型时进展得太远,并且
XML 模式提供了比D T D更准确的描述内容模型的机
制。它们使用复合类型定义和一个新的结构,
< g r o u p >元素,去建立元素声明的内部内容。
我们现在需要类型元素的另一个属性—c o n t e n t
属性(参见表7 - 1)。c o n t e n t属性告诉我们哪种元素能
被包含(尽管它没指出有关许可的属性的任何内容):
例如:
程序清单7 - 1 7
当我们接触到只含有元素的内容时,事情变得更加有趣。现在需要一些内容操作者—模
式草图里术语称为排序,去演示怎样排列内容。这些排序是< g r o u p >元素o r d e r属性的值。这个新
元素给了我们一种方法去提供声明里有序的元素实体。排序显示在表7 - 2中。
表7 - 2
排序关键字含义D T D等价物
s e q 元素必须按准确的顺序排序,(逗号)
c h o i c e 模型元素之一准确地出现|(管道符号)
(6) 元素声明
这里我们能立即看到X M L怎样用来在X M L应用里生成模式语法,在那里我们必须使用
< ! E L E M E N T语法去在一个D T D里声明一个< B o o k >元素,现在将元素声明放在X M L元素里,于
是我们使用:
这里< e l e m e n t / >元素用来声明一个元素(这个元素描述它的内容为了保持与自我描述数据的
一致性)。n a m e属性简单拥有一个我们正在生成的元素的值。
简单元素由数据类型和一系列属性声明的引用或一个属性组的引用组成。这与D T D的这种
第7章命名空间和模式使用213 下载
表7 - 1
内容属性值含义
u n c o n s t r a i n e d 任何类型的内容
e m p t y 空元素
m i x e d 元素和字符数据
声明类似:除了内容被赋了类型,元素只包含P C D ATA。比如:
这些将符合:
当然,这里将没有D T D那里的字符串和浮点数值类型的概念。当我们想要用结构定义一个
元素,用一个内容模型替代这个数据类型引用。让我们将这个放在一旁,然后看怎样通过在其
他声明添加引用来建立一个元素声明。为这个简单的X M L片段说明一下模式:
程序清单7 - 1 8
这里是需要的元素声明:
程序清单7 - 1 9
这些已经足够简单了。F i r s t,M I和L a s t是字符串。注意,我已经将M I字符串转化成了合适
的长中间大写字母,比如像O ' M或A . G。现在我们将要把它们包裹在一起成复合元素< N a m e >。
例子通常是学习的最好方法,这里有一些例子以及它们的D T D等价物:
程序清单7 - 2 0
214使用XML 高级编程
下载
现在,我们希望能够描述元素内容的多发性问题。为了做到这个,我们使用元素引用上的
m i n O c c u r s和m a x O c c u r s属性。当接触了模型组一段时间之后,将看到我们能同样在那里应用这
些属性,以建立更多复杂的内容模型。
(7) 模型组
一些其他的模式结构允许建立定义块和声明块。正如我们已经看到的,可以在特殊的类型
里拥有一个下面我们能够给它命名的模型组。这个结构使我们能够建立复杂内容模型,与此同
时,我们能够引用命名模型组去建立元素内容模型一些部分,以通过将一个名字放入模型组再
利用类型和元素声明,而且允许我们在别的地方引用它。这里是一些例子:
程序清单7 - 2 1
在这个模型里,每一个文档将以A B序列开始。这至少出现一次,或许两次,我们能选择C
或D,并做三至七次这种选择。最后,我们将所有元素以任意的顺序恢复过来。下面将是一个合
法的与这个内容模型一致的文档片段。
也可以将组套入组成复合内容模型,例如:
程序清单7 - 2 2
第7章命名空间和模式使用215 下载
相应地对于一些元素< f o o >的D T D内容模型是:
现在考虑如果我们能通过名称查阅内容模型组,怎样能使用它们:
程序清单7 - 2 3
在下面的例子里,定义了一个内容模型,然后将它合并到一个元素声明里。连接这些结构
使模式设计者灵活、有效地重用和指定词汇表规范。
程序清单7 - 2 4
这是第一个例子的变体。我没有在< e l e m e n t >里建立属性声明,而是创建了一个包含声明的
属性组,然后利用元素组和属性组的规范创建元素声明。这是使用属性组的另一个方法。
程序清单7 - 2 5
216使用XML 高级编程
 
中国航空网 www.aero.cn
航空翻译 www.aviation.cn
本文链接地址:XML高级编程上(78)