首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

创建一种声明性 XML UI 语言 -2

创建一种声明性 XML UI 语言 -2

XML 模式这个声明性 XML UI 将把 XML 元素映射到 ,由于 Swing 可用于所有现有 Java 运行时环境,该框架提供了极大的可移植性。许多 Swing 组件将在 XML 格式中拥有相应的 XML 元素。     
这个框架使用一个 XML 模式。XML 模式允许在一个模式实例中使用指定顺序、基数(cardinality)和数据类型。这一点很重要,该框架将要求一个具有指定类型和特定顺序的 XML 元素集。 展示了一个 XML 模式实例中的初始元素和属性的层次结构。
清单 2. 声明性 XML UI 模式:初始元素
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema elementFormDefault="qualified"
  targetNamespace="http://xml.bcit.ca/PurnamaProject/2003/xui"
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:xui="http://xml.bcit.ca/PurnamaProject/2003/xui">

  <xs:element name="XUI">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" maxOccurs="128" ref="xui:Window"/>
        <xs:element minOccurs="0" maxOccurs="1" ref="xui:Resource"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:anyURI" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="Resource">
    <xs:complexType>
      <xs:sequence>
      </xs:sequence>
      <xs:attribute name="uri" type="xs:anyURI" use="required"/>
      <xs:attribute name="class" type="xs:token" use="required"/>
      <xs:attribute name="type" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:token">
            <xs:enumeration value="java"/>
            <xs:enumeration value="groovy"/>
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="Window">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="xui:GridLayout"/>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="xui:BasicDialog"/>
          <xs:element ref="xui:OpenFileDialog"/>
          <xs:element ref="xui:SaveFileDialog"/>
          <xs:element ref="xui:CustomDialog"/>
          <xs:element ref="xuianel"/>
          <xs:element ref="xui:SplitPanel"/>
          <xs:element ref="xui:TabbedPanel"/>
        </xs:choice>
        <xs:element minOccurs="0" maxOccurs="1" ref="xui:MenuBar"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID" use="required"/>
      <xs:attribute name="x" type="xs:short" use="required"/>
      <xs:attribute name="y" type="xs:short" use="required"/>
      <xs:attribute name="width" type="xs:unsignedShort" use="required"/>
      <xs:attribute name="height" type="xs:unsignedShort" use="required"/>
      <xs:attribute name="name" type="xs:string" use="required"/>
      <xs:attribute name="visible" type="xs:boolean" use="required"/>
    </xs:complexType>
  </xs:element>

  <xs:element name="GridLayout">
    <xs:complexType>
      <xs:attribute name="width" type="xs:unsignedShort" use="required"/>
      <xs:attribute name="height" type="xs:unsignedShort" use="required"/>
    </xs:complexType>
  </xs:element>

</xs:schema>




下面详细检查一下这个模式。首先,根据 XML Recommendation 的建议,XML 声明必须出现在最前面 — 甚至在空格和注释前面。其次,schema 元素包含其他元素:   
  • elementFormDefault="qualified" 表明所有元素必须有一个名称空间 — 可以是前缀,也可以是默认名称空间。
  • targetNamespace="http://xml.bcit.ca/PurnamaProject/2003/xui" 规定了目标名称空间 URI。
  • 模式实例使用 W3C XML Schema Recommendation 和其中的所有元素(xmlns:xs="http://www.w3.org/2001/XMLSchema")。
  • xmlns:xui="http://xml.bcit.ca/PurnamaProject/2003/xui" 识别另一个名称空间和它的对应前缀。
在 XSD 中使用名称空间很重要,这样就能消除名称空间冲突。当来自两个或多个 XML 格式的两个或多个元素的名称相同时,名称空间冲突 就会出现。这种冲突使对它的对应标记集感兴趣的应用程序感到困惑。通过使用名称空间和对应的名称空间前缀,您可以彻底避免这个问题。        
再次,根级别(root-level)数据类型元素 XUI 表明:   
  • 它允许一个由 0 个到 128 个 Window 元素组成的序列,序列末尾是一个 Resource 元素。稍后您将发现,这两个元素将在模式实例中被引用。
  • 它有一个 id 元素,该元素是必需的且其类型必须为 anyURI。
XUI 元素可能包含许多 Window 元素,它也可能没有任何 Window 元素(如果 minOccurs 元素的值为 0)。至于 Resource 元素:
  • 它有一个空的内容模型,因为它的 xs:sequence 元素为空。
  • 它有 3 个属性,它们都是必需的。
  • 最后的 type 属性创建了一个从 XSD 的已定义类型(token)派生而来的简单类型,其中 restriction 片段是 enumeration,允许列举 java 和 groovy 的字面文本值。
Resource 元素的目的是向这个 Java 框架提供一个资源(本例中是一个 JAR)的 URI,该资源包含运行时可以加载并绑定的已编译 Java 类。这个资源依赖于将被调用的一个特殊类(class 属性的值),该类主要用于提供一个已公开的类,以便响应从 GUI 生成的所有事件。       
Window 元素:
  • 包含一个 GridLayout 序列,该序列可以包括 GridLayout,BasicDialog、OpenFileDialog、SaveFileDialog、CustomDialog、Panel、SplitPane 和 TabbedPane 元素,以及 0 个或一个 MenuBar。
  • 拥有 7 个属性 — 都是必需的 — 它们使用 XML Schema Recommendation 中的各种已定义数据类型(注意 xs 前缀)。
Window 可以包含多个不同的顶级和中级容器。Window 元素引用了一个 GridLayout 元素。GridLayout 指定了由一个单元网格组成的维度,用于容纳组件。GridLayout 提供的布局特性类似于 Java 环境中的 java.awt.GridBagLayout,但没有后者复杂。
返回列表