Detailed description of the Schema instance generated by Eclipse XSD for Enumeration type, xsdschema

Source: Internet
Author: User

Detailed description of the Schema instance generated by Eclipse XSD for Enumeration type, xsdschema

Detailed description of the Schema instance generated by Eclipse XSD for Enumeration type

Preface:

Because there are few Chinese documents on Eclipse XSD on the Internet, and the sample code for Eclipse XSD is rare, sometimes we need to generate a simple type XSD Schema with enumeration restrictions, for example, the following format,

<?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"> indicates a simple type with enumeration restrictions. So how should we generate it? See the following code.

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

If you have any questions, please leave a message or go to the community on this site for discussion. Thank you for reading this article. Thank you for your support!

Related Article

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.