文章詳情頁(yè)
Eclipse XSD 生成枚舉類型的Schema的實(shí)例詳解
瀏覽:297日期:2022-06-07 11:04:33
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)見(jiàn)參考下面的代碼。
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>");
}
}
如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
標(biāo)簽:
JSP
相關(guān)文章:
1. Eclipse 3.2 M5 提供下載-兼容JSE 6.02. Eclipse集成 Lomboz和JBoss開(kāi)發(fā)J2EE3. Eclipse新建項(xiàng)目不可選擇Java Project問(wèn)題解決方案4. myeclipse創(chuàng)建java項(xiàng)目的方法5. Eclipse3.1+MyEclipse4.0+Lomboz3.1圖解安裝開(kāi)發(fā)JSP6. Java Eclipse中實(shí)現(xiàn)快速替換變量7. Spring JPA配置文件Eclipse報(bào)錯(cuò)如何解決8. Java工作環(huán)境的配置與Eclipse的安裝過(guò)程9. eclipse漢化及jdk安裝環(huán)境配置超詳細(xì)教程(Java安裝教程)10. IDEA入門級(jí)使用教程你居然還在用eclipse?
排行榜

網(wǎng)公網(wǎng)安備