Eclipse XSD 生成枚举类型的Schema的实例详解
eclipse xsd 生成枚举类型的schema的实例详解
前言:
因为网上关于eclipse xsd的中文资料比较少,而且关于eclipse xsd的范例代码也凤毛麟角,但是有的时候我们需要生成一个带枚举限定的简单类型的xsd schema,比如下面的格式,
<?xml version="1.0" encoding="utf-8"?><schema xmlns="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.w3.org/2001/xmlschema">
<complextype name="studenttype">
<sequence>
<element maxoccurs="1" minoccurs="1" name="username" type="string"/>
<element maxoccurs="1" minoccurs="1" name="password" type="string"/>
<element maxoccurs="1" minoccurs="1" name="alignment" type="alignmenttype"/>
</sequence>
</complextype>
<simpletype name="alignmenttype">
<restriction base="string">
<enumeration value="right"/>
<enumeration value="middle"/>
<enumeration value="left"/>
</restriction>
</simpletype>
<element name="student" type="studenttype"/>
</schema>
其中, <simpletype name="alignmenttype"> 代表的就是一个带枚举限定的简单类型。那么应该如何生成呢?请见参考下面的代码。
import org.eclipse.xsd.xsdcomplextypedefinition;
import org.eclipse.xsd.xsdcompositor;
import org.eclipse.xsd.xsdelementdeclaration;
import org.eclipse.xsd.xsdenumerationfacet;
import org.eclipse.xsd.xsdfactory;
import org.eclipse.xsd.xsdimport;
import org.eclipse.xsd.xsdinclude;
import org.eclipse.xsd.xsdmodelgroup;
import org.eclipse.xsd.xsdparticle;
import org.eclipse.xsd.xsdredefine;
import org.eclipse.xsd.xsdschema;
import org.eclipse.xsd.xsdschemadirective;
import org.eclipse.xsd.xsdsimpletypedefinition;
import org.eclipse.xsd.util.xsdresourceimpl;
import org.eclipse.xsd.util.xsdutil;
import org.junit.test;
import org.w3c.dom.element;
public class enumfacettest {
protected static xsdfactory xsdfactory = xsdfactory.einstance;
private void createaligementelement(xsdsimpletypedefinition aligmenttype){
string[] cellaligements={"right","middle","left"};
for(int i=0;i<cellaligements.length;i++){
xsdenumerationfacet alenum=xsdfactory.einstance.createxsdenumerationfacet();
alenum.setlexicalvalue(cellaligements[i]);
//aligmenttype.getfacets().add(alenum);
aligmenttype.getfacetcontents().add(alenum);
}
}
/**
<?xml version="1.0" encoding="utf-8"?><schema xmlns="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.w3.org/2001/xmlschema">
<complextype name="studenttype">
<sequence>
<element maxoccurs="1" minoccurs="1" name="username" type="string"/>
<element maxoccurs="1" minoccurs="1" name="password" type="string"/>
<element maxoccurs="1" minoccurs="1" name="alignment" type="alignmenttype"/>
</sequence>
</complextype>
<simpletype name="alignmenttype">
<restriction base="string">
<enumeration value="right"/>
<enumeration value="middle"/>
<enumeration value="left"/>
</restriction>
</simpletype>
<element name="student" type="studenttype"/>
</schema>
*/
@test
public void enumfacettest() {
string targenamespace="http://www.w3.org/2001/xmlschema";
xsdschema xsdschema=xsdfactory.createxsdschema();
xsdschema.settargetnamespace(targenamespace);
xsdschema.getqnameprefixtonamespacemap().put(null, "http://www.w3.org/2001/xmlschema");
//1.1 create complex type:student
xsdcomplextypedefinition complextypedef = xsdfactory.createxsdcomplextypedefinition();
complextypedef.settargetnamespace(xsdschema.gettargetnamespace());
complextypedef.setname("studenttype");
xsdparticle xsdparticle=xsdfactory.createxsdparticle();
xsdmodelgroup xsdmodulegroup=xsdfactory.createxsdmodelgroup();
xsdmodulegroup.setcompositor(xsdcompositor.sequence_literal);
xsdparticle.setcontent(xsdmodulegroup);
complextypedef.setcontent(xsdparticle);
complextypedef.setcontenttype(xsdparticle);
xsdschema.getcontents().add(complextypedef);
//1.2 add element for complex type
//1.2.1 username element
xsdparticle localxsdparticle = xsdfactory.createxsdparticle();
localxsdparticle.setminoccurs(1);
localxsdparticle.setmaxoccurs(1);
xsdelementdeclaration localxsdelementdeclaration = xsdfactory.createxsdelementdeclaration();
localxsdelementdeclaration.settargetnamespace(targenamespace);
localxsdelementdeclaration.setname("username");
xsdschema localxsdschema = xsdutil.getschemaforschema("http://www.w3.org/2001/xmlschema");
xsdsimpletypedefinition localsimpletype=localxsdschema.resolvesimpletypedefinition("string");
localxsdelementdeclaration.settypedefinition(localsimpletype);
localxsdparticle.setcontent(localxsdelementdeclaration);
xsdmodulegroup.getcontents().add(localxsdparticle);
//1.2.2 password element
localxsdparticle = xsdfactory.createxsdparticle();
localxsdparticle.setminoccurs(1);
localxsdparticle.setmaxoccurs(1);
localxsdelementdeclaration = xsdfactory.createxsdelementdeclaration();
localxsdelementdeclaration.settargetnamespace(targenamespace);
localxsdelementdeclaration.setname("password");
localxsdschema = xsdutil.getschemaforschema("http://www.w3.org/2001/xmlschema");
localsimpletype=localxsdschema.resolvesimpletypedefinition("string");
localxsdelementdeclaration.settypedefinition(localsimpletype);
localxsdparticle.setcontent(localxsdelementdeclaration);
xsdmodulegroup.getcontents().add(localxsdparticle);
//1.2.3.1 create simple type with xsdenumerationfacet---------------
xsdsimpletypedefinition xsdsimpletypedefinition = xsdfactory.einstance.createxsdsimpletypedefinition();
xsdsimpletypedefinition basetypedefinition = xsdschema.resolvesimpletypedefinitionuri("string");
xsdsimpletypedefinition.setbasetypedefinition(basetypedefinition);
xsdsimpletypedefinition.setname("alignmenttype");
createaligementelement(xsdsimpletypedefinition);
xsdschema.getcontents().add(xsdsimpletypedefinition);
//1.2.3.2 create element with simple type --------------
localxsdparticle = xsdfactory.createxsdparticle();
localxsdparticle.setminoccurs(1);
localxsdparticle.setmaxoccurs(1);
localxsdelementdeclaration = xsdfactory.createxsdelementdeclaration();
localxsdelementdeclaration.settargetnamespace(targenamespace);
localxsdelementdeclaration.setname("alignment");
localxsdschema = xsdutil.getschemaforschema("http://www.w3.org/2001/xmlschema");
localxsdelementdeclaration.settypedefinition(xsdsimpletypedefinition);
localxsdparticle.setcontent(localxsdelementdeclaration);
xsdmodulegroup.getcontents().add(localxsdparticle);
//2.create xsdelementdeclaration and attached complex type to xsd element
xsdelementdeclaration xsdeelement=xsdfactory.createxsdelementdeclaration();
xsdeelement.setname("student");
xsdeelement.settypedefinition(complextypedef);
xsdschema.getcontents().add(xsdeelement);
//3.print schema
schemaprintservice.printschema(xsdschema);
}
}
class schemaprintservice {
/**
* print schema to console
*
* @param xsdschema
*/
public static void printschema(xsdschema xsdschema) {
system.out.println("<!-- ===== schema composition =====");
printdirectives(" ", xsdschema);
system.out.println("-->");
system.out
.println("<!-- [ " + xsdschema.getschemalocation() + " ] -->");
xsdschema.updateelement();
element element = xsdschema.getelement();
if (element != null) {
// print the serialization of the model.
xsdresourceimpl.serialize(system.out, element);
}
}
private static void printschemastart(xsdschema xsdschema) {
system.out.print("<schema targetnamespace=\"");
if (xsdschema.gettargetnamespace() != null) {
system.out.print(xsdschema.gettargetnamespace());
}
system.out.print("\" schemalocation=\"");
if (xsdschema.getschemalocation() != null) {
system.out.print(xsdschema.getschemalocation());
}
system.out.print("\">");
}
private static void printdirectives(string indent, xsdschema xsdschema) {
system.out.print(indent);
printschemastart(xsdschema);
system.out.println();
if (!xsdschema.getreferencingdirectives().isempty()) {
system.out.println(indent + " <referencingdirectives>");
for (xsdschemadirective xsdschemadirective : xsdschema
.getreferencingdirectives()) {
xsdschema referencingschema = xsdschemadirective.getschema();
system.out.print(indent + " ");
printschemastart(referencingschema);
system.out.println();
system.out.print(indent + " ");
if (xsdschemadirective instanceof xsdimport) {
xsdimport xsdimport = (xsdimport) xsdschemadirective;
system.out.print("<import namespace=\"");
if (xsdimport.getnamespace() != null) {
system.out.print(xsdimport.getnamespace());
}
system.out.print("\" schemalocation=\"");
} else if (xsdschemadirective instanceof xsdredefine) {
system.out.print("<redefine schemalocation=\"");
} else if (xsdschemadirective instanceof xsdinclude) {
system.out.print("<include schemalocation=\"");
}
if (xsdschemadirective.getschemalocation() != null) {
system.out.print(xsdschemadirective.getschemalocation());
}
system.out.println("\"/>");
system.out.println(indent + " </schema>");
}
system.out.println(indent + " </referencingdirectives>");
}
if (!xsdschema.getincorporatedversions().isempty()) {
system.out.println(indent + " <incorporatedversions>");
for (xsdschema incorporatedversion : xsdschema
.getincorporatedversions()) {
printdirectives(indent + " ", incorporatedversion);
}
system.out.println(indent + " </incorporatedversions>");
}
system.out.println(indent + "</schema>");
}
}
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
相关文章
- jsp+servlet实现文件上传与下载功能
- EJB3.0部署消息驱动Bean抛javax.naming.NameNotFoundException异常
- 在JSP中使用formatNumber控制要显示的小数位数方法
- 秒杀系统Web层设计的实现方法
- 将properties文件的配置设置为整个Web应用的全局变量实现方法
- JSP使用过滤器防止Xss漏洞
- 在JSP页面中动态生成图片验证码的方法实例
- 详解JSP 内置对象request常见用法
- 使用IDEA编写jsp时EL表达式不起作用的问题及解决方法
- jsp实现局部刷新页面、异步加载页面的方法
- Jsp中request的3个基础实践
- JavaServlet的文件上传和下载实现方法
- JSP页面的静态包含和动态包含使用方法


