虚位以待(AD)
虚位以待(AD)
首页 > 网络编程 > JSP编程 > Eclipse XSD 生成枚举类型的Schema的实例详解

Eclipse XSD 生成枚举类型的Schema的实例详解
类别:JSP编程   作者:码皇   来源:互联网   点击:

这篇文章主要介绍了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>");
    }
    }

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

您可能感兴趣的文章:

  • Eclipse内置浏览器打开方法
  • myeclipse8.5优化技巧详解
  • Eclipse配置springIDE插件的方法步骤
  • tomcat相关配置与eclipse集成_动力节点Java学院整理
  • myeclipse开发servlet_动力节点Java学院整理
  • Eclipse查看开发包jar里源代码的方法
相关热词搜索: Eclipse XSD Eclipse XSD 枚举的生成 Ecli