• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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;icellAligements.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里源代码的方法
    上一篇:详解Struts2中对未登录jsp页面实现拦截功能
    下一篇:Struts2获取参数的三种方法总结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Eclipse XSD 生成枚举类型的Schema的实例详解 Eclipse,XSD,生成,枚举,类型,