国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JSP > 正文

Eclipse XSD 生成枚舉類型的Schema的實(shí)例詳解

2020-07-27 21:20:07
字體:
供稿:網(wǎng)友

Eclipse XSD 生成枚舉類型的Schema的實(shí)例詳解

前言:

因?yàn)榫W(wǎng)上關(guān)于Eclipse XSD的中文資料比較少,而且關(guān)于Eclipse XSD的范例代碼也鳳毛麟角,但是有的時(shí)候我們需要生成一個(gè)帶枚舉限定的簡(jiǎn)單類型的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"> 代表的就是一個(gè)帶枚舉限定的簡(jiǎn)單類型。那么應(yīng)該如何生成呢?請(qǐng)見參考下面的代碼。

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>");   }  } 

如有疑問請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 苏尼特右旗| 武安市| 达州市| 灵川县| 大连市| 苏尼特左旗| 敖汉旗| 大同市| 临夏市| 白河县| 乳山市| 罗城| 栖霞市| 改则县| 元氏县| 米脂县| 永昌县| 贵港市| 玛纳斯县| 双柏县| 抚远县| 绥宁县| 林口县| 通江县| 黎平县| 利津县| 峡江县| 自治县| 乐昌市| 嘉禾县| 金坛市| 卢龙县| 北流市| 沛县| 昭觉县| 讷河市| 黄浦区| 西峡县| 陆丰市| 惠水县| 分宜县|