`

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:
        <?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:
        <?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,这里的结构化数据一词,本质上应该就是指《数据结构》里的“树”吧?


smodel旨在为文档化的数据提供模型工具。这里的结构是指树状结构。因而对循环依赖的数据结构,是不能很好支持的。循环依赖的结构可以通过refer的机制,得以实现。
18 楼 dengtl 2009-09-18  
qiren83 写道
你的不通用呀?为什么不写成通用的呢?

不过好用有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有何优势哩?

第三,对楼主的奉献和开发精神表示敬意。


SModel并不是一个操作json,xml的工具包,而是用于模型创建,检索,校验,更新。
至于跟诸如xstream有什么优势,我没有那闲工夫去理。自己写的能满足自己做事的需求,另外,对别人在某些场合有所帮助就对了。

至于英文的文档,个人认为用英文描述一些概念更为准确,生硬的翻译个人认为不是很贴切,纯属个人爱好,无从洋媚外之嫌。
15 楼 hatedance 2009-09-17  
一个不错的转换工具。看清了众多表象背后的本质,即结构化数据。
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有何优势哩?

第三,对楼主的奉献和开发精神表示敬意。
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的工具类吧
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
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没有做支持。
4 楼 jansel 2009-09-10  
SModel的适用场景是什么?因为LZ举得例子中,不管Json、XML还是POJO,他们的结构都是一样的,不太实用。

撇开这个功能,其实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才是其强调的重点。
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"));
 

相关推荐

    "三菱PLC与触摸屏联合开发气压传动焊条包装线技术详解",No.945 三菱PLC和触摸屏基于气压传动的焊条包装线的研发 ,核心关键词:三菱PLC; 触摸屏; 气压传动; 焊条包装线; 研

    "三菱PLC与触摸屏联合开发气压传动焊条包装线技术详解",No.945 三菱PLC和触摸屏基于气压传动的焊条包装线的研发 ,核心关键词:三菱PLC; 触摸屏; 气压传动; 焊条包装线; 研发; No.945,"三菱PLC与触摸屏在气压传动焊条包装线研发项目No.945中的应用"

    vb图书馆管理系统(源代码+论文).rar

    1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。

    [matlab系统程序]MATLAB危险区域预警系统.zip

    本项目是自己做的设计,有GUI界面,完美运行,适合小白及有能力的同学进阶学习,大家可以下载使用,整体有非常高的借鉴价值,大家一起交流学习。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。

    [matlab系统程序]MATLAB图像去雾.zip

    本项目是自己做的设计,有GUI界面,完美运行,适合小白及有能力的同学进阶学习,大家可以下载使用,整体有非常高的借鉴价值,大家一起交流学习。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。 项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。

    基于文献知识与知识图谱补全方法用于COVID-19药物再利用的创新算法

    内容概要:文章介绍了针对COVID-19的药物再利用的创新方法,这种方法融合了基于文献的知识(LitCovid和CORD-19数据集)及先进的知识图谱补全技术。具体采用了基于神经网络的TransE、RotatE等多种算法预测药物再利用的潜力,并通过开放和封闭的发现模式为预测结果提供合理的机制解释,包括发现模式、准确性分类及定性评估等手段,增强了方法的实用性。研究表明,TransE表现最优,并成功预测并验证了一系列药物作为COVID-19的治疗候选人选。此外,方法不仅适用于COVID-19,还具备应用于其他疾病药物再利用及其他临床问题解决的潜力。此研究为快速高效地推进药物再利用提供了一个新的计算框架。 适合人群:生物医学科研人员,从事药品再利用、人工智能药物筛选的专业研究人员,对生物信息数据分析和处理感兴趣的学者或技术人员。 使用场景及目标:① 利用计算模型预测药物能否被重新应用于新的适应症,尤其是在面对突发公共卫生事件时加快新药物的研发进程。② 对现有药物进行再评价,以发现更广泛、安全、有效的治疗用途,为临床治疗提供依据和理论指导。③ 探讨通过自动化手段发掘药物作用机理的技术路径。 其他说明:作者团队来自多个国家和地区,研究获得了多项国家级基金支持,论文详尽描述了实验细节,并附上了全部代码和数据资源供后续拓展和重复研究使用。

    "基于三菱PLC与组态王技术的智能交通灯车辆监测系统:No.808的实践与应用",No.808 基于三菱PLC和组态王的智能交通灯车辆监测 ,关键词: 基于三菱PLC; 组态王; 智能交通

    "基于三菱PLC与组态王技术的智能交通灯车辆监测系统:No.808的实践与应用",No.808 基于三菱PLC和组态王的智能交通灯车辆监测 ,关键词: 基于三菱PLC; 组态王; 智能交通灯; 车辆监测; No.808,"三菱PLC与组态王协同的智能交通灯车辆监测系统No.808"

    minecraft1.16.1生存基地 搭配了1.16.1的BSL着色器 BSL光影:https://cdn.modrinth.com/data/Q1vvjJYV/versions/oGcsNfpD/

    在湖上建造的生存基地,希望大家喜欢

    基于西门子S7-1200 PLC与Wincc组态技术的智能路口交通指挥系统解决方案 ,No.698 西门子S7-1200 和Wincc组态基于PLC的路口交通指挥系统 ,No.698; 西门子S7-1

    基于西门子S7-1200 PLC与Wincc组态技术的智能路口交通指挥系统解决方案。,No.698 西门子S7-1200 和Wincc组态基于PLC的路口交通指挥系统 ,No.698; 西门子S7-1200; Wincc组态; PLC; 路口交通指挥系统; 交通控制系统。,基于PLC与Wincc组态的西门子S7-1200交通指挥系统

    电子设计大赛+C题+FPGA+省级获奖

    本资源为无线传输信号模拟系统的完整设计报告,基于ZYNQ7020开发平台实现,包含硬件设计、FPGA算法逻辑、软件控制及详细测试方案。系统可生成直达信号、多径信号及合路信号,支持参数动态调节,适用于通信系统仿真、教学实验及科研开发。 资源内容 设计报告全文:方案论证、理论分析、电路设计、程序流程图、测试结果。 附录数据:AM调制频谱、载波有效值测量、多径时延/衰减/初相实测数据。 配套资料:系统架构图、DAC模块电路图、FPGA算法逻辑框图(PDF+高清图)。 适用场景 设计参考 FPGA数字信号处理开发 无线信道模拟与通信系统仿真 科研项目中的信号生成与测试

    毕业设计&课程设计&毕设&课设-java-ssm网络视频播放器

    项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea

    sqllite查询数据库的语句

    sqllite查询数据库的语句

    (源码)基于物联网的Buddy康复激励系统.zip

    # 基于物联网的Buddy康复激励系统 ## 项目简介 Buddy是一个旨在支持和激励个人在日常生活中的身体活动,从而促进康复和保持健康的系统。它由两部分组成可穿戴设备和名为“Wrfel”的游戏组件。通过可穿戴设备追踪用户的步数和心率等身体数据,并在显示屏上展示。名为“Motivationsbuddy”的角色会在每次活动时陪伴用户,并通过提醒和小提示激励用户保持活动。此外,用户还可以通过设备与其他人员进行网络联系。每周用户可以通过掷骰子的方式选择新的活动。收集到的可穿戴设备数据也会在骰子游戏的界面上进行展示。 ## 项目的主要特性和功能 1. 穿戴设备的步数和心率监测功能实时追踪用户的步数和心率,并在显示屏上展示数据。 2. 激励功能通过提醒和小提示激励用户保持活动。 3. 网络联系功能用户可以与其他人员进行网络联系,分享活动数据和经验。 4. 掷骰子活动选择功能每周用户可以通过掷骰子的方式选择新的活动,增加活动的多样性和趣味性。

    (源码)基于MFC框架的指纹识别系统.zip

    # 基于MFC框架的指纹识别系统 ## 项目简介 本项目是一个基于MFC(Microsoft Foundation Classes)框架的指纹识别系统,主要用于指纹的采集、预处理、特征提取、特征过滤、特征匹配和入库等操作。系统通过本地文件夹存储指纹库信息,并提供分步测试、登记和识别功能。 ## 项目的主要特性和功能 1. 指纹采集与预处理 使用指纹采集器(中控ZK4500)进行指纹图像的采集。 通过中值滤波、高斯锐化、均值化等方法对指纹图像进行预处理。 2. 特征提取与过滤 使用Sobel算法进行方向计算,提取图像梯度信息。 通过掩码计算和Gabor滤波增强指纹图像。 使用基于边界的特征过滤算法,减少特征点数量,提高识别速度。 3. 指纹识别与登记 提供指纹登记功能,用户可以通过采集指纹并输入姓名进行登记。 提供指纹识别功能,通过采集指纹并与指纹库中的信息进行匹配,识别用户身份。

    基于Unet技术的医学图像分割系统-DL00366:以皮肤病数据训练的自动分割模型,DL00366-基于Unet的医学图像分割系统 用Unet来做医学图像分割 我们将会以皮肤病的数据作为示范,训练

    基于Unet技术的医学图像分割系统——DL00366:以皮肤病数据训练的自动分割模型,DL00366-基于Unet的医学图像分割系统 用Unet来做医学图像分割。 我们将会以皮肤病的数据作为示范,训练一个皮肤病分割的模型出来,用户输入图像,模型可以自动分割去皮肤病的区域和正常的区域。 ,DL00366; 基于Unet的医学图像分割系统; 皮肤疾病数据; 模型训练; 图像自动分割。,基于Unet的皮肤病图像分割系统

    毕业设计&课程设计&毕设&课设-java-旅游景点线路网站

    项目均经过测试,可正常运行! 环境说明: 开发语言:java JDK版本:jdk1.8 框架:springboot 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea

    前端Node:第四章:大事件

    前端Node:第四章:大事件

    (源码)基于区块链的金融管理系统.zip

    # 基于区块链的金融管理系统 ## 项目简介 本项目是一个基于区块链技术的金融管理系统,旨在提供一个去中心化、安全可靠的平台,用于处理公司间的财务交易。通过使用智能合约和Python SDK,用户可以进行银行操作、注册公司、登录系统以及进行各种财务操作。 ## 项目的主要特性和功能 ### 主要特性 1. 去中心化利用区块链技术,实现数据的去中心化管理。 2. 安全性通过智能合约和区块链技术,保障数据的安全性和不可篡改性。 3. 可靠性确保交易的可靠性和持久性。 ### 功能 1. 银行界面展示银行相关的数据,如存款、贷款等。 2. 注册与登录允许用户注册新账户并登录系统。 3. 公司管理允许用户创建公司账户,管理公司的财务信息。 4. 财务操作包括转账、购买、融资、还款等操作。 5. 智能合约交互通过Python SDK与智能合约进行交互,实现各种功能。 ## 安装使用步骤 ### 假设用户已经下载了本项目的源码文件

    西门子S7-200 PLC与组态王联合楼宇消防系统电气控制设计解决方案 No.950,No.950 基于西门子S7-200 PLC和组态王楼宇消防系统电气控制系统设计 ,核心关键词:西门子

    西门子S7-200 PLC与组态王联合楼宇消防系统电气控制设计解决方案 No.950,No.950 基于西门子S7-200 PLC和组态王楼宇消防系统电气控制系统设计 ,核心关键词:西门子S7-200 PLC;组态王楼宇消防系统;电气控制系统设计;No.950,基于西门子S7-200 PLC的楼宇消防电气控制系统设计

    java JDK11版本安装包

    Java Development Kit (JDK) 11 版本简介 Java Development Kit (JDK) 作为Java平台的核心组件之一,是开发人员用来构建、运行和测试Java应用程序的必备工具集。JDK 11 是Oracle公司于2018年9月发布的长期支持(LTS)版本,标志着Java语言发展的一个重要里程碑。它不仅继承了之前版本的优点,还引入了一系列新特性与改进,以更好地适应现代软件开发的需求。 主要特点: 性能提升:通过优化垃圾回收机制等手段,JDK 11在性能方面取得了显著进步。 模块化系统:基于Java 9中引入的模块化系统进一步优化,使得开发者能够更高效地组织代码结构,提高安全性及可维护性。 增强的安全性:新增了多项安全功能,比如TLS 1.3的支持,以及对现有加密算法的加强。 新的APIs:增加了许多实用的新APIs,如用于处理HTTP请求的HttpClient API正式版、本地变量类型推断var关键字等。 移除过时元素:为了保持框架的简洁性和现代化,JDK 11移除了部分不推荐使用的API和选项。

    2008-2020年各省国内发明专利申请授权量数据.xlsx

    2008-2020年各省国内发明专利申请授权量数据 1、时间:2008-2020年 2、来源:国家统计J、统计nj 3、指标:行政区划代码、地区、年份、国内发明专利申请授权量(项) 4、范围:31省

Global site tag (gtag.js) - Google Analytics