- 浏览: 6777 次
- 来自: ...
最近访客 更多访客>>
文章分类
最新评论
-
shmily2038:
dengtl 写道最近几月在闲暇时做了一款针对结构化模型查询及 ...
SModel- 提供 XML , JSON , POJO 等结构化数据统一编程模型 -
dengtl:
hatedance 写道一个不错的转换工具。看清了众多表象背后 ...
SModel- 提供 XML , JSON , POJO 等结构化数据统一编程模型 -
dengtl:
qiren83 写道你的不通用呀?为什么不写成通用的呢?
不 ...
SModel- 提供 XML , JSON , POJO 等结构化数据统一编程模型 -
dengtl:
C_J 写道dennis_zane 写道我希望有这么个工具,可 ...
SModel- 提供 XML , JSON , POJO 等结构化数据统一编程模型 -
dengtl:
linliangyi2007 写道首先,请楼主使用中文,虽然我 ...
SModel- 提供 XML , JSON , POJO 等结构化数据统一编程模型
最近几月在闲暇时做了一款针对结构化模型查询及编辑的开源框架,大家可以在 http://code.google.com/p/smodel/得到相应源码及文档.
欢迎大家批评指正!
下载地址: http://smodel.googlecode.com/files/smodel-1.0.2-bin-dependencies.jar
源码: http://smodel.googlecode.com/files/smodel-1.0.2-src.jar
源码SVN:http://smodel.googlecode.com/svn/trunk/
SModel provides users a uniform way to access and manipulate structured model in the format of XML, JSON, POJO or other user defined data format from data source such as stream, database or others.
Base on SModel, Document Oriented Service(DOS) framework can employee a uniform set of APIs to read and manipulate different format of document.
Features
1) provides a uniform way to access and manipulate structure model, including: add, remove, query, move, update, and introspect data. SModel also provides mechanism to subscribe for the change event of the model manipulation.
2)supports to load model from XML, JSON, POJO, or user defined format.
3)supports to flush model to XML, JSON, POJO or user defined format.
4)supports to validate model according to SModel defined or user defined rule.
5)provides mechanism to extend the function of the model.
6)provides mechanism to subscribe for error or warning message of the SModel.
Two Minutes Reference
1)create a xml document
sample xml:
2)load from xml document
3)create a json document
sample json:
"$tag" and "$attr" are the kept words for JSON to XML mapping.
4)load from json document
5)flush to POJO
6)load from POJO
7)query model
8)manipulate model
9)introspect model attribute
10)validate model
smodel旨在为文档化的数据提供模型工具。这里的结构是指树状结构。因而对循环依赖的数据结构,是不能很好支持的。循环依赖的结构可以通过refer的机制,得以实现。
不是很明白楼主的意思,请详细言明“通用”的意思。
从对象依赖关系dump成一个spring的配置文件?
这样做的意义是什么呢?
有个法子可以把对象做成表结构,然后用工具导出XML
smodel是支持的,但支持的不够好,这个周末希望给你个满意的答复。
楼主的这种应用场景我在准备测试数据的时候是遇到过的,是一个不错的建议,谢谢!
SModel并不是一个操作json,xml的工具包,而是用于模型创建,检索,校验,更新。
至于跟诸如xstream有什么优势,我没有那闲工夫去理。自己写的能满足自己做事的需求,另外,对别人在某些场合有所帮助就对了。
至于英文的文档,个人认为用英文描述一些概念更为准确,生硬的翻译个人认为不是很贴切,纯属个人爱好,无从洋媚外之嫌。
从对象依赖关系dump成一个spring的配置文件?
这样做的意义是什么呢?
有个法子可以把对象做成表结构,然后用工具导出XML
SModel是为xml,json,pojo之间的互相转换提供了支持,这是其架构决定了其实现的便利性。在开放式API的系统中,如校内,淘宝网,可以很容易使用SModel完成向客户端发送不同格式数据的目的。
但smodel并不仅仅是这样一个互相转换的工具,其生命力我想应该除了这个模型格式转换外,更应该在其对模型数据的生成,检索,更新,校验方面。我曾经想使用SDO,看了一下SDO的API,发觉比较杂乱,因而smodel应该是一个类似SDO,我自己心目中的SDO。
欢迎大家批评指正!
下载地址: http://smodel.googlecode.com/files/smodel-1.0.2-bin-dependencies.jar
源码: http://smodel.googlecode.com/files/smodel-1.0.2-src.jar
源码SVN:http://smodel.googlecode.com/svn/trunk/
SModel provides users a uniform way to access and manipulate structured model in the format of XML, JSON, POJO or other user defined data format from data source such as stream, database or others.
Base on SModel, Document Oriented Service(DOS) framework can employee a uniform set of APIs to read and manipulate different format of document.
Features
1) provides a uniform way to access and manipulate structure model, including: add, remove, query, move, update, and introspect data. SModel also provides mechanism to subscribe for the change event of the model manipulation.
2)supports to load model from XML, JSON, POJO, or user defined format.
3)supports to flush model to XML, JSON, POJO or user defined format.
4)supports to validate model according to SModel defined or user defined rule.
5)provides mechanism to extend the function of the model.
6)provides mechanism to subscribe for error or warning message of the SModel.
Two Minutes Reference
1)create a xml document
sample xml:
<?xml version="1.0" encoding="UTF-8"?> <order id="order id 1" name="order name 1"> <orderDate>2009-09-06 20:36:01.196</orderDate> <items> <item count="100" id="item id 1" name="item name 1" price="10.3" /> </items> </order>
IXmlModel orderModel = new XmlModel("order"); orderModel.setProperty("id", "order id 1"); orderModel.setProperty("name", "order name 1"); orderModel.setChildText("orderDate", Utils.buildTimestamp(new Timestamp(new Date().getTime()))); IXmlModel items = (IXmlModel) orderModel.addChild("items"); IXmlModel item = (IXmlModel) items.addChild("item"); item.setProperty("id", "item id 1"); item.setProperty("name", "item name 1"); item.setProperty("price", 10.3); item.setProperty("count", 100); XmlModelService.flushToXml(orderModel, "d:/order.xml");
2)load from xml document
IXmlModel orderModel = XmlModelService.loadFromXml(new FileReader("d:/order.xml"));
3)create a json document
sample json:
{"order": {"$tag":"order", "items": {"item": {"$tag":"item", "$attr":{"price":"10.3","name":"item name 1","count":"100","id":"item id 1"} }, "$tag":"items" }, "orderDate":"2009-09-06 21:42:25.603", "$attr":{"name":"order name 1","id":"order id 1"} } }
"$tag" and "$attr" are the kept words for JSON to XML mapping.
//initialize orderModel IXmlModel orderModel= ... XmlModelService.flushToJson(orderModel, new FileWriter("d:/order.json"));
4)load from json document
IXmlModel orderModel = XmlModelService.loadFromJson(new FileReader("d:/order.json"));
5)flush to POJO
public class Order { private String id; private String name; private Timestamp orderDate; private List<Item> items = Utils.newList(); // ... default constructor and getter/setter methods //for the array field(items in this case), setter method is not mandatory if the add method exists //SModel(1.0.0) support the kind of array field includes:Object[],List,Set } public class Item { private String id; private String name; private double price; private int count; // ... default constructor and getter/setter methods } //define POJO channel BeanModelChannel orderChannel = new BeanModelChannel(Order.class, "order"); orderChannel.propertyAsAttribute("id"); orderChannel.propertyAsAttribute("name"); orderChannel.propertyAsChildText("orderDate"); BeanModelChannel itemChannel = new BeanModelChannel(Item.class, "item"); itemChannel.propertyAsAttribute("id"); itemChannel.propertyAsAttribute("name"); itemChannel.propertyAsAttribute("price"); itemChannel.propertyAsAttribute("count"); orderChannel.arrayPropertyAs(itemChannel); //initialize orderModel IXmlModel orderModel = ... //flush to POJO Order order = (Order) XmlModelService.flushToBean(orderModel, orderChannel);
6)load from POJO
Order order = ...//prepare POJO IXmlModel orderModel = XmlModelService.loadFromBean(order, orderChannel);
7)query model
//get first items/item element IXmlModel itemModel = (IXmlModel) orderModel.queryFirstTreeChild("items/item"); //get the first element of items/item whose price equal 10.3 List<ITreeModel> itemModes = orderModel.queryTreeChild("items/item{price=10.3}[0]") //get the element which price is more expensive than 10.3 Query priceQuery = new Query(); priceQuery.addExpression(new IExpression(){ public boolean isMatched(IModel model) { double price = model.getDoubleProperty("price"); return price > 10.3; } }); List<ITreeModel> itemModels = orderModel.getTreeChild(NameHelper.buildFullName("items", "item"), priceQuery);
8)manipulate model
//change the order name to "order new name" orderModel.setProperty("name", "order new name"); //set order date to "2009-09-07 20:36:01.196" orderModel.setChildText("orderDate", "2009-09-07 20:36:01.196"); //add a new item Map<String, Object> propValPairs = Utils.newMap(); propValPairs.put("id", "item id 2"); propValPairs.put("name", "item name 2"); propValPairs.put("count", "100"); propValPairs.put("price", 10.4); orderModel.addChild("items/item", propValPairs); //move the index 1 of the items/item to index 0 orderModel.moveTreeChild("items/item", 1, 0); //delete the item whose price is equal to 10.4 orderModel.removeTreeChild("items/item", Query.valueOf("price=10.4"));
9)introspect model attribute
int count = itemModel.getIntProperty("count", 0); double price = itemModel.getDoubleProperty("price", 0.0); //CustomizedClass is String, Boolean, Byte, Short, Integer, //Double, BigDecimal, BigInteger, URI, Date, Timestamp //and the class has the static method "public static Object valueOf(String str)" defined. itemModel.getTypedProperty("id", CustomizedClass.class, defaultValue); //get a typed value by employing a valueFactory itemModel.getTypedProperty("id", new IValueFactory<CustomizeObject>(){ public CustomizeObject valueOf(String value) { return new CustomizeObject(value); } }, defaultValue);
10)validate model
XmlModelDefinition orderModelDefinition = XmlModelDefinition.createDefaultXmlModelDefinition("root", null); //the attribute id and name of element items/item is mandantory orderModelDefinition.installRule(new PropertyMandantoryRule("items/item", IModelRule.SEVERITY_ERROR, "id", "name")); //the count of items/item should at least be one orderModelDefinition.installRule(new ChildCountRule(IModelRule.SEVERITY_ERROR, "items/item", ChildCountRule.ONE_TO_MANY)); ValidationResult validateRlt = orderModel.validate(orderModelDefinition); boolean isValid = validateRlt.isValid(); List<String> errMsgs = validateRlt.getErrMsgs();
评论
20 楼
shmily2038
2010-04-20
dengtl 写道
最近几月在闲暇时做了一款针对结构化模型查询及编辑的开源框架,大家可以在 http://code.google.com/p/smodel/得到相应源码及文档.
欢迎大家批评指正!
下载地址: http://smodel.googlecode.com/files/smodel-1.0.2-bin-dependencies.jar
源码: http://smodel.googlecode.com/files/smodel-1.0.2-src.jar
源码SVN:http://smodel.googlecode.com/svn/trunk/
SModel provides users a uniform way to access and manipulate structured model in the format of XML, JSON, POJO or other user defined data format from data source such as stream, database or others.
Base on SModel, Document Oriented Service(DOS) framework can employee a uniform set of APIs to read and manipulate different format of document.
Features
1) provides a uniform way to access and manipulate structure model, including: add, remove, query, move, update, and introspect data. SModel also provides mechanism to subscribe for the change event of the model manipulation.
2)supports to load model from XML, JSON, POJO, or user defined format.
3)supports to flush model to XML, JSON, POJO or user defined format.
4)supports to validate model according to SModel defined or user defined rule.
5)provides mechanism to extend the function of the model.
6)provides mechanism to subscribe for error or warning message of the SModel.
Two Minutes Reference
1)create a xml document
sample xml:
2)load from xml document
3)create a json document
sample json:
"$tag" and "$attr" are the kept words for JSON to XML mapping.
4)load from json document
5)flush to POJO
6)load from POJO
7)query model
8)manipulate model
9)introspect model attribute
10)validate model
欢迎大家批评指正!
下载地址: http://smodel.googlecode.com/files/smodel-1.0.2-bin-dependencies.jar
源码: http://smodel.googlecode.com/files/smodel-1.0.2-src.jar
源码SVN:http://smodel.googlecode.com/svn/trunk/
SModel provides users a uniform way to access and manipulate structured model in the format of XML, JSON, POJO or other user defined data format from data source such as stream, database or others.
Base on SModel, Document Oriented Service(DOS) framework can employee a uniform set of APIs to read and manipulate different format of document.
Features
1) provides a uniform way to access and manipulate structure model, including: add, remove, query, move, update, and introspect data. SModel also provides mechanism to subscribe for the change event of the model manipulation.
2)supports to load model from XML, JSON, POJO, or user defined format.
3)supports to flush model to XML, JSON, POJO or user defined format.
4)supports to validate model according to SModel defined or user defined rule.
5)provides mechanism to extend the function of the model.
6)provides mechanism to subscribe for error or warning message of the SModel.
Two Minutes Reference
1)create a xml document
sample xml:
<?xml version="1.0" encoding="UTF-8"?> <order id="order id 1" name="order name 1"> <orderDate>2009-09-06 20:36:01.196</orderDate> <items> <item count="100" id="item id 1" name="item name 1" price="10.3" /> </items> </order>
IXmlModel orderModel = new XmlModel("order"); orderModel.setProperty("id", "order id 1"); orderModel.setProperty("name", "order name 1"); orderModel.setChildText("orderDate", Utils.buildTimestamp(new Timestamp(new Date().getTime()))); IXmlModel items = (IXmlModel) orderModel.addChild("items"); IXmlModel item = (IXmlModel) items.addChild("item"); item.setProperty("id", "item id 1"); item.setProperty("name", "item name 1"); item.setProperty("price", 10.3); item.setProperty("count", 100); XmlModelService.flushToXml(orderModel, "d:/order.xml");
2)load from xml document
IXmlModel orderModel = XmlModelService.loadFromXml(new FileReader("d:/order.xml"));
3)create a json document
sample json:
{"order": {"$tag":"order", "items": {"item": {"$tag":"item", "$attr":{"price":"10.3","name":"item name 1","count":"100","id":"item id 1"} }, "$tag":"items" }, "orderDate":"2009-09-06 21:42:25.603", "$attr":{"name":"order name 1","id":"order id 1"} } }
"$tag" and "$attr" are the kept words for JSON to XML mapping.
//initialize orderModel IXmlModel orderModel= ... XmlModelService.flushToJson(orderModel, new FileWriter("d:/order.json"));
4)load from json document
IXmlModel orderModel = XmlModelService.loadFromJson(new FileReader("d:/order.json"));
5)flush to POJO
public class Order { private String id; private String name; private Timestamp orderDate; private List<Item> items = Utils.newList(); // ... default constructor and getter/setter methods //for the array field(items in this case), setter method is not mandatory if the add method exists //SModel(1.0.0) support the kind of array field includes:Object[],List,Set } public class Item { private String id; private String name; private double price; private int count; // ... default constructor and getter/setter methods } //define POJO channel BeanModelChannel orderChannel = new BeanModelChannel(Order.class, "order"); orderChannel.propertyAsAttribute("id"); orderChannel.propertyAsAttribute("name"); orderChannel.propertyAsChildText("orderDate"); BeanModelChannel itemChannel = new BeanModelChannel(Item.class, "item"); itemChannel.propertyAsAttribute("id"); itemChannel.propertyAsAttribute("name"); itemChannel.propertyAsAttribute("price"); itemChannel.propertyAsAttribute("count"); orderChannel.arrayPropertyAs(itemChannel); //initialize orderModel IXmlModel orderModel = ... //flush to POJO Order order = (Order) XmlModelService.flushToBean(orderModel, orderChannel);
6)load from POJO
Order order = ...//prepare POJO IXmlModel orderModel = XmlModelService.loadFromBean(order, orderChannel);
7)query model
//get first items/item element IXmlModel itemModel = (IXmlModel) orderModel.queryFirstTreeChild("items/item"); //get the first element of items/item whose price equal 10.3 List<ITreeModel> itemModes = orderModel.queryTreeChild("items/item{price=10.3}[0]") //get the element which price is more expensive than 10.3 Query priceQuery = new Query(); priceQuery.addExpression(new IExpression(){ public boolean isMatched(IModel model) { double price = model.getDoubleProperty("price"); return price > 10.3; } }); List<ITreeModel> itemModels = orderModel.getTreeChild(NameHelper.buildFullName("items", "item"), priceQuery);
8)manipulate model
//change the order name to "order new name" orderModel.setProperty("name", "order new name"); //set order date to "2009-09-07 20:36:01.196" orderModel.setChildText("orderDate", "2009-09-07 20:36:01.196"); //add a new item Map<String, Object> propValPairs = Utils.newMap(); propValPairs.put("id", "item id 2"); propValPairs.put("name", "item name 2"); propValPairs.put("count", "100"); propValPairs.put("price", 10.4); orderModel.addChild("items/item", propValPairs); //move the index 1 of the items/item to index 0 orderModel.moveTreeChild("items/item", 1, 0); //delete the item whose price is equal to 10.4 orderModel.removeTreeChild("items/item", Query.valueOf("price=10.4"));
9)introspect model attribute
int count = itemModel.getIntProperty("count", 0); double price = itemModel.getDoubleProperty("price", 0.0); //CustomizedClass is String, Boolean, Byte, Short, Integer, //Double, BigDecimal, BigInteger, URI, Date, Timestamp //and the class has the static method "public static Object valueOf(String str)" defined. itemModel.getTypedProperty("id", CustomizedClass.class, defaultValue); //get a typed value by employing a valueFactory itemModel.getTypedProperty("id", new IValueFactory<CustomizeObject>(){ public CustomizeObject valueOf(String value) { return new CustomizeObject(value); } }, defaultValue);
10)validate model
XmlModelDefinition orderModelDefinition = XmlModelDefinition.createDefaultXmlModelDefinition("root", null); //the attribute id and name of element items/item is mandantory orderModelDefinition.installRule(new PropertyMandantoryRule("items/item", IModelRule.SEVERITY_ERROR, "id", "name")); //the count of items/item should at least be one orderModelDefinition.installRule(new ChildCountRule(IModelRule.SEVERITY_ERROR, "items/item", ChildCountRule.ONE_TO_MANY)); ValidationResult validateRlt = orderModel.validate(orderModelDefinition); boolean isValid = validateRlt.isValid(); List<String> errMsgs = validateRlt.getErrMsgs();
19 楼
dengtl
2009-09-18
hatedance 写道
一个不错的转换工具。看清了众多表象背后的本质,即结构化数据。
LZ,这里的结构化数据一词,本质上应该就是指《数据结构》里的“树”吧?
LZ,这里的结构化数据一词,本质上应该就是指《数据结构》里的“树”吧?
smodel旨在为文档化的数据提供模型工具。这里的结构是指树状结构。因而对循环依赖的数据结构,是不能很好支持的。循环依赖的结构可以通过refer的机制,得以实现。
18 楼
dengtl
2009-09-18
qiren83 写道
你的不通用呀?为什么不写成通用的呢?
不过好用有XML TO JSON json to xml的工具类吧
不过好用有XML TO JSON json to xml的工具类吧
不是很明白楼主的意思,请详细言明“通用”的意思。
17 楼
dengtl
2009-09-18
C_J 写道
dennis_zane 写道
我希望有这么个工具,可以将运行时的对象依赖关系dump成一个spring的配置xml文件,这样的需求sModel可以实现吗?我load这个spring配置文件又可以恢复运行时的状态。
从对象依赖关系dump成一个spring的配置文件?
这样做的意义是什么呢?
有个法子可以把对象做成表结构,然后用工具导出XML
smodel是支持的,但支持的不够好,这个周末希望给你个满意的答复。
楼主的这种应用场景我在准备测试数据的时候是遇到过的,是一个不错的建议,谢谢!
16 楼
dengtl
2009-09-18
linliangyi2007 写道
首先,请楼主使用中文,虽然我经常上jboss和apache的网站,但跟中国人交流,还是中文的好。
其次,看不出这个比jsonlib,Xstream,gson有何优势哩?
第三,对楼主的奉献和开发精神表示敬意。
其次,看不出这个比jsonlib,Xstream,gson有何优势哩?
第三,对楼主的奉献和开发精神表示敬意。
SModel并不是一个操作json,xml的工具包,而是用于模型创建,检索,校验,更新。
至于跟诸如xstream有什么优势,我没有那闲工夫去理。自己写的能满足自己做事的需求,另外,对别人在某些场合有所帮助就对了。
至于英文的文档,个人认为用英文描述一些概念更为准确,生硬的翻译个人认为不是很贴切,纯属个人爱好,无从洋媚外之嫌。
15 楼
hatedance
2009-09-17
一个不错的转换工具。看清了众多表象背后的本质,即结构化数据。
LZ,这里的结构化数据一词,本质上应该就是指《数据结构》里的“树”吧?
LZ,这里的结构化数据一词,本质上应该就是指《数据结构》里的“树”吧?
14 楼
C_J
2009-09-16
dennis_zane 写道
我希望有这么个工具,可以将运行时的对象依赖关系dump成一个spring的配置xml文件,这样的需求sModel可以实现吗?我load这个spring配置文件又可以恢复运行时的状态。
从对象依赖关系dump成一个spring的配置文件?
这样做的意义是什么呢?
有个法子可以把对象做成表结构,然后用工具导出XML
13 楼
linliangyi2007
2009-09-16
首先,请楼主使用中文,虽然我经常上jboss和apache的网站,但跟中国人交流,还是中文的好。
其次,看不出这个比jsonlib,Xstream,gson有何优势哩?
第三,对楼主的奉献和开发精神表示敬意。
其次,看不出这个比jsonlib,Xstream,gson有何优势哩?
第三,对楼主的奉献和开发精神表示敬意。
12 楼
dennis_zane
2009-09-15
我希望有这么个工具,可以将运行时的对象依赖关系dump成一个spring的配置xml文件,这样的需求sModel可以实现吗?我load这个spring配置文件又可以恢复运行时的状态。
11 楼
qiren83
2009-09-15
试下 XStream 很好用
10 楼
qiren83
2009-09-15
你的不通用呀?为什么不写成通用的呢?
不过好用有XML TO JSON json to xml的工具类吧
不过好用有XML TO JSON json to xml的工具类吧
9 楼
dengtl
2009-09-14
beckrabbit 写道
感觉很少会遇到这几种东西的互相转换 尤其是xml和json功能是基本相同的不太会在同一个模块并存 而他们与pojo的转换操作已经有很好的工具了
SModel是为xml,json,pojo之间的互相转换提供了支持,这是其架构决定了其实现的便利性。在开放式API的系统中,如校内,淘宝网,可以很容易使用SModel完成向客户端发送不同格式数据的目的。
但smodel并不仅仅是这样一个互相转换的工具,其生命力我想应该除了这个模型格式转换外,更应该在其对模型数据的生成,检索,更新,校验方面。我曾经想使用SDO,看了一下SDO的API,发觉比较杂乱,因而smodel应该是一个类似SDO,我自己心目中的SDO。
8 楼
beckrabbit
2009-09-13
感觉很少会遇到这几种东西的互相转换 尤其是xml和json功能是基本相同的不太会在同一个模块并存 而他们与pojo的转换操作已经有很好的工具了
7 楼
dengtl
2009-09-13
SModel has updated to smodel-1.0.1.
Comparing to 1.0.0, it make following changes:
1. enable IModel cloneable.
2. XML load and flush use Mode Source and Model Channel mechanism.
3. simplify the IModelSource and ModelLoader
Comparing to 1.0.0, it make following changes:
1. enable IModel cloneable.
2. XML load and flush use Mode Source and Model Channel mechanism.
3. simplify the IModelSource and ModelLoader
6 楼
shotchen
2009-09-11
总感觉java的工具太多,学起来挺累的。类似smodel这样的工具我觉得很好,至少只用学一遍。
5 楼
dengtl
2009-09-10
SModel原用于基于文档的服务框架如Spring-WS,用来处理Xml,JSON格式的文档数据查询,编辑,校验。
我们在处理中发现,不管是XML,JSON都能够使用一套结构化模型去表示,用统一的一套API去访问操作,发觉是很有必要的一件事情。
另外基于文档的形式传输数据,用node.getProperty或node.getIntProperty或node.getTypedProperty是一件很正常的处理方式。
当然有时候对于文档我们已有成熟的Value Object(POJO)去表示,可以通过SModel提供的映射机制,完成模型到POJO的映射。
至于你提到的xml,JSON,POJO的结构一致的疑问,在SModel里XML到POJO的不同结构映射是支持的。对于JSON与XML目前还没有做映射支持,不过JSON与XML在实际应用场合中仅仅是对同一套数据模型的两种表达方式,不同元素映射不是很强的要求,因而在SModel1.0.0没有做支持。
我们在处理中发现,不管是XML,JSON都能够使用一套结构化模型去表示,用统一的一套API去访问操作,发觉是很有必要的一件事情。
另外基于文档的形式传输数据,用node.getProperty或node.getIntProperty或node.getTypedProperty是一件很正常的处理方式。
当然有时候对于文档我们已有成熟的Value Object(POJO)去表示,可以通过SModel提供的映射机制,完成模型到POJO的映射。
至于你提到的xml,JSON,POJO的结构一致的疑问,在SModel里XML到POJO的不同结构映射是支持的。对于JSON与XML目前还没有做映射支持,不过JSON与XML在实际应用场合中仅仅是对同一套数据模型的两种表达方式,不同元素映射不是很强的要求,因而在SModel1.0.0没有做支持。
4 楼
jansel
2009-09-10
SModel的适用场景是什么?因为LZ举得例子中,不管Json、XML还是POJO,他们的结构都是一样的,不太实用。
撇开这个功能,其实LZ应该类似JCR的模型了,JCR中是Node+Property,和LZ的差不多。
基于这种模型,如何搞定前台和后台才可能是大家想要的。不过这套模型搞定View和Dao容易,怕就怕Service,我要从中获取几个属性来处理业务逻辑时,难免要写node.getProperty("xxx");这种代码,这种代码的维护成本很高的。
撇开这个功能,其实LZ应该类似JCR的模型了,JCR中是Node+Property,和LZ的差不多。
基于这种模型,如何搞定前台和后台才可能是大家想要的。不过这套模型搞定View和Dao容易,怕就怕Service,我要从中获取几个属性来处理业务逻辑时,难免要写node.getProperty("xxx");这种代码,这种代码的维护成本很高的。
3 楼
dengtl
2009-09-09
SModel旨在提供结构化模型查询,编辑,校验的一套框架。
至于数据展现形式如JSON,XML,POJO,或用户自定义格式,仅仅是模型序列化与反序列化的数据载体而已。
SModel并不是简单的Json或xml操纵工具。SModel提供针对结构化模型编辑的API才是其强调的重点。
至于数据展现形式如JSON,XML,POJO,或用户自定义格式,仅仅是模型序列化与反序列化的数据载体而已。
SModel并不是简单的Json或xml操纵工具。SModel提供针对结构化模型编辑的API才是其强调的重点。
2 楼
kjj
2009-09-09
jsonlib xstream 等工具类!!!
1 楼
dengtl
2009-09-09
SModel提供一套便利的模型访问与操纵框架,可以方便的实现诸如XML 与 JSON, XML 与 POJO,JSON 与POJO之间的互相转换。
下面以XML 到 JSON 的转换为例:
1)准备好XML,如放在d:/order.xml。
2)从XML装载模型
IXmlModel orderModel = XmlModelService.loadFromXml(new FileReader("d:/order.xml"));
装载好模型之后我们可以利用SModel提供的API,进行模型编辑。
3)将模型导出为JSON
XmlModelService.flushToJson(orderModel, new FileWriter("d:/order.json"));
下面以XML 到 JSON 的转换为例:
1)准备好XML,如放在d:/order.xml。
2)从XML装载模型
IXmlModel orderModel = XmlModelService.loadFromXml(new FileReader("d:/order.xml"));
装载好模型之后我们可以利用SModel提供的API,进行模型编辑。
3)将模型导出为JSON
XmlModelService.flushToJson(orderModel, new FileWriter("d:/order.json"));
相关推荐
参照https://github.com/joelittlejohn/jsonschema2pojo/wiki/Getting-Started的步骤Using jsonschema2pojo within your Java project (embedded)
Struts2.1.6是Apache Struts框架的一个版本,它是一个开源的MVC(Model-View-Controller)框架,广泛用于Java web开发。在这个版本中,Struts引入了两个重要的插件:Convention Plugin和JSON Plugin,使得JSON支持和...
由于不同的数据库管理系统具有不同的数据模型和存储格式,异构数据库整合需要解决数据模式的不一致性和数据格式的差异性问题。在本论文中,我们将探讨基于JSON的异构数据库整合方法。 第1章 绪论 1.1 课题背景 ...
杰克逊模块该模块支持创建JSON模式(v3) 请注意,由于...用法示例(来自 ) 只需添加一个依赖项(这是从我的gradle配置中获取的) "com.fasterxml.jackson.module:jackson-module-jsonSchema:2.9.0" ,至少对于gradl
JSON到Java Bean转换工具,如"json2javabean"和"josnschema2pojo",是开发人员在处理JSON数据与Java对象之间转换时的便利工具。这些工具能够根据JSON格式的数据自动生成对应的Java类,使得数据绑定变得更加简单和...
在研究中,我们对 JSON 和 POJO 之间的映射进行了深入研究,讨论了 JSON 的解码、JSON 与 XML 的比较、JSON 与 POJO 的相互转化等问题,并对将 JSON 融入 ORM 的技术进行了探讨。 此外,我们还对异构数据库与 JSON ...
ezmorph是一个Java库,提供了对象到对象的转换功能,而json-lib是另一个库,专门用于处理JSON(JavaScript Object Notation)数据格式。 1. **ezmorph库**: - **功能**:ezmorph库主要设计用于在Java中方便地进行...
* JSON 与 POJO 的相互转化:包括将 POJO 转化为 JSON、将 JSON 转化为 POJO 等。 * JSON 与 POJO 的映射技术:包括反射机制、注解机制等。 四、异构数据库与 JSON 的映射研究 * 异构数据库与 JSON 的映射技术:...
应该保证的是,使用此模块编写的任何XML也必须使用该模块可读:也就是说,我们的目标是进行完整的XML序列化。 从上面开始:有些XML构造模块将无法处理; 包括JAXB支持的某些情况 但是,此模块可能还支持JAXB无法...
该项目旨在通过使用Jackson @Annotations从您的POJO生成jsonSchema,比原始的做得更好。 强调 JSON模式DRAFT-04,DRAFT-06,DRAFT-07和DRAFT-2019-09 使用JsonSchema的oneOf功能支持多态( @JsonTypeInfo , ...
分享一个使用SpringMVC4 Rest 和Jackson的@JsonView...Spring提供了MappingJacksonValue 包装POJO和序列化视图设置,在发送到web服务器短的时候,我们可以使用RestTemplate来过滤JSON。现在一步一步呈现完整的示例。
- **用途**:作为基础的数据模型,可以自由定义和使用。 - **特点**: - 没有特定的含义或约束; - 可以被其他对象引用和操作。 ### O/R Mapping O/R Mapping(对象关系映射)是一种编程技术,用于将对象模型与...
- **Jackson**:Jackson是Java中非常流行的一个JSON库,提供了高效且功能丰富的API,支持多种数据绑定模式,如JsonNode、POJO(Plain Old Java Object)映射等。 - **Gson**:Google提供的JSON库,它能直接将Java...
Java Bean转换为Json Schema是一种常见的数据转换操作,特别是在开发基于RESTful API的Web服务时,因为JSON Schema提供了数据验证和文档化的功能。Java Bean是Java编程中的一个概念,它是一类具有特定规则的POJO...
在线 JSON 转 POJO ,超简单实用.zip,Generate Java types from JSON or JSON Schema and annotates those types for data-binding with Jackson, Gson, etc
通过自动化工具生成POJO,可以快速完成数据模型的构建。 - 减少错误:自动化生成的代码更少出错,避免了手动编写时可能引入的类型错误或拼写错误。 3. **如何生成POJO?** - 使用IDE插件:很多集成开发环境(如...
压缩包文件 "jsonpojo-master" 命名表明这可能是 `jsonpojo` 工具的源码仓库主分支,可能包含了项目的全部源代码、资源文件、构建脚本以及文档等。如果你下载并解压这个文件,你可能可以编译项目,了解其工作原理,...
`raml2code`项目提供了解决这一问题的工具,允许开发者将JSON Schema定义自动转化为Groovy类,方便进行数据序列化和反序列化。 JSON Schema是一种JSON格式的规范,用于定义JSON数据结构和验证数据是否符合规范。它...
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时...同时,由于`json-lib`是一个成熟的开源项目,其源码还展示了良好的代码组织结构和编程规范,对于提升编码风格也有借鉴意义。
Android json 转换成java实体类