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());
}

输出结果:
在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值