XMLEncoder生成的xml文档的schema分析

原创 2006年05月24日 11:10:00

以下文为基础,进行分析

Long Term Persistence of JavaBeans Components: XML Schema

http://java.sun.com/products/jfc/tsc/articles/persistence3/

 

1Basic Elements

每个xml以一个可选的

<?xml version="1.0" encoding="UTF-8" ?>

开头,接着是

<java version="1.4.0" class="java.beans.XMLDecoder">
  ...objects go here...
</java>

其中,version,class这个两个属性似乎已经不使用了。

<java>..</java>中间填充的是组成xml文档的objects,以被解码器readObject的顺序出现。

2Objects

每个object由创建它的一系列方法,按序排列来代表。

每个xml元素都代表一个方法调用。这些方法:一,创建了object(对应一个表达式expression);二,影响了object(对应一个语句statement)。

strings被看作特殊的expressions,标识符(identifiers)用来在object创建之后再引用object时使用的。

3Strings

xml中的原子表达式,

<string>Hello, World</string>

The '<' and '&' characters are represented by the &lt; and &amp; escape sequences.

4Expressions and Statements

expression是有返回值的方法调用,表示为:<object>

statement是没有返回值的方法调用。表示为:<void>

两个元素都有一个method属性,表示调用的方法。

 

<object>的class 属性指定作为一个静态方法的目标的class,构造函数表示为:一个名为new的静态方法。

当expression,statement进一步还包含expressions,则这些expressions作为前两者所代表的方法的参数。

所以,

<object class="javax.swing.JButton" method="new">
  <string>Press me</string>
</object>

代表的java 语句是

new JButton("Press me");

还可以表示为:

<object class="javax.swing.JButton">
  <string>Press me</string>
</object>

因为,new是默认的方法。

将影响一个object(由expression产生)的方法(一个statement)放到这个object里去,如下:

<object class="javax.swing.JButton">
  <void method="setText">
    <string>Hello, world</string>
  </void>
</object>

即为:

JButton b = new JButton();
b.setText("Hello, world");

 

If an expression should not be used as an argument to the enclosing method, it should be represented with the <void> tag. The result of an expression in a <void> tag is still evaluated and used by any objects it encloses.(待考)

嵌套expression,statement的能力减少了描述图形时使用的identifier的数目。

5标识符

有时,用<object>声明了一个对象之后,可能会在其他地方再次用到该对象,所以要定义identifier:

<object id="button1" class="javax.swing.JButton"/>

id是全局的,从声明起。

例子:

<object class="javax.swing.JPanel">
  <void method="add">
    <object id="button1" class="javax.swing.JButton"/>
  </void>
  <void method="add">
    <object class="javax.swing.JLabel">
      <void method="setLabelFor">
        <object idref="button1"/>
      </void>
    </object>
  </void>
</object>

即为:

JPanel panel1 = new JPanel();
JButton button1 = new JButton();
JLabel label1 = new JLabel();
panel1.add(button1);
panel1.add(label1);
label1.setLabelFor(button1);

id还可以这样用:

<object class="java.util.Date">
  <void id="now" method="getTime"/>
</object>

It allows an expression to be evaluated in the context of the enclosing instance, in this case defining the variable now as the value of the expression. It corresponds to the following Java code: (待考)

long now = new Date().getTime();

6缩写词Abbreviation

上述知识,足够使用XMLEncoder,下面是高级知识,可以让xml更简单:

primitives

The following tags represent both the primitive types and their corresponding wrapper classes:
<boolean>
<byte>
<char>
<short>
<int>
<long>
<float>
<double>

例如:

<object class="java.lang.Integer">
  <string>123</string>
</object>

可简写为:

<int>123</int>

null

<null/>

class

The <class> tag can be used to represent an instance of Class. For example,

<object class="java.lang.Class method="forName">
   <string>java.awt.event.ActionListener</string>
</object>
is shortened to

<class>java.awt.event.ActionListener</class>

which is equivalent to ActionListener.class.

Static Constants
(only in releases after 1.4.0 beta) (待考)

As of the release following 1.4.0 beta, the values of static constants may be written using the class and field attributes to specify the declaring class and field name of the constant, respectively. Thus

<void class="javax.swing.JTable" method="getField">
  <string>AUTO_RESIZE_OFF</string>
  <void id="Integer0" method="get">
    <null/>
  </void>
</void>
<object idref="Integer0"/>

is shortened to

<object class="javax.swing.JTable" field="AUTO_RESIZE_OFF"/>

property

以get,set开头的方法可以简写:

如,<void method="getText"/>
is shortened to:

<void property="text"/>

如,

<void method="setText">
  <string>Hello, world</string>
</void>
is shortened to:

<void property="text">
  <string>Hello, world</string>
</void>

Index

继承于java.util,list接口的get,set方法可以简写为:

<void method="get">
  <int>3</int>
<void>
is shortened to

<void index="3"/>
which corresponds to the following Java code:

Object o = aList.get(3);

又,

<void index="3">
  <string>Hello, world</string>
</void>
is equivalent to

<void method="set">
  <int>3</int>
  <string>Hello, world</string>
</void>
which corresponds to the following Java code:

aList.set(3, "Hello, world")

array

用<array>来表示数组,

<array class="java.awt.Component" length="3"/>
It corresponds to the following Java code:

Component[] a = new Component[3];

 

version1。4之后,还可以:

<array class="int">
  <int>123</int>
  <int>456</int>
</array>
represents the following Java code fragment:

int[] intArray = {123, 456};

which represents JTable.AUTO_RESIZE_OFF.

The Top Level environment

定义在<java></java>这个层次的一些高级属性,涉及到XMLDecoder(待考)

7DTD

http://java.sun.com/products/jfc/tsc/articles/persistence3/javabeans.dtd

 

一个例子:

http://java.sun.com/products/jfc/tsc/articles/persistence3/Browse.xml

<?xml version="1.0" encoding="UTF-8"?>
<java version="1.4.0" class="java.beans.XMLDecoder">
  <object class="javax.swing.JFrame">
    <void id="JPanel0" property="contentPane">
      <void method="add">
        <object id="JLabel0" class="javax.swing.JLabel">
          <void property="text">
            <string>URL:</string>
          </void>
          <void property="location">
            <object class="java.awt.Point">
              <int>10</int>
              <int>10</int>
            </object>
          </void>
        </object>
      </void>
      <void method="add">
        <object id="JScrollPane0" class="javax.swing.JScrollPane">
          <void property="preferredSize">
            <object class="java.awt.Dimension">
              <int>500</int>
              <int>300</int>
            </object>
          </void>
          <void property="viewport">
            <void method="add">
              <object id="JEditorPane0" class="javax.swing.JEditorPane"/>
            </void>
          </void>
          <void property="location">
            <object class="java.awt.Point">
              <int>10</int>
              <int>40</int>
            </object>
          </void>
        </object>
      </void>
      <void method="add">
        <object id="JTextField0" class="javax.swing.JTextField">
          <void property="text">
            <string>file:///C:/</string>
          </void>
          <void method="addActionListener">
            <object class="java.beans.EventHandler" method="create">
              <class>java.awt.event.ActionListener</class>
              <object idref="JEditorPane0"/>
              <string>page</string>
              <string>source.text</string>
            </object>
          </void>
          <void property="location">
            <object class="java.awt.Point">
              <int>62</int>
              <int>10</int>
            </object>
          </void>
        </object>
      </void>
      <void property="layout">
        <object class="javax.swing.SpringLayout">
          <void method="putConstraint">
            <string>East</string>
            <object idref="JTextField0"/>
            <int>0</int>
            <string>East</string>
            <object idref="JScrollPane0"/>
          </void>
          <void method="putConstraint">
            <string>West</string>
            <object idref="JTextField0"/>
            <int>10</int>
            <string>East</string>
            <object idref="JLabel0"/>
          </void>
          <void method="putConstraint">
            <string>South</string>
            <object idref="JPanel0"/>
            <int>10</int>
            <string>South</string>
            <object idref="JScrollPane0"/>
          </void>
          <void method="putConstraint">
            <string>East</string>
            <object idref="JPanel0"/>
            <int>10</int>
            <string>East</string>
            <object idref="JScrollPane0"/>
          </void>
          <void method="putConstraint">
            <string>North</string>
            <object idref="JScrollPane0"/>
            <int>40</int>
            <string>North</string>
            <object idref="JPanel0"/>
          </void>
        </object>
      </void>
    </void>
    <void method="pack"/>
    <void property="visible">
      <boolean>true</boolean>
    </void>
  </object>
</java>

版权声明:本文为博主原创文章,未经博主允许不得转载。

根据XML自动生成XSD

利用Vistual Studio自带的xsd.exe工具,根据XML自动生成XSD 1, 命令提示符--》找到vs自带的xsd.exe工具所在的文件夹 例如: C:\Program Files...

XML第十七讲:根据Schema生成XML文档

前面我们学习了Schema验证XML的一些内容,学习了DOM、SAX解析XML的知识,现在我们来用一个题目来练习一下Schema的相关内容。 根据下面的Schema文档 Contacts.xsd,写...

关于Spring配置文件xml文档的schema约束

最开始使用Spring框架的时候,对于其配置文件xml,只是网上得知其使用方法,而不明其意。最近想着寻根问底的探究一下。以下是本文主要内容: 1、配置文件示例。 ...

Spring 配置文件xml文档的schema约束

在使用spring框架的时候,对于其配置文件xml,只是知道其使用方法,而不知道为什么。 这里来研究一下下。1.配置文件示例 ...

黑马程序员_Schema解析XML文档详解

---------------------- android培训、java培训、期待与您交流! -------------------- 1.    书写简单的 Schema 文档 ...

xml文档的DTD约束和Schema约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。XML的约束模式有两种,一种是DTD,还有一种就是Schema。 一、DTD约束(语法简单,功能简单) 二、Sch...

XML文档类型定义---XML Schema

Schema概述 XML Schema是2001年5月正式发布的W3C的推荐标准,经过数年的大规模讨论和开发如今终于尘埃落定,成为全球公认的XML环境下首选的数据建模工具。  使用...

XML文档类型定义---XML Schema结构

5.1 Schema概述XML Schema是2001年5月正式发布的W3C的推荐标准,经过数年的大规模讨论和开发如今终于尘埃落定,成为全球公认的XML环境下首选的数据建模工具。 使用DTD虽然带...

为Eclipse添加XML文档所使用的DTD或XML Schema

为Eclipse添加XML文档所使用的DTD或XML Schema(xml编辑提示) 发布时间:2015-4-22 10:03:23编辑:www.fx114.net 分享查询网我要评论 ...

XML------XML文档类型定义(Schema结构)

XML Schema结构                                                                                        ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XMLEncoder生成的xml文档的schema分析
举报原因:
原因补充:

(最多只允许输入30个字)