xml-建模

简介: xml-建模

一、前言

随着信息技术的飞速发展,数据的存储和交换变得越来越重要。XML作为一种自包含、可扩展的标记语言,被广泛应用于各种领域,如Web服务、消息队列、配置文件、文档存储等。

XML建模是描述数据的结构和关系所需的一种强大方法,在实践中被广泛应用。它提供了一种通用的、灵活的描述数据的方法,可以用于不同的应用程序、系统和平台之间进行数据交换、存储和共享。

在XML建模之前,需要了解XML的基本语法和结构,包括元素、属性、DTD、命名空间、命名规则、解析器和应用程序接口等。同时,建模也需要对要描述的数据进行深入的分析和设计,包括确定数据的元素、属性、关系、复杂性、出现次数等,以及与其他应用程序之间的接口和交互方式。

在实践中,需要根据具体的应用场景和需求来选择恰当的XML建模技术和工具,并确保建模的准确性、可重用性和可扩展性。

综上所述,XML建模是应对数据存储和交换需求不可或缺的方法,需要仔细考虑设计和实现细节,以达到最佳的效果。

二、建模

1.说明

XML建模是通过定义数据模型、元素、属性、约束和约定等方式,使用XML语言来描述和表示数据的结构、内容和语义。在XML建模中,通常需要考虑以下几个方面:

1. 数据模型定义:XML建模首先需要定义一个数据模型,它描述了元素和属性的名称、类型、允许值、出现次数和其他约束条件,以确保XML文档的结构和语义正确无误。

2. 元素和属性定义:XML元素是XML模型的基本构建单元,可以具有任意数量的属性。元素和属性都需要根据XML标准进行定义和描述,以确保数据能被其他应用程序正确地解析和处理。

3. 命名规则和约定:XML建模通常需要根据一些规则和约定来命名元素和属性,以便于其他应用程序理解和处理数据。例如,使用小写字母、下划线和连字符命名元素和属性,使用URI或URL描述命名空间等。

4. 导入和引用:当XML模型变得更加复杂时,通常需要引用其他XML文档或模型,以避免重复定义和提高可重用性。在XML建模中,可以使用import或include指令来导入其他XML文档或DTD。

5. 模式语言和验证:XML建模中使用模式语言来定义数据模型和约束条件,以确保数据的正确性和完整性。常用的模式语言有DTD、XML Schema Definition(XSD)、Relax NG等。同时,可以使用XML解析器进行模式验证和解析。

综上所述,XML建模是描述数据结构和内容所需的一种通用、灵活和可扩展的方法,需要在实践中根据具体需求和场景进行选择和应用。

2.实例演示

进行实例演示需求:根据mvc.xml进行建模,获取该文件的标签并且封装为实体对象

1.mvc.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="/indexAction" type="test.indexAction">
    <forward name="failed" path="/login.jsp" redirect="false" />
    <forward name="success" path="/index.jsp" redirect="true" />
  </action>
</config>

将所有标签都进行封装为一个对象及封装属性:

2.config类
package com.SAME_LOVE.Model;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
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);
  }
  @Override
  public String toString() {
    return "ConfigModel [amap=" + amap + "]";
  }
  /**
   * 方法功能:查看ConfigModel属性map集合的内容
   */
  public void quop() {
     Set set = amap.entrySet();
     for (Object o : set) {
       Map.Entry entry = (Map.Entry) o;
       ActionModel action = (ActionModel) entry.getValue();
       System.out.println("key键为:"+entry.getKey()+"--value值为:{");
       action.quop();
       System.out.println("}");
     }
  }
}
3.action类
package com.SAME_LOVE.Model;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
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;
  }
  public void push(ForwardModel forwardModel) {
    fmap.put(forwardModel.getName(), forwardModel);
  }
  public ForwardModel pop(String name) {
    return fmap.get(name);
  }
  @Override
  public String toString() {
    return "ActionModel [path=" + path + ", type=" + type + ", fmap=" + fmap + "]";
  }
  /**
   * 方法功能:查看ConfigModel属性map集合的内容
   */
  public void quop() {
     Set set = fmap.entrySet();
     for (Object o : set) {
       Map.Entry entry = (Map.Entry) o;
       System.out.println("key键为:"+entry.getKey()+"--value值为:"+entry.getValue());
     }
  }
}
4.forward类
package com.SAME_LOVE.Model;
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;
  }
  @Override
  public String toString() {
    return "ForwardModel [name=" + name + ", path=" + path + ", redirect=" + redirect + "]";
  }
}
5.建模的作用

XML建模的封装对象可以用于以下几个方面:

1. 读取和写入XML文档:使用封装对象可以方便地读取和写入XML文档,而不必关心XML文档的具体结构和语法。封装对象提供了一种抽象的视图,使得XML文档的结构和元素可以通过属性和方法进行访问和修改,从而方便了数据的操作和管理。

2. 简化应用程序开发:封装对象可以简化应用程序的开发,使得开发人员可以更加专注于业务逻辑和界面设计,而不必过多关注XML文档的细节和复杂性。此外,封装对象还可以提高代码的可读性和可维护性,使得应用程序更加易于理解和维护。

3. 支持数据绑定和事件处理:封装对象可以支持将XML数据与界面控件进行绑定,并通过事件处理程序来响应用户的操作和事件。这可以极大地提高应用程序的交互性和用户体验,使得应用程序更加灵活和易用。

4. 支持跨平台和系统集成:封装对象可以支持跨平台和系统集成,使得XML数据可以在不同的应用程序和系统之间进行交换和分享。封装对象还可以通过网络或其他通信方式进行远程访问和交互,从而满足各种复杂的应用场景。

5. 支持自动化测试和质量保证:封装对象可以用于自动化测试和质量保证,使得开发人员可以更加方便地进行单元测试、集成测试和用户测试,并减少测试成本和时间。此外,封装对象还可以提供错误处理和异常处理机制,以确保系统的稳定性和可靠性。

综上所述,XML建模的封装对象可以帮助提高应用程序的效率和质量,同时还可以简化开发人员的工作和提高用户的体验。在实践中,需要根据具体应用需求和场景来选择适合的封装对象,并合理利用其功能和特性。

三、工厂模式

1.演示

工厂模式的实例演示,将综合第二点的xml建模所有代码进行演示,依然是mvc.xml文件做工厂模式

package com.SAME_LOVE.Model;
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;
/**
 * @author SAME_LOVE
 * @com.SAME_LOVE.Model
 * @Demo01(说明):工厂模式获取封装的建模对象
 */
public class ConfigModelFactory {
  public static ConfigModel build() {
    //实例化ConfigModel类
    ConfigModel ConfigEles = new ConfigModel();
    // 通过类名点class调取方法getResourceAsStream读取xml文件
    InputStream inputStream = ConfigModelFactory.class.getResourceAsStream("/mvc.xml");
    // 实例化SAX解析
    SAXReader read = new SAXReader();
    // 读取xml文件内容
    Document doc = null;
    // 异常处理
    try {
      doc = read.read(inputStream);
    } catch (DocumentException e) {
      e.printStackTrace();
    }
    //向ConfigModel加内容前要先ActionModel类里面有内容才行
    List<Element> actionEles = doc.selectNodes("/config/action");
    for (Element actionEle : actionEles) {
      //实例化ActionModel类
      ActionModel actionModel = new ActionModel();
      //添加ActionModel类的属性内容
      //通过attributeValue方法获取属性并增加
      actionModel.setPath(actionEle.attributeValue("path"));
      actionModel.setType(actionEle.attributeValue("type"));
      //读取action里面所有的forward标签,并且循环
      List<Element> forwardEles = actionEle.selectNodes("forward");
      //向ActionModel加内容前要先ForwardModel类里面有内容才行,
      for (Element forwardEle : forwardEles) {
        //实例化ForwardModel类
        ForwardModel forwardModel = new ForwardModel();
        //添加forwardModel类的属性内容
        //通过attributeValue方法获取属性并增加
        forwardModel.setName(forwardEle.attributeValue("name"));
        forwardModel.setPath(forwardEle.attributeValue("path"));
        //redirect属性只有是false的时候是转发,其他情况都是重定向
        forwardModel.setRedirect(!"false".equals(forwardEle.attributeValue("redirect")));
        //将forward Model加到actionModel的map属性集合中
        actionModel.push(forwardModel);
      }
      //将actionModel加到ConfigEles的map属性集合中
      ConfigEles.push(actionModel);
    }
    //最后返回ConfigEles实体对象
    return ConfigEles;
  }
  public static void main(String[] args) {
    ConfigModel build = ConfigModelFactory.build();
    build.quop();
  }
}

最后的一个测试结果为:

2.作用

工厂模式是一种常用的设计模式,它主要用于创建和管理对象的过程,并将这个过程抽象化,使得应用程序可以更加灵活地获取和使用这些对象。在数据架构中,工厂模式的作用主要有以下几个方面:

1. 统一管理对象的实例化:在数据架构中,通常需要创建和管理大量的对象,并确保这些对象的状态和属性正确无误。使用工厂模式可以将对象的创建和管理过程抽象化,使得应用程序可以更轻松地调用和使用这些对象,同时也可以更好地管理这些对象的状态和生命周期。

2. 降低应用程序的耦合度:使用工厂模式可以将对象创建和管理的过程与应用程序相分离,从而降低了应用程序的耦合度。这样就可以更容易地实现模块化的设计,使应用程序具有更好的扩展性和可维护性。

3. 实现对象的复用和共享:通过工厂模式,可以实现对象的复用和共享。在数据架构中,有些对象可能需要在多个应用程序或模块中被重复使用。如果每个应用程序都单独创建这些对象,会导致代码重复和浪费资源;而使用工厂模式,可以将这些对象的创建和管理过程抽象化,在多个应用程序之间进行共享和复用,从而提高系统的性能和效率。

4. 控制对象的创建和访问权限:在某些情况下,可能需要控制对象的创建和访问权限。例如,在某些应用程序中,可能需要限制对一些敏感数据的访问,只允许特定的用户或角色进行访问。在这种情况下,可以使用工厂模式来实现对象的创建和访问权限控制,从而使得数据更加安全和可靠。

综上所述,工厂模式在数据架构中具有很重要的作用。它可以统一管理对象的创建和管理过程,降低应用程序的耦合度,实现对象的复用和共享,以及控制对象的创建和访问权限等。

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