Eclipse XSD 生成枚举类型的Schema的实例详解
发布时间 - 2026-01-11 03:29:22 点击率:次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>");
}
}
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# Eclipse
# XSD
# 枚举的生成
# 生成枚举类型的Schema
# Eclipse内置浏览器打开方法
# myeclipse8.5优化技巧详解
# Eclipse配置springIDE插件的方法步骤
# tomcat相关配置与eclipse集成_动力节点Java学院整理
# myeclipse开发servlet_动力节点Java学院整理
# Eclipse查看开发包jar里源代码的方法
# 如有
# 凤毛麟角
# 希望能
# 谢谢大家
# 比较少
# 请见
# 疑问请
# 网上
# XSDParticle
# XSDModelGroup
# XSDFactory
# XSDImport
# XSDInclude
# XSDSchemaDirective
# XSDSimpleTypeDefinition
# util
# XSDRedefine
# XSDSchema
# import
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
文字头像制作网站推荐软件,醒图能自动配文字吗?
Laravel如何配置任务调度?(Cron Job示例)
如何快速查询网站的真实建站时间?
如何在阿里云香港服务器快速搭建网站?
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
详解Android图表 MPAndroidChart折线图
Java解压缩zip - 解压缩多个文件或文件夹实例
Mybatis 中的insertOrUpdate操作
Java类加载基本过程详细介绍
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
JavaScript如何实现倒计时_时间函数如何精确控制
无锡营销型网站制作公司,无锡网选车牌流程?
如何用wdcp快速搭建高效网站?
制作旅游网站html,怎样注册旅游网站?
如何在万网开始建站?分步指南解析
宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法
Laravel如何处理和验证JSON类型的数据库字段
网站制作大概多少钱一个,做一个平台网站大概多少钱?
如何在云指建站中生成FTP站点?
EditPlus中的正则表达式 实战(1)
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
微信小程序 配置文件详细介绍
如何在景安云服务器上绑定域名并配置虚拟主机?
如何用y主机助手快速搭建网站?
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
利用vue写todolist单页应用
如何做网站制作流程,*游戏网站怎么搭建?
如何在沈阳梯子盘古建站优化SEO排名与功能模块?
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
bootstrap日历插件datetimepicker使用方法
Python企业级消息系统教程_KafkaRabbitMQ高并发应用
再谈Python中的字符串与字符编码(推荐)
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何在局域网内绑定自建网站域名?
微信小程序 require机制详解及实例代码
JavaScript常见的五种数组去重的方式
网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?
免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?
Laravel如何构建RESTful API_Laravel标准化API接口开发指南
如何快速完成中国万网建站详细流程?
高防服务器租用如何选择配置与防御等级?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?
微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】
Laravel中间件如何使用_Laravel自定义中间件实现权限控制
如何解决hover在ie6中的兼容性问题
企业网站制作这些问题要关注
利用python获取某年中每个月的第一天和最后一天
Laravel怎么清理缓存_Laravel optimize clear命令详解

