为什么我生成的jsonschema 生成器不起作用

xml使用schema文件创建实例
我们定义了名为example.xsd的一个xsd文件,内容如下:
&?xml&version="1.0"&encoding="UTF-8"?&
&schema&xmlns="http://www.w3.org/2001/XMLSchema"&
&targetNamespace=""
&xmlns:tns=""&
&elementFormDefault="qualified"&
&element&name="user"&
&complexType&
&sequence&
&element&name="username"&type="string"/&
&element&name="password"&type="string"/&
&/sequence&
&/complexType&
&/element&
此时,我们要在xml当中使用其中的元素并进行对其中的元素进行赋值,得到的xml文件如下:
&?xml&version="1.0"&encoding="UTF-8"?&
&user&xmlns=""
&&xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
&&xsi:schemaLocation="&example.xsd"&
&&&username&小明&/username&
&&&password&xiaoming&/password&&
1.&xmlns=""
在这个文件当中我们要使用user,我们要引用http://这个包(命名空间),所以我们要使用xmlns=""。
2.xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
导入xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"(这个是必须的),我的理解是,xsd就好像是一个类文件,然后xml就是一个实例,我们要创建实例就需要导入这个命名空间。
3.xsi:schemaLocation="&example.xsd"
schemaLocation(e.g&:&)(e.g:&example.xsd(xsd文件的文件名))。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。【Schema】结构生成器 - Schema Builder
我的图书馆
【Schema】结构生成器 - Schema Builder
介绍Laravel 的结构生成器 (Schema) 提供一个与数据库无关的数据表产生方法,它可以很好的处理 Laravel 支持的各种数据库类型,并且在不同系统间提供一致性的 API 操作。建立与删除数据表要建立一个新的数据表,可使用Schema::create&方法:Schema::create('users', function($table)
$table-&increments('id');
});传入&create&方法的第一个参数是数据表名称,第二个参数是&Closure&并接收Blueprint&对象被用来定义新的数据表。要修改数据表名称,可使用&rename&方法:Schema::rename($from, $to);要指定特定连接来操作,可使用&Schema::connection&方法:Schema::connection('foo')-&create('users', function($table)
$table-&increments('id');
});要移除数据表,可使用&Schema::drop&方法:Schema::drop('users');
Schema::dropIfExists('users');加入字段更新现有的数据表,可使用&Schema::table&方法:Schema::table('users', function($table)
$table-&string('email');
});数据表产生器提供多种字段类型可使用,在您建立数据表时也许会用到:命令功能描述$table-&bigIncrements('id');ID 自动增量,使用相当于「big integer」类型$table-&bigInteger('votes');相当于 BIGINT 类型$table-&binary('data');相当于 BLOB 类型$table-&boolean('confirmed');相当于 BOOLEAN 类型$table-&char('name', 4);相当于 CHAR 类型,并带有长度$table-&date('created_at');相当于 DATE 类型$table-&dateTime('created_at');相当于 DATETIME 类型$table-&decimal('amount', 5, 2);相当于 DECIMAL 类型,并带有精度与基数$table-&double('column', 15, 8);相当于 DOUBLE 类型,总共有 15 位数,在小数点后面有 8 位数$table-&enum('choices', array('foo', 'bar'));相当于 ENUM 类型$table-&float('amount');相当于 FLOAT 类型$table-&increments('id');相当于 Incrementing 类型 (数据表主键)$table-&integer('votes');相当于 INTEGER 类型$table-&json('options');相当于 JSON 类型$table-&longText('description');相当于 LONGTEXT 类型$table-&mediumInteger('numbers');相当于 MEDIUMINT 类型$table-&mediumText('description');相当于 MEDIUMTEXT 类型$table-&morphs('taggable');加入整数&taggable_id&与字串&taggable_type$table-&nullableTimestamps();与&timestamps()&相同,但允许 NULL$table-&smallInteger('votes');相当于 SMALLINT 类型$table-&tinyInteger('numbers');相当于 TINYINT 类型$table-&softDeletes();加入&deleted_at&字段于软删除使用$table-&string('email');相当于 VARCHAR 类型$table-&string('name', 100);相当于 VARCHAR 类型,并指定长度$table-&text('description');相当于 TEXT 类型$table-&time('sunrise');相当于 TIME 类型$table-&timestamp('added_on');相当于 TIMESTAMP 类型$table-&timestamps();加入&created_at&和&updated_at&字段$table-&rememberToken();加入&remember_token&使用 VARCHAR(100) NULL-&nullable()标示此字段允许 NULL-&default($value)声明此字段的默认值-&unsigned()配置整数是无分正负在 MySQL 使用 After 方法若您使用 MySQL 数据库,您可以使用&after&方法来指定字段的顺序:$table-&string('name')-&after('email');修改字段有时候您需要修改一个存在的字段,例如:您可能想增加保存文本字段的长度。通过&change&方法让这件事情变得非常容易!假设我们想要将字段&name&的长度从 25 增加到 50 的时候:Schema::table('users', function($table)
$table-&string('name', 50)-&change();
});另外也能将某个字段修改为允许 NULL:Schema::table('users', function($table)
$table-&string('name', 50)-&nullable()-&change();
});修改字段名称要修改字段名称,可在结构生成器内使用&renameColumn&方法,请确认在修改前composer.json&文件内已经加入doctrine/dbal。Schema::table('users', function($table)
$table-&renameColumn('from', 'to');
});注意:&目前暂时还不支持修改表中的结构为&enum&字段类型。移除字段要移除字段,可在结构生成器内使用&dropColumn&方法,请确认在移除前composer.json&文件内已经加入doctrine/dbal。移除数据表字段Schema::table('users', function($table)
$table-&dropColumn('votes');
});移除数据表多个字段Schema::table('users', function($table)
$table-&dropColumn(array('votes', 'avatar', 'location'));
});检查是否存在检查数据表是否存在您可以轻松的检查数据表或字段是否存在,使用&hasTable&和&hasColumn&方法:if (Schema::hasTable('users'))
}检查字段是否存在if (Schema::hasColumn('users', 'email'))
}加入索引结构生成器支持多种索引类型,有两种方法可以加入,方法一,您可以在定义字段时顺便附加上去,或者是分开另外加入:$table-&string('email')-&unique();或者,您可以独立一行来加入索引,以下是支持的索引类型:命令功能描述$table-&primary('id');加入主键 (primary key)$table-&primary(array('first', 'last'));加入复合键 (composite keys)$table-&unique('email');加入唯一索引 (unique index)$table-&index('state');加入基本索引 (index)外键Laravel 也支持数据表的外键约束:$table-&integer('user_id')-&unsigned();
$table-&foreign('user_id')-&references('id')-&on('users');例子中,我们关注字段&user_id&参照到&users&数据表的&id&字段。请先确认已经建立外键!您也可以指定选择在「on delete」和「on update」进行约束动作:$table-&foreign('user_id')
-&references('id')-&on('users')
-&onDelete('cascade');要移除外键,可使用&dropForeign&方法。外键的命名约定如同其他索引:$table-&dropForeign('posts_user_id_foreign');注意:&当外键有参照到自动增量时,记得配置外键为&unsigned&类型。移除索引要移除索引您必须指定索引名称,Laravel 默认有脉络可循的索引名称。简单地链接这些数据表与索引的字段名称和类型。举例如下:命令功能描述$table-&dropPrimary('users_id_primary');从「users」数据表移除主键$table-&dropUnique('users_email_unique');从「users」数据表移除唯一索引$table-&dropIndex('geo_state_index');从「geo」数据表移除基本索引移除时间戳记和软删除要移除&timestamps、nullableTimestamps&或&softDeletes&字段类型,您可以使用以下方法:命令功能描述$table-&dropTimestamps();移除&created_at&和&updated_at&字段$table-&dropSoftDeletes();移除&deleted_at&字段保存引擎要配置数据表的保存引擎,可在结构生成器配置&engine&属性:Schema::create('users', function($table)
$table-&engine = 'InnoDB';
$table-&string('email');
TA的最新馆藏[转]&
喜欢该文的人也喜欢温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
分享快乐的微音符可以改变世界
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
================================================第一部分:什么是Schema?参考:定义:XML Schema,中文名可扩展标记语言架构,外语所写XSD,也是其扩展名,是以(的子集)为基础的,它用于可替代文档类型定义(:);一份XML schema文件描述了文档的结构。内容:它的作用是定义一份XML文档的合法组件群,就像文档类型定义(:)的作用一样,一份XML Schema定义了可以出现在文档里的元素,可以出现在文档里的属性,哪些元素是子元素,子元素的顺序,子元素的数量,一个元素应是否能包含文本,或应该是空的,元素和属性的,元素和属性的默认值和固定值。优缺点:XML Schema 比 DTD 更强大,支持数据类型,使用 XML 语法,可保护数据通信,可扩展性,可捕获到错误;而缺点语言特别是可能非常冗长,而DTD可以简洁且相对容易编辑。没有实现大部分提供的数据元素到文档的DTD能力简单类型:& & 1.&&xs:element name="xxx" type="yyy"/&定义xml中的元素,name代表名称,type代表类型,类型通常有xs:string,xs:decimal,xs:integer,xs:boolean,xs:date,xs:time& & 2.&&xs:attribute name="xxx" type="yyy"/&定义xml中的属性,name代表属性名称,type代表属性的类型,类型和element类型一样& & 3. &xs:restriction base="xs:integer"/&定义xml的限定,一般写在element之间,例如&xs:element name="age"&
&xs:simpleType&
&xs:restriction base="xs:integer"&
&xs:minInclusive value="0"/&
&xs:maxInclusive value="120"/&
&/xs:restriction&
&/xs:simpleType&
&/xs:element& 第二部分:怎样自动生成Schema如果自己手写Schema会浪费大量时间,耗时耗力不划算,我们介绍一种怎样生成Schema的工具,writexsd是搜集到的比较好用的工具,只需要运行对应的jar包就可以生成,参考/blog/411513,命令如下java -jar trang.jar XXX1.xml XXX2.xsd提供下载地址: &提取码 cd7e
阅读(720)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'怎样根据XML生成Schema的xsd文件',
blogAbstract:'项目中需求,要求定义规则,使用Schema验证XML是否合规。如果我们手写Schema就太多太麻烦了,于是找到这个文件进行生成。================================================第一部分:什么是Schema?参考:'
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}4900人阅读
HIBERNATE(78)
ORACLE(65)
最近在做一个项目,使用Spring+Struts2+JPA(Hibernate)的框架,项目接近尾声,现在要为测试和以后的正式运营开始做准备了。但是突然发现了一个小问题,发现使用MyEclipse自动生成的持久化对象所对应的Schema信息都是直接在类内部使用注解声明的方式来设置的,类似如下的格式@Table(name = &xxx&, schema=&xxx&)。
这样子就带来一个坏处,就是数据库的schema肯定是会有变更需求的,而把schema直接写死在持久化类中,等于每次变化schema的名字都要修改一遍所有的PO对象的注解声明,还要对类进行重新编译,非常麻烦的事情。
想到以前的hibernate也是有分表配置方式和系统统一配置方式的,当然hibernate的配置都是在xml配置文件中,修改都不需要重新编译类文件,相对来说问题不大。但是对于JPA的注解方式就影响太大了。而这次开发也正好使用的Hibernate作为JPA的实现,所以,考虑可以使用Hibernate统一配置方式,给JPA的配置加一个hibernate.default_schema的property属性。
&property name=&hibernate.default_schema& value=&myschema&/&
然后去掉了PO类中的注解,测试一下,一切OK。
使用JPA还是非常方便的,很多时候就是把作为Provider的原框架包的元素变为property的属性就可以了。
要把Provider变为其他的比如Toplink、OpenJPA也同样处理即可。
而使用接口编程的优势,在这里又一次被印证了。
当然,JPA还提供了另外一种方式来定义,就是使用可选的orm.xml文件,可以在该文件中指定默认的schema。
Oralce数据库环境下,有两个Scheme ,如Scheme 1与Scheme 2;并且Scheme 1的user具有DBA权限,能够访问到Scheme 2中的T_CONFIG表(假设T_CONFIG表在Scheme 2中已经存在)。那么在Scheme 1中使用Hibernate的自动创建表T_CONFIG时,可能出现在Scheme 1中不能创建T_CONFIG表的情况。
无意中发现这个问题的,启动项目时,没有正常打印出INFO org.hibernate.tool.hbm2ddl.TableMetadata - foreign keys: [] 日志,本来以为是Hibernate不能自动创建表的原因,于是重新建了个用户,只给予此用户Resouce与connect角色权限,配置好后重启应用发现能够自动创建表(但是还是没看到校验的日志信息);诧异了中看了下Hibernate的源码,发现如果不配置default_schema那么程序将使用默认的Environment.DEFAULT_SCHEMA(从hibernate.properties文件中获取,hibernate.properties没有配置就是null)。
解决方法,如果是用了spring+hibernate配置如下:
&bean name=&hibernateProperties& class=&org.springframework.beans.factory.config.PropertiesFactoryBean&&
&property name=&properties&&
&prop key=&hibernate.default_schema&&${hibernate.default_schema}&/prop&
&!--其他配置--&
&/property&
至于校验信息不能打印出来是由于slf4j两个包冲突了,去掉slf4j-log4j12就可以正常显示了。
如果不想使用Hibernate的自动创建表功能,只要不设置此参数局可以了,spring默认注入此参数是false
&property name=&schemaUpdate& value=&${hibernate.schema_update}&/&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:7217470次
积分:62868
积分:62868
排名:第33名
原创:251篇
转载:2631篇
评论:680条
(4)(46)(92)(17)(25)(37)(63)(7)(74)(67)(95)(177)(113)(86)(40)(43)(71)(14)(10)(17)(12)(6)(20)(27)(54)(71)(97)(74)(32)(2)(24)(21)(62)(60)(36)(23)(27)(46)(34)(76)(63)(121)(141)(74)(54)(120)(77)(42)(4)(12)(19)(1)(9)(15)(19)(18)(16)(31)(79)(68)

我要回帖

更多关于 json 在线生成schema 的文章

 

随机推荐