XML之建模

简介: XML之建模

XML之建模

前言

在之前的博客中与大家分享了关于XML的DTD和解析的相关知识,今天与大家分享的是XML的建模知识。我们还是根据我们的思维导图看看今天要分享的知识。

思维导图:

1. 了解XML建模

1.1 概念

XML建模是一种利用XML语言来描述和定义数据结构和数据关系的方法。

1.2 核心思想

XML建模的核心思想是基于XML语言创建数据模型,从而描述数据的结构和关系;另一个核心思想是将数据和结构分离。具体来说就是利用java面向对象的特性,用操作对象的方式操作xml。

1.3 重要性

  • 灵活性:XML建模是一种灵活可扩展的方式,并且支持自定义标记和属性。这意味着XML建模可以适应不同类型的数据需求,数据如何组织和存储可以更容易地进行定制和修改。
  • 分离数据和结构:XML建模将数据与其结构分离。这意味着数据存储在XML文件中,而结构在定义标记和属性时序列化。 这种分离使数据模型的使用更加灵活和可重用。此外,通过这种分离,用户可以更安全地修改数据和结构,并且可以使用多个数据模型来共同使用数据存储库。
  • 可移植性:XML建模已成为跨平台环境下的事实标准。由于XML建模的特性,使得其应用程序不依赖于任何特定的应用程序或数据库管理系统,从而实现在各种平台和不同应用程序之间高效地交换和共享数据。
  • 支持自动化和标准化:XML建模可以自动化数据处理,并支持标准的数据格式。这意味着用户可以创建可读取的数据,并通过不同的系统进行处理,例如数据验证、数据转换、数据序列化和其他自动化过程。

1.4 优势

  • XML建模在现代IT系统设计中具有极大的重要性,可以帮助在各种应用程序、平台和设备之间实现数据的高效共享和处理。
  • 提高代码的复用性
  • XML语言具有灵活、可扩展、标准化和跨平台等特性,这使得它成为现代信息交换和处理的重要工具,被广泛应用于各种大小和类型的IT系统和应用程序中。

2. XML建模

2.1 建模逻辑思维

  1. 抽象数据模型:XML建模的第一个步骤是想象你需要处理的数据的抽象模型。这可以是一些数据库查询,或者一个复杂的应用程序,或者一个需要传输或存储的数据集。最终目标是在想象中建立一种数据模型,这将是一个不变的结构,它可以随着时间的推移而改变,但在当前的上下文中,它是完美的描述。
  2. 定义结构:接下来,你需要定义数据结构。这包括确认需要什么类型的数据以及数据之间的关系。选择正确的标记和属性对于定义正确的结构至关重要。在确定标签和属性后,数据将被编写为符合指定结构的XML文档。这通常是一种逐步迭代的过程,其中需要尝试多种不同的结构方案来确定最终的结构。
  3. 优化性能:XML文档的大小对性能可能会产生影响。这时需要对XML文档进行压缩、转义、优化等操作,以提高性能和减小文档大小。这种优化过程对处理和传输大量XML数据的应用程序尤其重要。
  4. 标准化和数据交换:XML文档通常需要在不同的应用程序之间传输和共享。此时需要将XML文档标准化为一般接受的数据格式、定义基于XML的数据交换协议、设计数据传输API,以实现不同应用程序间的数据交换。

2.2 建模逻辑顺序

  1. 定义数据模型:确定需要建模的数据类型以及数据之间的关系和层次结构。这是XML建模的核心思想,必须首先确定好。
  2. 设计XML文档结构:设计XML文档标签和属性,从而描述和表示数据模型。这一步骤需要按照“从上到下,从大到小”的方式逐步细化,以确保XML文档正确、合理地描述了数据模型。
  3. 创建XML文档:将数据填充到XML文档中,包括使用标签和属性描述数据、定义CDATA节、注释和处理指令、编写DTD和Schema文档等等。
  4. 优化XML文档:通过优化及其他技术手段,将XML文档体积降低、运行速度提升,如使用压缩技术、删除注释、删除无用空格等。
  5. 标准化和交换:确保XML文档与特定的应用程序和计算机系统兼容并正确交换。这需要定义数据交换协议,并确保XML文档符合标准格式、编码方式和命名规则。
  6. 验证和测试:最后需要确保创建的XML文档符合设计标准和要求,以及能够正确实现数据模型的各种功能和要求。

2.3 建模模式

工厂模式

2.4 XML建模的综合运用(案例)

2.4.1 新建一个config.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<config>
  <action path="/regAction" type="test.RegAction">
    <forward name="failed" path="/reg.jsp" redirect="false" />
    <forward name="success" path="/login.jsp" redirect="true" />
  </action>
  <action path="/loginAction" type="test.LoginAction">
    <forward name="failed" path="/login.jsp" redirect="false" />
    <forward name="success" path="/main.jsp" redirect="true" />
  </action>
  <action path="/addBook" type="test.BookAction">
    <forward name="add" path="/login.jsp" redirect="false" />
    <forward name="del" path="/del.jsp" redirect="true" />
    <forward name="update" path="/update.jsp" redirect="true" />
  </action>
</config>
2.4.2 创建四大类
ForwardModel模型对象类
package com.YX_ModelText;
public class ForwardModel {
  private String name;
  private String path;
  private boolean redirect;
public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public String getPath() {
  return path;
}
public void setPath(String path) {
  this.path = path;
}
public boolean isRedirect() {
  return redirect;
}
public void setRedirect(boolean redirect) {
  this.redirect = redirect;
}
}
ActionMode模型对象类
package com.YX_ModelText;
import java.util.HashMap;
import java.util.Map;
public class ActionModel {
    private String path;
    private String type;
    private Map<String, ForwardModel> fmap=new HashMap<String, ForwardModel>();
  public String getPath() {
    return path;
  }
  public void setPath(String path) {
    this.path = path;
  }
  public String getType() {
    return type;
  }
  public void setType(String type) {
    this.type = type;
  }
//  将forword往action中方   压栈
     public void push(ForwardModel forwordModel) {
    fmap.put(forwordModel.getName(), forwordModel);
  }
//     从action通过name值取出
     public ForwardModel pop(String name) {
    return fmap.get(name);
  }
}
ConfigModel模型对象类
package com.YX_ModelText;
import java.util.HashMap;
import java.util.Map;
public class ConfigModel {
   private Map<String, ActionModel> amap=new HashMap<String, ActionModel>();
   public void push(ActionModel actionmodel) {
  amap.put(actionmodel.getPath(), actionmodel);
}
   public  ActionModel pop(String path) {
  return amap.get(path);
}
   public static void main(String[] args) throws Exception {
  ConfigModel configmodel= ConfigModelFactory.build();
  ActionModel actionmodel=configmodel.pop("/loginAction");
  ForwardModel forward=actionmodel.pop("success");
  System.out.println(forward.getPath());
}
}
ConfigModelFactory模型对象类
package com.YX_ModelText;
import java.io.InputStream;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class ConfigModelFactory {
 public static ConfigModel build() throws Exception {
//   实例化模型对象
   ConfigModel configmodel=new ConfigModel();
   InputStream is = ConfigModelFactory.class.getResourceAsStream("/config.xml");
//   实例化工具类
   SAXReader sr=new SAXReader();
//   读取流
   Document doc = sr.read(is);
//   集合存储action标签
   List<Element> actionEle = doc.selectNodes("/config/action");
//  遍历
   for (Element aelement : actionEle) {
//     System.out.println(aelement.asXML());
//     实例化ActionModel模型对象
         ActionModel actiomodel=new ActionModel();
//       给actio你标签中的属性值
         actiomodel.setPath(aelement.attributeValue("path"));
         actiomodel.setType(aelement.attributeValue("type"));
//获取forword标签集合
         List<Element> forEle = aelement.selectNodes("forward");
//         遍历
         for (Element fEle : forEle) {
//           System.out.println(fEle.asXML());
      ForwardModel forwordmodel=new ForwardModel();
//      设置属性值
      forwordmodel.setName(fEle.attributeValue("name"));
      forwordmodel.setPath(fEle.attributeValue("path"));
//      只有填写false才是转发,其他都是重定向
      forwordmodel.setRedirect(!"false".equals(fEle.attributeValue("redirect")));
//      将ForwordModel添加到ActionModel
      actiomodel.push(forwordmodel);
         }
         //       将ActionModel加入ConfigModel中
         configmodel.push(actiomodel);
   }
   return configmodel;
}
 public static void main(String[] args) throws Exception {
  ConfigModelFactory.build();
}
}
测试;在ConfigModel输入以下代码
public static void main(String[] args) throws Exception {
  ConfigModel configmodel= ConfigModelFactory.build();
  ActionModel actionmodel=configmodel.pop("/loginAction");
  ForwardModel forward=actionmodel.pop("success");
  System.out.println(forward.getPath());
}

输出结果:

目录
相关文章
|
XML Java 数据格式
一.Xml建模之入门
一.Xml建模之入门
62 1
|
XML 设计模式 开发框架
J2EE(xml建模)
J2EE(xml建模)
53 0
|
XML 存储 设计模式
XML系列(三)之 XML建模
XML系列(三)之 XML建模
|
XML 设计模式 开发框架
J2EE之XML建模(超详细)
J2EE之XML建模(超详细)
50 0
|
XML 存储 JSON
XML建模最详细介绍讲解
XML建模最详细介绍讲解
93 0
|
XML 存储 设计模式
XML建模
XML建模
70 0
|
XML 存储 开发框架
J2EE之XML建模
J2EE之XML建模
41 0
|
XML 数据采集 JSON
XML建模
XML建模
49 0
|
XML 存储 Java
XML建模
XML建模
|
11月前
|
XML 存储 设计模式
xml建模
xml建模
49 0