首页 > 其他分享 >XMLEncoder生成的xml文档的schema分析

XMLEncoder生成的xml文档的schema分析

时间:2023-08-10 19:34:08浏览次数:41  
标签:xml 10 java world new XMLEncoder expression Hello schema


以下文为基础,进行分析

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,10,java,world,new,XMLEncoder,expression,Hello,schema
From: https://blog.51cto.com/u_11326739/7039236

相关文章

  • 借助Aspose.Html 将 HTML 模板与 XML 或 JSON 合并
    在现代网络开发中,内容和表示的分离是一个基本原则。HTML模板提供了一种定义网页结构和布局的便捷方法,而JSON和XML数据格式通常用于存储和传输结构化信息。结合这些技术,开发人员可以根据外部源的数据动态生成HTML内容。在这篇博文中,我们将探讨如何在Java中将HTML模板与JS......
  • python读取xml文件
    Python有三种方法解析XML:SAX,DOM,以及ElementTree,本博客主要是讲解DOM和ElementTreeDOM解析方法:xml文件解析首先将xml文件加载进内存,然后读取文件中的内容.在内存将文件以树的结构进行保存,树根在上,树枝在下,整个xml文件被封装为Document对象,文件中的标签节点被封装为No......
  • Windows系统 如何配置Maven的本地仓库 【详解Maven settings.xml配置(指定本地仓库、
    1.确认安装Maven首先,我们需要确认已在计算机上安装了Maven。你可以从Maven官方网站:https://archive.apache.org/dist/maven/maven-3/下载适合你代码ide版本的Maven安装包,比如我idea2019就下载maven3.5-3.6之间的版本。1、先新建名为MAVEN_HOME的变量,值为你的的maven解压路径......
  • 使用MyEclipse如何部署Descriptor (XML)编辑器?
    Descriptor(XML)Editor编辑器包含了高级的XML编辑功能,在本文中您将了解到这些编辑功能、WebXML编辑等,此功能包含在MyEclipse中可用。MyEclipsev2023.1.2离线版下载MyEclipse技术交流群:742336981欢迎一起进群讨论1.WebXML编辑器MyEclipse WebXML编辑器包括高级XML编......
  • Spring-1-深入理解Spring XML中的依赖注入(DI):简化Java应用程序开发
    学习目标前两篇文章我们介绍了什么是Spring,以及Spring的一些核心概念,并且快速快发一个Spring项目,以及详细讲解IOC,今天详细介绍一些DI(依赖注入)能够配置setter方式注入属性值能够配置构造方式注入属性值能够理解什么是自动装配一、依赖注入(DI配置)1依赖注入方式【重点】......
  • openGauss学习笔记-34 openGauss 高级数据管理-SCHEMA
    openGauss学习笔记-34openGauss高级数据管理-SCHEMASCHEMA又称作模式。通过管理SCHEMA,允许多个用户使用同一数据库而不相互干扰,可以将数据库对象组织成易于管理的逻辑组,同时便于将第三方应用添加到相应的SCHEMA下而不引起冲突。每个数据库包含一个或多个SCHEMA。数据库中的每个......
  • @RequestMapping(value = "/testxml", produces = {"application/xml; charset=UTF-8"
    这行代码是使用SpringFramework的注解来配置一个用于处理HTTP请求的方法。具体来说,这是一个用于处理GET请求的方法,路径为"/testxml"。让我为你解释其中的含义:@RequestMapping:这是SpringFramework提供的注解,用于将一个方法映射到特定的请求路径。在这个例子中,它将......
  • python3 xml
    fromxml.etreeimportElementTreedefread():xml=ElementTree.parse('param.xml')items=xml.getroot()foriinrange(len(items)):item=items[i]print(type(item.find('value').text))print(item.g......
  • Word控件Spire.Doc 转换教程(一):在 C#、VB.NET 中将 Word Doc 转换为 XML
    谈到OfficeOpenXML,我们可能会想到HTML。实际上,OfficeOpenXML与HTML类似,都是基于标签的语言。OfficeOpenXML和HTML之间的区别在于OfficeOpenXML使用的标记不是预定义的。如果我们在OfficeOpenXML中创建自己的标签,我们需要遵循一些规则。首先,OfficeOpenXML文档中......
  • javaee 什么是xml
    一、什么是XML?XML(ExtensibleMarkupLanguage)可扩展标记语言。XML指可扩展标记语言(EXtensibleMarkupLanguage)XML是一种标记语言,很类似HTMLXML的设计宗旨是传输数据,而非显示数据XML标签没有被预定义。您需要自行定义标签。XML被设计为具有自我描述性。XML是W3C的......