|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.eclipse.xsd.util.XSDPrototypicalSchema
public class XSDPrototypicalSchema
The Sample Code to construct
the Purchase Order Schema
and the Prototype Schema
using the concrete APIs.
Additional examples include:
saving
the Purchase Order Schema to a URI,
printing a schema
loaded from a URI,
printing a component's element
using Xerces,
creating
a schema from an element,
tracing
a resource set's loading behavior when loading a URI
cloning
a component.
cross referencing
.
Field Summary | |
---|---|
protected static XSDPrototypicalSchema |
instance
The one static instance. |
XSDSchema |
prototypeSchema
The Prototype Schema . |
XSDSchema |
purchaseOrderSchema
The Purchase Order Schema . |
protected java.lang.String |
someOtherSchemaURI
The value "http://www.example.com/SomeOtherSchema" . |
XSDFactory |
xsdFactory
A cached XSDFactory. |
Constructor Summary | |
---|---|
XSDPrototypicalSchema()
Create the Prototype Schema and the Purchase Order Schema . |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
protected static XSDPrototypicalSchema instance
public XSDFactory xsdFactory
public XSDSchema prototypeSchema
Prototype Schema
.
public XSDSchema purchaseOrderSchema
Purchase Order Schema
.
protected java.lang.String someOtherSchemaURI
"http://www.example.com/SomeOtherSchema"
.
Constructor Detail |
---|
public XSDPrototypicalSchema()
Prototype Schema
and the Purchase Order Schema
.
Method Detail |
---|
public static XSDPrototypicalSchema getInstance()
public static XSDSchema getPrototypicalSchema()
Prototype Schema
instance.
public static XSDSchema getPurchaseOrderSchema()
Purchase Order Schema
instance.
public XSDSchema initializePrototypeSchema()
{ // Create the schema, give it a target namespace, and set its form defaults. // prototypeSchema = xsdFactory.createXSDSchema
(); prototypeSchema.setTargetNamespace
("http://www.example.com/PrototypicalSchema"); prototypeSchema.setElementFormDefault
(XSDForm.QUALIFIED_LITERAL); prototypeSchema.setAttributeFormDefault
(XSDForm.QUALIFIED_LITERAL); // If you want schema tags and references to schema types to be qualified, // which is recommend, this is the recommended qualifier. // prototypeSchema.setSchemaForSchemaQNamePrefix
("xsd"); // Choose the prefix used for this schema's namespace, // theschema for schema
's namespace, // and some other imported namespace. // Map qNamePrefixToNamespaceMap = prototypeSchema.getQNamePrefixToNamespaceMap
(); qNamePrefixToNamespaceMap.put("PTS", prototypeSchema.getTargetNamespace()); qNamePrefixToNamespaceMap.put(prototypeSchema.getSchemaForSchemaQNamePrefix(),XSDConstants
.SCHEMA_FOR_SCHEMA_URI_2001); qNamePrefixToNamespaceMap.put("EXT",someOtherSchemaURI
); // Initialize the other parts of this examples. //initializeSomeOtherImport()
;initializeSimpleAttributeGroupDefinition()
;initializeSimpleRecursiveModelGroupDefinition()
;initializeSimpleRecursiveComplexTypeDefinition()
;initializeSimpleRecursiveElementDeclaration()
;initializeSimpleAttributeDeclaration()
;initializeSimpleElementDeclarationWithAnonymousType()
;initializeSimpleTypeDefinition()
;initializeSimpleListTypeDefinition()
;initializeSimpleUnionTypeDefinition()
;initializeFancyListTypeDefinition()
;initializeSimpleContentComplexTypeDefinition()
; // This is the result that is produced. // // <?xml version="1.0" encoding="UTF-8"?> // <xsd:schema attributeFormDefault="qualified" // elementFormDefault="qualified" // targetNamespace="http://www.example.com/PrototypicalSchema" // xmlns:EXT="http://www.example.com/SomeOtherSchema" // xmlns:PTS="http://www.example.com/PrototypicalSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> // <xsd:import namespace="http://www.example.com/SomeOtherSchema" schemaLocation="http://www.example.com/SomeOtherSchema"/> // <xsd:attributeGroup name="simpleAttributeGroupDefinition"> // <xsd:attribute default="defaultValue" // name="simpleAttributeDeclarationGroupMember" type="EXT:someOtherTypeDefinition"/> // </xsd:attributeGroup> // <xsd:group name="simpleRecursiveModelGroupDefinition"> // <xsd:annotation/> // <xsd:sequence> // <xsd:element maxOccurs="unbounded" minOccurs="0" ref="PTS:simpleRecursiveElementDeclaration"/> // <xsd:any namespace="##other" processContents="lax"/> // </xsd:sequence> // </xsd:group> // <xsd:complexType abstract="false" block="#all" final="#all" // mixed="true" name="SimpleRecursiveComplexTypeDefinition"> // <xsd:annotation> // <xsd:appinfo source="http://www.example.com/appinfo"/> // <xsd:documentation // source="http://www.example.com/documentation">A simple // recursive complex type definition.</xsd:documentation> // </xsd:annotation> // <xsd:group ref="PTS:simpleRecursiveModelGroupDefinition"/> // <xsd:attribute ref="PTS:simpleAttributeDeclaration" use="optional"/> // <xsd:attributeGroup ref="PTS:simpleAttributeGroupDefinition"/> // <xsd:anyAttribute namespace="##other"/> // </xsd:complexType> // <xsd:element name="simpleRecursiveElementDeclaration" type="PTS:SimpleRecursiveComplexTypeDefinition"> // <xsd:annotation/> // <xsd:unique name="unique"> // <xsd:selector xpath="simpleRecursiveElementDeclaration"/> // <xsd:field xpath="simpleAttributeDeclarationGroupMember"/> // </xsd:unique> // <xsd:key name="key"> // <xsd:selector xpath="simpleRecursiveElementDeclaration"/> // <xsd:field xpath="simpleAttributeDeclarationGroupMember"/> // </xsd:key> // <xsd:keyref name="keyref" refer="PTS:key"> // <xsd:selector xpath="simpleRecursiveElementDeclaration"/> // <xsd:field xpath="simpleAttributeDeclaration"/> // </xsd:keyref> // </xsd:element> // <xsd:attribute default="defaultValue" // name="simpleAttributeDeclaration" type="EXT:someOtherTypeDefinition"/> // <xsd:element fixed="12ab" name="simpleElementWithAnonymousType"> // <xsd:annotation/> // <xsd:simpleType> // <xsd:restriction base="xsd:string"> // <xsd:pattern value="\d\d.."/> // </xsd:restriction> // </xsd:simpleType> // </xsd:element> // <xsd:simpleType name="SimpleTypeDefinition"> // <xsd:annotation/> // <xsd:restriction base="xsd:positiveInteger"> // <xsd:maxInclusive value="100"/> // </xsd:restriction> // </xsd:simpleType> // <xsd:simpleType name="SimpleListTypeDefinition"> // <xsd:annotation/> // <xsd:list itemType="xsd:integer"/> // </xsd:simpleType> // <xsd:simpleType name="SimpleUnionTypeDefinition"> // <xsd:annotation/> // <xsd:union memberTypes="xsd:integer"/> // </xsd:simpleType> // <xsd:simpleType name="FancyListTypeDefinition"> // <xsd:restriction> // <xsd:simpleType> // <xsd:list> // <xsd:simpleType> // <xsd:union> // <xsd:simpleType> // <xsd:restriction base="xsd:string"> // <xsd:enumeration value="unknown"/> // </xsd:restriction> // </xsd:simpleType> // <xsd:simpleType> // <xsd:restriction base="xsd:decimal"> // <xsd:fractionDigits value="2"/> // </xsd:restriction> // </xsd:simpleType> // </xsd:union> // </xsd:simpleType> // </xsd:list> // </xsd:simpleType> // <xsd:maxLength value="4"/> // </xsd:restriction> // </xsd:simpleType> // <xsd:complexType name="SimpleContentComplexTypeDefinition"> // <xsd:annotation/> // <xsd:simpleContent> // <xsd:extension base="xsd:string"> // <xsd:attribute ref="PTS:simpleAttributeDeclaration" use="optional"/> // </xsd:extension> // </xsd:simpleContent> // </xsd:complexType> // </xsd:schema> return prototypeSchema; }
public void initializeSomeOtherImport()
{ // Create an import and set its namespace and schema location. // XSDImport someOtherImport = xsdFactory.createXSDImport
(); someOtherImport.setNamespace
(someOtherSchemaURI
); someOtherImport.setSchemaLocation
(someOtherSchemaURI); // Add the import to the schema contents. // prototypeSchema.getContents
().add(someOtherImport); // This is the result that is produced. // // <xsd:import namespace="http://www.example.com/SomeOtherSchema" schemaLocation="http://www.example.com/SomeOtherSchema"/> }
public void initializeSimpleAttributeGroupDefinition()
{ // Create an attribute group definition and set it's name to simpleAttributeGroupDefinition. //XSDAttributeGroupDefinition
simpleAttributeGroupDefinition = xsdFactory.createXSDAttributeGroupDefinition(); simpleAttributeGroupDefinition.setName
("simpleAttributeGroupDefinition"); // Create an attribute, name it simpleAttributeDeclarationGroupMember, // set it's type to someOtherTypeDefinition in some other schema. // set its constraints to be default, set the lexical value of the constraint to be "defaultValue". //XSDAttributeDeclaration
simpleAttributeDeclarationGroupMember = xsdFactory.createXSDAttributeDeclaration(); simpleAttributeDeclarationGroupMember.setName
("simpleAttributeDeclarationGroupMember"); simpleAttributeDeclarationGroupMember.setTypeDefinition
(prototypeSchema.resolveSimpleTypeDefinition
(someOtherSchemaURI
, "someOtherTypeDefinition")); // Create an attribute use to contain the attribute and add it the attribute group. //XSDAttributeUse
simpleAttributeUseGroupMember = xsdFactory.createXSDAttributeUse(); simpleAttributeUseGroupMember.setContent
(simpleAttributeDeclarationGroupMember); simpleAttributeUseGroupMember.setConstraint
(XSDConstraint
.DEFAULT_LITERAL); simpleAttributeUseGroupMember.setLexicalValue
("defaultValue"); simpleAttributeGroupDefinition.getContents
().add(simpleAttributeUseGroupMember); // Add the attribute group to the schema. // prototypeSchema.getContents
().add(simpleAttributeGroupDefinition); // This is the result that is produced. // // <xsd:attributeGroup name="simpleAttributeGroupDefinition"> // <xsd:attribute default="defaultValue" // name="simpleAttributeDeclarationGroupMember" type="EXT:someOtherTypeDefinition"/> // </xsd:attributeGroup> }
public void initializeSimpleRecursiveModelGroupDefinition()
{ // Create a model group definition and name it simpleRecursiveModelGroupDefinition. //XSDModelGroupDefinition
simpleRecursiveModelGroupDefinition = xsdFactory.createXSDModelGroupDefinition(); simpleRecursiveModelGroupDefinition.setName
("simpleRecursiveModelGroupDefinition"); // Create an annotation placeholder and add it to the model group definition. // XSDAnnotation annotation = xsdFactory.createXSDAnnotation(); simpleRecursiveModelGroupDefinition.setAnnotation(annotation); // Create a sequence model group. //XSDModelGroup
modelGroup = xsdFactory.createXSDModelGroup(); modelGroup.setCompositor
(XSDCompositor.SEQUENCE_LITERAL); // Create an element reference to the simpleRecursiveElementDeclaration of this schema. //XSDElementDeclaration
simpleRecursiveElementDeclarationReference = xsdFactory.createXSDElementDeclaration(); simpleRecursiveElementDeclarationReference.setResolvedElementDeclaration
(prototypeSchema.resolveElementDeclaration
("simpleRecursiveElementDeclaration")); // Create a particle to hold the element and set it to be optional and unbounded. //XSDParticle
simpleRecursiveElementParticle = xsdFactory.createXSDParticle(); simpleRecursiveElementParticle.setContent
(simpleRecursiveElementDeclarationReference); simpleRecursiveElementParticle.setMinOccurs
(0); simpleRecursiveElementParticle.setMaxOccurs
(-1); // Add the element particle to the model group. // modelGroup.getContents
().add(simpleRecursiveElementParticle); // Create an element wildcard, set the namespace constraint to be other, and the processing to be lax. //XSDWildcard
elementWildcard = xsdFactory.createXSDWildcard(); elementWildcard.getLexicalNamespaceConstraint
().add("##other"); elementWildcard.setProcessContents
(XSDProcessContents.LAX_LITERAL); // Create a particle to hold the wildcard. // XSDParticle wildcardParticle = xsdFactory.createXSDParticle(); wildcardParticle.setContent(elementWildcard); // Add the wildcard particle to the model group. // modelGroup.getContents().add(wildcardParticle); // Set the model group to be that of the simpleRecursiveModelGroupDefinition. // simpleRecursiveModelGroupDefinition.setModelGroup
(modelGroup); // Add simpleRecursiveModelGroupDefinition to the schema. // prototypeSchema.getContents
().add(simpleRecursiveModelGroupDefinition); // This is the result that is produced. // // <xsd:group name="simpleRecursiveModelGroupDefinition"> // <xsd:annotation/> // <xsd:sequence> // <xsd:element maxOccurs="unbounded" minOccurs="0" ref="PTS:simpleRecursiveElementDeclaration"/> // <xsd:any namespace="##other" processContents="lax"/> // </xsd:sequence> // </xsd:group> }
public void initializeSimpleRecursiveComplexTypeDefinition()
{ // Create a complex type definition and set its name to SimpleRecursiveComplexTypeDefinition. // Set the complex type to be abstract, block all substitution, make it final in all regards, // set it to be a restriction, and set it's content type to be mixed. //XSDComplexTypeDefinition
simpleRecursiveComplexTypeDefinition = xsdFactory.createXSDComplexTypeDefinition(); simpleRecursiveComplexTypeDefinition.setName
("SimpleRecursiveComplexTypeDefinition"); simpleRecursiveComplexTypeDefinition.setAbstract
(false); simpleRecursiveComplexTypeDefinition.getBlock
().add(XSDProhibitedSubstitutions
.ALL_LITERAL); simpleRecursiveComplexTypeDefinition.getLexicalFinal
().add(XSDComplexFinal
.ALL_LITERAL); simpleRecursiveComplexTypeDefinition.setDerivationMethod
(XSDDerivationMethod
.RESTRICTION_LITERAL); simpleRecursiveComplexTypeDefinition.setMixed
(true); // Create an annotation placeholder and add it to the complex type //XSDAnnotation
annotation = xsdFactory.createXSDAnnotation(); simpleRecursiveComplexTypeDefinition.setAnnotation
(annotation); // Create a model group definition reference to simpleRecursiveModelGroupDefinition. // Also create particle to hold it and set the particle to be the content of the complex type. //XSDModelGroupDefinition
simpleRecursiveModelGroupDefinitionReference = xsdFactory.createXSDModelGroupDefinition(); simpleRecursiveModelGroupDefinitionReference.setResolvedModelGroupDefinition
(prototypeSchema.resolveModelGroupDefinition
("simpleRecursiveModelGroupDefinition"));XSDParticle
modelGroupParticle = xsdFactory.createXSDParticle(); modelGroupParticle.setContent
(simpleRecursiveModelGroupDefinitionReference); simpleRecursiveComplexTypeDefinition.setContent
(modelGroupParticle); // Create an attribute reference to simpleAttributeDeclaration. // Also create an attribute use to hold it, set the use to be optional, // and add it to the complex type's attribute contents. //XSDAttributeDeclaration
simpleAttributeDeclarationReference = xsdFactory.createXSDAttributeDeclaration(); simpleAttributeDeclarationReference.setResolvedAttributeDeclaration
(prototypeSchema.resolveAttributeDeclaration
("simpleAttributeDeclaration"));XSDAttributeUse
simpleAttributeUse = xsdFactory.createXSDAttributeUse(); simpleAttributeUse.setContent
(simpleAttributeDeclarationReference); simpleAttributeUse.setUse
(XSDAttributeUseCategory
.OPTIONAL_LITERAL); simpleRecursiveComplexTypeDefinition.getAttributeContents
().add(simpleAttributeUse); // Create an attribute group reference to simpleAttributeGroupDefinition. // And add it to the complex type's attribute contents. //XSDAttributeGroupDefinition
simpleAttributeGroupDefinitionReference = xsdFactory.createXSDAttributeGroupDefinition(); simpleAttributeGroupDefinitionReference.setResolvedAttributeGroupDefinition
(prototypeSchema.resolveAttributeGroupDefinition
("simpleAttributeGroupDefinition")); simpleRecursiveComplexTypeDefinition.getAttributeContents().add(simpleAttributeGroupDefinitionReference); // Create an attribute wildcard and set its constraint to other. // Also add it as the complex type's attribute wildcard. //XSDWildcard
attributeWildcard = xsdFactory.createXSDWildcard(); attributeWildcard.getLexicalNamespaceConstraint
().add("##other"); simpleRecursiveComplexTypeDefinition.setAttributeWildcardContent
(attributeWildcard); prototypeSchema.getContents().add(simpleRecursiveComplexTypeDefinition); // Create an appinfo DOM element with the given sourceURI attribute. // Also add the element as the annotation's child. // NOTE // Working with the contents of an annotation requires dropping down into the DOM model. // This imposes the additional requirement that the annotation must beattached
to a schema. // It also has the effect of callingXSDConcreteComponent.updateElement()
, // if the schema does not have anelement
ordocument
yet. //Element
appinfo = annotation.createApplicationInformation
("http://www.example.com/appinfo"); annotation.getElement
().appendChild
(appinfo); // Create a documentation DOM element with the given sourceURI attribute. // Also add the element as the annotation's child. // Element documentation = annotation.createUserInformation
("http://www.example.com/documentation"); annotation.getElement().appendChild(documentation); documentation.appendChild
(documentation.getOwnerDocument().createTextNode ("A simple recursive complex type definition.")); // This is the result that is produced. // // <xsd:complexType abstract="false" block="#all" final="#all" // mixed="true" name="SimpleRecursiveComplexTypeDefinition"> // <xsd:annotation> // <xsd:appinfo source="http://www.example.com/appinfo"/> // <xsd:documentation // source="http://www.example.com/documentation">A simple // recursive complex type definition.</xsd:documentation> // </xsd:annotation> // <xsd:group ref="PTS:simpleRecursiveModelGroupDefinition"/> // <xsd:attribute ref="PTS:simpleAttributeDeclaration" use="optional"/> // <xsd:attributeGroup ref="PTS:simpleAttributeGroupDefinition"/> // <xsd:anyAttribute namespace="##other"/> // </xsd:complexType> }
public void initializeSimpleRecursiveElementDeclaration()
{ // Create an element declaration and name it simpleRecursiveElementDeclaration. //XSDElementDeclaration
simpleRecursiveElementDeclaration = xsdFactory.createXSDElementDeclaration(); simpleRecursiveElementDeclaration.setName
("simpleRecursiveElementDeclaration"); // Create an annotation placeholder and set it to the element. //XSDAnnotation
annotation = xsdFactory.createXSDAnnotation(); simpleRecursiveElementDeclaration.setAnnotation
(annotation); // Set the element type definition to complex SimpleRecursiveComplexTypeDefinition from this schema. // simpleRecursiveElementDeclaration.setTypeDefinition
(prototypeSchema.resolveComplexTypeDefinition
("SimpleRecursiveComplexTypeDefinition")); // Create a unique identity constraint called unique. // XSDIdentityConstraintDefinition unique = xsdFactory.createXSDIdentityConstraintDefinition
(); unique.setIdentityConstraintCategory
(XSDIdentityConstraintCategory
.UNIQUE_LITERAL); unique.setName("unique"); XSDXPathDefinition uniqueSelector = xsdFactory.createXSDXPathDefinition
(); uniqueSelector.setVariety
(XSDXPathVariety
.SELECTOR_LITERAL); uniqueSelector.setValue
("simpleRecursiveElementDeclaration"); unique.setSelector
(uniqueSelector); XSDXPathDefinition uniqueField = xsdFactory.createXSDXPathDefinition(); uniqueField.setVariety(XSDXPathVariety.FIELD_LITERAL); uniqueField.setValue("simpleAttributeDeclarationGroupMember"); unique.getFields
().add(uniqueField); simpleRecursiveElementDeclaration.getIdentityConstraintDefinitions
().add(unique); // Create a key identity constraint called key. // XSDIdentityConstraintDefinition key = xsdFactory.createXSDIdentityConstraintDefinition(); key.setIdentityConstraintCategory(XSDIdentityConstraintCategory.KEY_LITERAL); key.setName("key"); XSDXPathDefinition keySelector = xsdFactory.createXSDXPathDefinition(); keySelector.setVariety(XSDXPathVariety.SELECTOR_LITERAL); keySelector.setValue("simpleRecursiveElementDeclaration"); key.setSelector(keySelector); XSDXPathDefinition keyField = xsdFactory.createXSDXPathDefinition(); keyField.setVariety(XSDXPathVariety.FIELD_LITERAL); keyField.setValue("simpleAttributeDeclarationGroupMember"); key.getFields().add(keyField); simpleRecursiveElementDeclaration.getIdentityConstraintDefinitions().add(key); // Create a keyref identity constraint called keyref that references key. // XSDIdentityConstraintDefinition keyref = xsdFactory.createXSDIdentityConstraintDefinition(); keyref.setIdentityConstraintCategory(XSDIdentityConstraintCategory.KEYREF_LITERAL); keyref.setName("keyref"); XSDXPathDefinition keyrefSelector = xsdFactory.createXSDXPathDefinition(); keyrefSelector.setVariety(XSDXPathVariety.SELECTOR_LITERAL); keyrefSelector.setValue("simpleRecursiveElementDeclaration"); keyref.setSelector(keyrefSelector); XSDXPathDefinition keyrefField = xsdFactory.createXSDXPathDefinition(); keyrefField.setVariety(XSDXPathVariety.FIELD_LITERAL); keyrefField.setValue("simpleAttributeDeclaration"); keyref.setReferencedKey
(key); keyref.getFields().add(keyrefField); simpleRecursiveElementDeclaration.getIdentityConstraintDefinitions().add(keyref); // Add the element to the schema. // prototypeSchema.getContents
().add(simpleRecursiveElementDeclaration); // This is the result that is produced. // // <xsd:element name="simpleRecursiveElementDeclaration" type="PTS:SimpleRecursiveComplexTypeDefinition"> // <xsd:annotation/> // <xsd:unique name="unique"> // <xsd:selector xpath="simpleRecursiveElementDeclaration"/> // <xsd:field xpath="simpleAttributeDeclarationGroupMember"/> // </xsd:unique> // <xsd:key name="key"> // <xsd:selector xpath="simpleRecursiveElementDeclaration"/> // <xsd:field xpath="simpleAttributeDeclarationGroupMember"/> // </xsd:key> // <xsd:keyref name="keyref" refer="PTS:key"> // <xsd:selector xpath="simpleRecursiveElementDeclaration"/> // <xsd:field xpath="simpleAttributeDeclaration"/> // </xsd:keyref> // </xsd:element> }
public void initializeSimpleAttributeDeclaration()
{ // Create an attribute declaration and set it's name to simpleAttributeDeclaration. // Set it's type definition to be someOtherTypeDefinition in someOtherSchemaURI, // and set the default constraint to "defaultValue". //XSDAttributeDeclaration
simpleAttributeDeclaration = xsdFactory.createXSDAttributeDeclaration(); simpleAttributeDeclaration.setName
("simpleAttributeDeclaration"); simpleAttributeDeclaration.setTypeDefinition
(prototypeSchema.resolveSimpleTypeDefinition(someOtherSchemaURI
, "someOtherTypeDefinition")); simpleAttributeDeclaration.setConstraint
(XSDConstraint
.DEFAULT_LITERAL); simpleAttributeDeclaration.setLexicalValue
("defaultValue"); // Add the attribute to the schema. // prototypeSchema.getContents
().add(simpleAttributeDeclaration); // This is the result that is produced. // // <xsd:attribute default="defaultValue" // name="simpleAttributeDeclaration" type="EXT:someOtherTypeDefinition"/> }
public void initializeSimpleElementDeclarationWithAnonymousType()
{ // Create an element declaration and set it's name to simpleElementWithAnonymousType. //XSDElementDeclaration
simpleElementDeclarationWithAnonymousType = xsdFactory.createXSDElementDeclaration(); simpleElementDeclarationWithAnonymousType.setName
("simpleElementWithAnonymousType"); // Create an annotation placeholder and add it to the element. //XSDAnnotation
annotation = xsdFactory.createXSDAnnotation(); simpleElementDeclarationWithAnonymousType.setAnnotation
(annotation); // Create an anonymous simple type definition and set it's base type to the built-in string. //XSDSimpleTypeDefinition
anonymousSimpleTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition(); anonymousSimpleTypeDefinition.setBaseTypeDefinition
(prototypeSchema.getSchemaForSchema
().resolveSimpleTypeDefinition
("string")); // Create pattern facet. // Set it to match two digits followed by any two characters. // And add it to the anonymous type. //XSDPatternFacet
xsdPatternFacet = xsdFactory.createXSDPatternFacet(); xsdPatternFacet.setLexicalValue
("\\d\\d.."); anonymousSimpleTypeDefinition.getFacetContents
().add(xsdPatternFacet); // Set the element's annotation and anonymous type, // and set the fixed constraint to "12ab". // simpleElementDeclarationWithAnonymousType.setAnnotation
(annotation); simpleElementDeclarationWithAnonymousType.setAnonymousTypeDefinition
(anonymousSimpleTypeDefinition); simpleElementDeclarationWithAnonymousType.setConstraint
(XSDConstraint
.FIXED_LITERAL); simpleElementDeclarationWithAnonymousType.setLexicalValue
("12ab"); // Add the element to the schema. // prototypeSchema.getContents
().add(simpleElementDeclarationWithAnonymousType); // This is the result that is produced. // // <xsd:element fixed="12ab" name="simpleElementWithAnonymousType"> // <xsd:annotation/> // <xsd:simpleType> // <xsd:restriction base="xsd:string"> // <xsd:pattern value="\d\d.."/> // </xsd:restriction> // </xsd:simpleType> // </xsd:element> }
public void initializeSimpleTypeDefinition()
{ // Create a simple type definition and set it's name to SimpleTypeDefinition. // Also set it's base type to be the built-in positiveInteger. //XSDSimpleTypeDefinition
simpleTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition(); simpleTypeDefinition.setName
("SimpleTypeDefinition"); simpleTypeDefinition.setBaseTypeDefinition
(prototypeSchema.getSchemaForSchema
().resolveSimpleTypeDefinition
("positiveInteger")); // Create an annotation placeholder and add it to the type. //XSDAnnotation
annotation = xsdFactory.createXSDAnnotation(); simpleTypeDefinition.setAnnotation
(annotation); // Create max inclusive facet, set it to 100, and add it to the simple type's facet contents. //XSDMaxInclusiveFacet
xsdMaxInclusiveFacet = xsdFactory.createXSDMaxInclusiveFacet(); xsdMaxInclusiveFacet.setLexicalValue
("100"); simpleTypeDefinition.getFacetContents
().add(xsdMaxInclusiveFacet); // Add the simple type to the schema // prototypeSchema.getContents
().add(simpleTypeDefinition); // This is the result that is produced. // // <xsd:simpleType name="SimpleTypeDefinition"> // <xsd:annotation/> // <xsd:restriction base="xsd:positiveInteger"> // <xsd:maxInclusive value="100"/> // </xsd:restriction> // </xsd:simpleType> }
public void initializeSimpleListTypeDefinition()
{ // Create a simple list type definition and set it's name to SimpleListTypeDefinition. // Also set its item type to the built-in integer. //XSDSimpleTypeDefinition
simpleListTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition(); simpleListTypeDefinition.setName
("SimpleListTypeDefinition"); simpleListTypeDefinition.setItemTypeDefinition
(prototypeSchema.getSchemaForSchema
().resolveSimpleTypeDefinition
("integer")); // Create an annotation placeholder and add it to the type. //XSDAnnotation
annotation = xsdFactory.createXSDAnnotation(); simpleListTypeDefinition.setAnnotation
(annotation); // Add the simple list type to the schema // prototypeSchema.getContents
().add(simpleListTypeDefinition); // This is the result that is produced. // // <xsd:simpleType name="SimpleListTypeDefinition"> // <xsd:annotation/> // <xsd:list itemType="xsd:integer"/> // </xsd:simpleType> }
public void initializeSimpleUnionTypeDefinition()
{ // Create a simple list type definition and set it's name to SimpleUnionTypeDefinition. // Also set its item type to the built-in integer. //XSDSimpleTypeDefinition
simpleUnionTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition(); simpleUnionTypeDefinition.setName
("SimpleUnionTypeDefinition"); simpleUnionTypeDefinition.getMemberTypeDefinitions
().add (prototypeSchema.getSchemaForSchema
().resolveSimpleTypeDefinition
("integer")); // Create an annotation placeholder and add it to the type. //XSDAnnotation
annotation = xsdFactory.createXSDAnnotation(); simpleUnionTypeDefinition.setAnnotation
(annotation); // Add the simple list type to the schema // prototypeSchema.getContents
().add(simpleUnionTypeDefinition); // This is the result that is produced. // // <xsd:simpleType name="SimpleUnionTypeDefinition"> // <xsd:annotation/> // <xsd:union memberTypes="xsd:integer"/> // </xsd:simpleType> }
public void initializeFancyListTypeDefinition()
{ // Create a fancy list type definition and set it's name to FancyListTypeDefinition. //XSDSimpleTypeDefinition
fancyListTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition(); fancyListTypeDefinition.setName
("FancyListTypeDefinition"); // Create an anonymous list type definition for fancyListTypeDefinition to restrict. // XSDSimpleTypeDefinition listTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition(); // Create an anonymous union type definition for the item type of the listTypeDefiniton. // XSDSimpleTypeDefinition unionTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition(); // Create an anonymous "member" type definition for the unionTypeDefinition, // and set it to restrict the built-in string. // XSDSimpleTypeDefinition firstMemberTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition(); firstMemberTypeDefinition.setBaseTypeDefinition
(prototypeSchema.getSchemaForSchema
().resolveSimpleTypeDefinition
("string")); // Create an enumeration facet to specify the value "unknown" and add it to the member. //XSDEnumerationFacet
xsdEnumerationFacet = xsdFactory.createXSDEnumerationFacet(); xsdEnumerationFacet.setLexicalValue
("unknown"); firstMemberTypeDefinition.getFacetContents
().add(xsdEnumerationFacet); // Add the anonymous member to the contents and the member type definitions of unionTypeDefinition. // unionTypeDefinition.getContents
().add(firstMemberTypeDefinition); unionTypeDefinition.getMemberTypeDefinitions
().add(firstMemberTypeDefinition); // Create another anonymous "member" type definition for the unionTypeDefinition, // and set it to restrict the built-in decimal. // XSDSimpleTypeDefinition secondMemberTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition(); secondMemberTypeDefinition.setBaseTypeDefinition (prototypeSchema.getSchemaForSchema().resolveSimpleTypeDefinition("decimal")); // Create a fraction digits facet to specify the value "2" and add it to the member. //XSDFractionDigitsFacet
xsdFractionDigitsFacet = xsdFactory.createXSDFractionDigitsFacet(); xsdFractionDigitsFacet.setLexicalValue("2"); secondMemberTypeDefinition.getFacetContents().add(xsdFractionDigitsFacet); // Add the anonymous member to the contents and the member type definitions of unionTypeDefinition. // unionTypeDefinition.getContents().add(secondMemberTypeDefinition); unionTypeDefinition.getMemberTypeDefinitions().add(secondMemberTypeDefinition); // Add the anonymous item to the contents and set the item type definition. // listTypeDefinition.getContents().add(unionTypeDefinition); listTypeDefinition.setItemTypeDefinition(unionTypeDefinition); // Add the anonymous restriction to the contents and set the base type definition. // fancyListTypeDefinition.getContents().add(listTypeDefinition); fancyListTypeDefinition.setBaseTypeDefinition(listTypeDefinition); // Create a max length facet to specify the value "4" and add it to the fancy list. // XSDMaxLengthFacet xsdMaxLengthFacet = xsdFactory.createXSDMaxLengthFacet(); xsdMaxLengthFacet.setLexicalValue("4"); fancyListTypeDefinition.getFacetContents().add(xsdMaxLengthFacet); // Add the fancy list type to the schema. // prototypeSchema.getContents
().add(fancyListTypeDefinition); // This is the result that is produced. // // <xsd:simpleType name="FancyListTypeDefinition"> // <xsd:restriction> // <xsd:simpleType> // <xsd:list> // <xsd:simpleType> // <xsd:union> // <xsd:simpleType> // <xsd:restriction base="xsd:string"> // <xsd:enumeration value="unknown"/> // </xsd:restriction> // </xsd:simpleType> // <xsd:simpleType> // <xsd:restriction base="xsd:decimal"> // <xsd:fractionDigits value="2"/> // </xsd:restriction> // </xsd:simpleType> // </xsd:union> // </xsd:simpleType> // </xsd:list> // </xsd:simpleType> // <xsd:maxLength value="4"/> // </xsd:restriction> // </xsd:simpleType> }
public void initializeSimpleContentComplexTypeDefinition()
{ // Create a complex type definition and set its name to SimpleContentComplexTypeDefinition. // Set it to be an extension //XSDComplexTypeDefinition
simpleContentComplexTypeDefinition = xsdFactory.createXSDComplexTypeDefinition(); simpleContentComplexTypeDefinition.setName
("SimpleContentComplexTypeDefinition"); simpleContentComplexTypeDefinition.setDerivationMethod
(XSDDerivationMethod
.EXTENSION_LITERAL); // Create an annotation placeholder and add it to the complex type. //XSDAnnotation
annotation = xsdFactory.createXSDAnnotation(); simpleContentComplexTypeDefinition.setAnnotation
(annotation); // Create an anonymous simple type definition, set its base type to be the built-in string, // and set it to be the content type of the complex type. // XSDSimpleTypeDefinition anonymousSimpleTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition(); simpleContentComplexTypeDefinition.setBaseTypeDefinition
(prototypeSchema.getSchemaForSchema
().resolveSimpleTypeDefinition
("string")); simpleContentComplexTypeDefinition.setContent
(anonymousSimpleTypeDefinition); // Create an attribute reference to simpleAttributeDeclaration in this schema. //XSDAttributeDeclaration
simpleAttributeDeclarationReference = xsdFactory.createXSDAttributeDeclaration(); simpleAttributeDeclarationReference.setResolvedAttributeDeclaration
(prototypeSchema.resolveAttributeDeclaration
("simpleAttributeDeclaration")); // Create an attribute use to hold the reference, set its use to be optional, // and add it to the complex type's attribute contents //XSDAttributeUse
simpleAttributeUse = xsdFactory.createXSDAttributeUse(); simpleAttributeUse.setContent
(simpleAttributeDeclarationReference); simpleAttributeUse.setUse(XSDAttributeUseCategory
.OPTIONAL_LITERAL); simpleContentComplexTypeDefinition.getAttributeContents
().add(simpleAttributeUse); // Add the complex type to the schema. // prototypeSchema.getContents
().add(simpleContentComplexTypeDefinition); // This is the result that is produced. // // <xsd:complexType name="SimpleContentComplexTypeDefinition"> // <xsd:annotation/> // <xsd:simpleContent> // <xsd:extension base="xsd:string"> // <xsd:attribute ref="PTS:simpleAttributeDeclaration" use="optional"/> // </xsd:extension> // </xsd:simpleContent> // </xsd:complexType> }
public XSDSchema initializePurchaseOrderSchema()
{ // Build the Purchase Order Schema from Primer 0. // The general approach, for efficiency, is to attach objects as late as possible. // The XML serialization is at the end. // Create the schema. //XSDSchema
xsdSchema = XSDFactory.eINSTANCE.createXSDSchema(); // If you want schema tags and references to schema types to be qualified, // which is recommend, this is the recommended qualifier. // xsdSchema.setSchemaForSchemaQNamePrefix
("xsd"); // Set the target namespace. // xsdSchema.setTargetNamespace
("http://nist.gov/po.xsd"); // Choose the prefix used for this schema's namespace and theschema for schema
's namespace. // Map qNamePrefixToNamespaceMap = xsdSchema.getQNamePrefixToNamespaceMap
(); qNamePrefixToNamespaceMap.put("po", xsdSchema.getTargetNamespace()); qNamePrefixToNamespaceMap.put(xsdSchema.getSchemaForSchemaQNamePrefix(),XSDConstants
.SCHEMA_FOR_SCHEMA_URI_2001); // Create an annotation and add it to the schema. //XSDAnnotation
xsdAnnotation = xsdFactory.createXSDAnnotation(); xsdSchema.getContents
().add(xsdAnnotation); // Create a documentation DOM element with no sourceURI attribute. // NOTE // Working with the contents of an annotation requires dropping down into the DOM model. // This imposes the additional requirement that the annotation must beattached
to a schema. // It also has the effect of callingXSDConcreteComponent.updateElement()
, // if the schema does not have anelement
ordocument
yet. //Element
documentation = xsdAnnotation.createUserInformation
(null); // Use the DOM API to set the lang attribute and content of the documentation. // documentation.setAttributeNS
(XSDConstants.XML_NAMESPACE_URI_1998, "xml:lang", "en"); String text = "Purchase order schema for Example.com.\nCopyright 2000 Example.com. All rights reserved."; documentation.appendChild
(documentation.getOwnerDocument().createTextNode(text)); // Use the DOM API to add the documentation to the element of the annotation. // xsdAnnotation.getElement
().appendChild(documentation); // Create an element, name it purchaseOrder, // and set it's type to the purchaseOrderType of this schema. // Add the purchaseOrder element to the schema. //XSDElementDeclaration
purchaseOrder = xsdFactory.createXSDElementDeclaration(); purchaseOrder.setName
("purchaseOrder"); purchaseOrder.setTypeDefinition
(xsdSchema.resolveComplexTypeDefinition
("PurchaseOrderType")); xsdSchema.getContents().add(purchaseOrder); // Create an element named command of the build-in type string. // XSDElementDeclaration comment = xsdFactory.createXSDElementDeclaration(); comment.setName("comment"); comment.setTypeDefinition(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition
("string")); xsdSchema.getContents().add(comment); // Create a complex type and name it PurchaseOrderType. //XSDComplexTypeDefinition
purchaseOrderType = xsdFactory.createXSDComplexTypeDefinition(); purchaseOrderType.setName
("PurchaseOrderType"); // Create a sequence model group, and a particle to contain it. //XSDModelGroup
purchaseOrderTypeSequence = xsdFactory.createXSDModelGroup(); purchaseOrderTypeSequence.setCompositor
(XSDCompositor.SEQUENCE_LITERAL);XSDParticle
purchaseOrderTypeParticle = xsdFactory.createXSDParticle(); purchaseOrderTypeParticle.setContent
(purchaseOrderTypeSequence); // Create an element named shipTo of complex type USAddress, a particle to contain it, // and add the particle to the sequence. // XSDElementDeclaration shipTo = xsdFactory.createXSDElementDeclaration(); shipTo.setName("shipTo"); shipTo.setTypeDefinition(xsdSchema.resolveComplexTypeDefinition("USAddress")); XSDParticle shipToParticle = xsdFactory.createXSDParticle(); shipToParticle.setContent(shipTo); purchaseOrderTypeSequence.getContents
().add(shipToParticle); // Create an element named billTo of complex type USAddress, a particle to contain it, // and add the particle to the sequence. // XSDElementDeclaration billTo = xsdFactory.createXSDElementDeclaration(); billTo.setName("billTo"); billTo.setTypeDefinition(xsdSchema.resolveComplexTypeDefinition("USAddress")); XSDParticle billToParticle = xsdFactory.createXSDParticle(); billToParticle.setContent(billTo); purchaseOrderTypeSequence.getContents().add(billToParticle); // Create an element reference to comment, a particle to contain it, // set the particle to be optional, and add the particle to the sequence. // XSDElementDeclaration commentRef = xsdFactory.createXSDElementDeclaration(); commentRef.setResolvedElementDeclaration
(xsdSchema.resolveElementDeclaration
("comment")); XSDParticle commentRefParticle = xsdFactory.createXSDParticle(); commentRefParticle.setMinOccurs
(0); commentRefParticle.setContent(commentRef); purchaseOrderTypeSequence.getContents().add(commentRefParticle); // Create an element named items of complex type Items, a particle to contain it, // and add the particle to the sequence. // XSDElementDeclaration items = xsdFactory.createXSDElementDeclaration(); items.setName("items"); items.setTypeDefinition(xsdSchema.resolveComplexTypeDefinition("Items")); XSDParticle itemsParticle = xsdFactory.createXSDParticle(); itemsParticle.setContent(items); purchaseOrderTypeSequence.getContents().add(billToParticle); // Set the completed content particle to be the content of the PurchaseOrderType. // purchaseOrderType.setContent
(purchaseOrderTypeParticle); // Create an attribute, name it orderDate, and set it's type to the built-in Date type. // Also create an attribute use to contain the attribute and add it to PurchaseOrderType's attribute contents. //XSDAttributeDeclaration
orderDate = xsdFactory.createXSDAttributeDeclaration(); orderDate.setName
("orderDate"); orderDate.setTypeDefinition
(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("date"));XSDAttributeUse
orderDateAttributeUse = xsdFactory.createXSDAttributeUse(); orderDateAttributeUse.setContent
(orderDate); purchaseOrderType.getAttributeContents
().add(orderDateAttributeUse); // Add the completed complex PurchaseOrderType to the schema. // xsdSchema.getContents().add(purchaseOrderType); // Create a complex type named USAddress. // XSDComplexTypeDefinition usAddress = xsdFactory.createXSDComplexTypeDefinition(); usAddress.setName("USAddress"); // Create a sequence model group, and a particle to contain it. // XSDModelGroup usAddressSequence = xsdFactory.createXSDModelGroup(); usAddressSequence.setCompositor(XSDCompositor.SEQUENCE_LITERAL); XSDParticle usAddressParticle = xsdFactory.createXSDParticle(); usAddressParticle.setContent(usAddressSequence); // Create an element named name of built-in type string, a particle to contain it, // and add the particle to the sequence. // XSDElementDeclaration name = xsdFactory.createXSDElementDeclaration(); name.setName("name"); name.setTypeDefinition(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("string")); XSDParticle nameParticle = xsdFactory.createXSDParticle(); nameParticle.setContent(name); usAddressSequence.getContents().add(nameParticle); // Create an element named street of built-in type string, a particle to contain it, // and add the particle to the sequence. // XSDElementDeclaration street = xsdFactory.createXSDElementDeclaration(); street.setName("street"); street.setTypeDefinition(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("string")); XSDParticle streeParticle = xsdFactory.createXSDParticle(); streeParticle.setContent(street); usAddressSequence.getContents().add(streeParticle); // Create an element named city of built-in type string, a particle to contain it, // and add the particle to the sequence. // XSDElementDeclaration city = xsdFactory.createXSDElementDeclaration(); city.setName("city"); city.setTypeDefinition(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("string")); XSDParticle cityParticle = xsdFactory.createXSDParticle(); cityParticle.setContent(city); usAddressSequence.getContents().add(cityParticle); // Create an element named state of built-in type string, a particle to contain it, // and add the particle to the sequence. // XSDElementDeclaration state = xsdFactory.createXSDElementDeclaration(); state.setName("state"); state.setTypeDefinition(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("string")); XSDParticle stateParticle = xsdFactory.createXSDParticle(); stateParticle.setContent(state); usAddressSequence.getContents().add(stateParticle); // Create an element named zip of built-in type string, a particle to contain it, // and add the particle to the sequence. // XSDElementDeclaration zip = xsdFactory.createXSDElementDeclaration(); zip.setName("zip"); zip.setTypeDefinition(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("string")); XSDParticle zipParticle = xsdFactory.createXSDParticle(); zipParticle.setContent(zip); usAddressSequence.getContents().add(zipParticle); // Set the completed content particle to be the content of USAddress. // usAddress.setContent(usAddressParticle); // Create an attribute, name it country, set it's type to the built-in NMTOKEN type, // set its constraints to be fixed, set the lexical value of the constraint to be "US". // Also create an attribute use to contain the attribute and add it to USAddress' attribute contents. // XSDAttributeDeclaration country = xsdFactory.createXSDAttributeDeclaration(); country.setName("country"); country.setTypeDefinition(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("NMTOKEN")); XSDAttributeUse countryAttributeUse = xsdFactory.createXSDAttributeUse(); countryAttributeUse.setContent(country); countryAttributeUse.setConstraint
(XSDConstraint
.FIXED_LITERAL); countryAttributeUse.setLexicalValue
("US"); usAddress.getAttributeContents().add(countryAttributeUse); // Add the completed complex USAddress to the schema. // xsdSchema.getContents().add(usAddress); // Create a complex type named Items. // XSDComplexTypeDefinition itemsType = xsdFactory.createXSDComplexTypeDefinition(); itemsType.setName("Items"); // Create a sequence model group, and a particle to contain it. // XSDModelGroup itemsTypeSequence = xsdFactory.createXSDModelGroup(); itemsTypeSequence.setCompositor(XSDCompositor.SEQUENCE_LITERAL); XSDParticle itemsTypeParticle = xsdFactory.createXSDParticle(); itemsTypeParticle.setContent(itemsTypeSequence); // Create an element and name it item. // XSDElementDeclaration item = xsdFactory.createXSDElementDeclaration(); item.setName("item"); // Create an anonymous complex type. // XSDComplexTypeDefinition anonymousComplexTypeDefinition = xsdFactory.createXSDComplexTypeDefinition(); // Create a sequence model group, and a particle to contain it. // XSDModelGroup anonymousComplexTypeDefinitionSequence = xsdFactory.createXSDModelGroup(); anonymousComplexTypeDefinitionSequence.setCompositor(XSDCompositor.SEQUENCE_LITERAL); XSDParticle anonymousTypeDefinitionParticle = xsdFactory.createXSDParticle(); anonymousTypeDefinitionParticle.setContent(anonymousComplexTypeDefinitionSequence); // Create an element productName of built-in type string, a particle to contain it, // and add the particle to the sequence. // XSDElementDeclaration productName = xsdFactory.createXSDElementDeclaration(); productName.setName("productName"); productName.setTypeDefinition(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("string")); XSDParticle productNameParticle = xsdFactory.createXSDParticle(); productNameParticle.setContent(productName); anonymousComplexTypeDefinitionSequence.getContents().add(productNameParticle); // Create a particle to contain the item declaration and add it to the sequence. // XSDParticle itemParticle = xsdFactory.createXSDParticle(); itemParticle.setContent(item); itemsTypeSequence.getContents().add(itemParticle); // Create an attribute, name it partNum, set its type to the SKU type, // Also create an attribute use to contain the attribute, set it to be required, // and add it to Items' attribute contents. // XSDAttributeDeclaration partNum = xsdFactory.createXSDAttributeDeclaration(); partNum.setName("partNum"); partNum.setTypeDefinition(xsdSchema.resolveSimpleTypeDefinition("SKU")); XSDAttributeUse partNumAttributeUse = xsdFactory.createXSDAttributeUse(); partNumAttributeUse.setContent(partNum); partNumAttributeUse.setUse(XSDAttributeUseCategory.REQUIRED_LITERAL); itemsType.getAttributeContents().add(partNumAttributeUse); // Set the completed content particle to be the content of the anonymous complex type. // anonymousComplexTypeDefinition.setContent(anonymousTypeDefinitionParticle); // Create an element and name it quantity. // XSDElementDeclaration quantity = xsdFactory.createXSDElementDeclaration(); quantity.setName("quantity"); // Create an anonymous simple type and set it to restrict the built-in positiveInteger type. //XSDSimpleTypeDefinition
anonymousSimpleTypeDefinition = xsdFactory.createXSDSimpleTypeDefinition(); anonymousSimpleTypeDefinition.setBaseTypeDefinition
(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("positiveInteger")); // Create max exclusive facet, set its lexical value to be 100, and add it to the facet contents of the anonymous simple type. // XSDMaxExclusiveFacet quantityMaxExclusiveFacet = xsdFactory.createXSDMaxExclusiveFacet(); quantityMaxExclusiveFacet.setLexicalValue("100"); anonymousSimpleTypeDefinition.getFacetContents().add(quantityMaxExclusiveFacet); // Set the completed anonymous type of the quantity element. // quantity.setAnonymousTypeDefinition(anonymousSimpleTypeDefinition); // Create a particle to hold the quantity element and add it to the sequence. // XSDParticle quantityParticle = xsdFactory.createXSDParticle(); quantityParticle.setContent(quantity); anonymousComplexTypeDefinitionSequence.getContents().add(quantityParticle); // Create an element USPrice of built-in type decimal, a particle to contain it, // and add the particle to the sequence. // XSDElementDeclaration usPrice = xsdFactory.createXSDElementDeclaration(); usPrice.setName("USPrice"); usPrice.setTypeDefinition(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("decimal")); XSDParticle usPriceParticle = xsdFactory.createXSDParticle(); usPriceParticle.setContent(usPrice); anonymousComplexTypeDefinitionSequence.getContents().add(usPriceParticle); // Create an element reference to comment, a particle to contain it, // set the particle to be optional, and add the particle to the sequence. // XSDElementDeclaration anotherCommentRef = xsdFactory.createXSDElementDeclaration(); anotherCommentRef.setResolvedElementDeclaration(xsdSchema.resolveElementDeclaration("comment")); XSDParticle anotherCommentRefParticle = xsdFactory.createXSDParticle(); anotherCommentRefParticle.setMinOccurs(0); anotherCommentRefParticle.setContent(anotherCommentRef); anonymousComplexTypeDefinitionSequence.getContents().add(anotherCommentRefParticle); // Create an element USPrice of built-in type Date, a particle to contain it, // set the particle to be optional, and add it to the sequence. // XSDElementDeclaration shipDate = xsdFactory.createXSDElementDeclaration(); shipDate.setName("shipDate"); shipDate.setTypeDefinition(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("decimal")); XSDParticle shipDateParticle = xsdFactory.createXSDParticle(); shipDateParticle.setContent(shipDate); shipDateParticle.setMinOccurs(0); anonymousComplexTypeDefinitionSequence.getContents().add(shipDateParticle); // Set the completed content particle to be the content of Items. // itemsType.setContent(itemsTypeParticle); // Set the completed anonymous type of the item element. // item.setAnonymousTypeDefinition
(anonymousComplexTypeDefinition); // Add the completed complex Items to the schema. // xsdSchema.getContents().add(itemsType); // Create a simple type, name it Sku, and set it to restrict the built-in type string. // XSDSimpleTypeDefinition sku = xsdFactory.createXSDSimpleTypeDefinition(); sku.setName("Sku"); sku.setBaseTypeDefinition(xsdSchema.getSchemaForSchema().resolveSimpleTypeDefinition("string")); // Create max exclusive facet, set its lexical value to be 100, and add it to the facet contents of Sku. // XSDPatternFacet skuPatternFacet = xsdFactory.createXSDPatternFacet(); skuPatternFacet.setLexicalValue("/d{3}-[A-Z]{2}"); sku.getFacetContents().add(skuPatternFacet); // Add the completed simple Sku to the schema. // xsdSchema.getContents().add(sku); // This is the result that is produced. // // <?xml version="1.0" encoding="UTF-8"?> // <xsd:schema targetNamespace="http://nist.gov/po.xsd" // xmlns:po="http://nist.gov/po.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> // <xsd:annotation> // <xsd:documentation xml:lang="en">Purchase order schema for // Example.com. Copyright 2000 Example.com. All rights reserved.</xsd:documentation> // </xsd:annotation> // <xsd:element name="purchaseOrder" type="po:PurchaseOrderType"/> // <xsd:element name="comment" type="xsd:string"/> // <xsd:complexType name="PurchaseOrderType"> // <xsd:sequence> // <xsd:element name="shipTo" type="po:USAddress"/> // <xsd:element name="billTo" type="po:USAddress"/> // <xsd:element minOccurs="0" ref="po:comment"/> // </xsd:sequence> // <xsd:attribute name="orderDate" type="xsd:Date"/> // </xsd:complexType> // <xsd:complexType name="USAddress"> // <xsd:sequence> // <xsd:element name="name" type="xsd:string"/> // <xsd:element name="street" type="xsd:string"/> // <xsd:element name="city" type="xsd:string"/> // <xsd:element name="state" type="xsd:string"/> // <xsd:element name="zip" type="xsd:string"/> // </xsd:sequence> // <xsd:attribute fixed="US" name="country" type="xsd:NMTOKEN"/> // </xsd:complexType> // <xsd:complexType name="Items"> // <xsd:sequence> // <xsd:element name="item"> // <xsd:complexType> // <xsd:sequence> // <xsd:element name="productName" type="xsd:string"/> // <xsd:element name="quantity"> // <xsd:simpleType> // <xsd:restriction base="xsd:positiveInteger"> // <xsd:maxExclusive value="100"/> // </xsd:restriction> // </xsd:simpleType> // </xsd:element> // <xsd:element name="USPrice" type="xsd:decimal"/> // <xsd:element minOccurs="0" ref="po:comment"/> // <xsd:element minOccurs="0" name="shipDate" type="xsd:decimal"/> // </xsd:sequence> // </xsd:complexType> // </xsd:element> // </xsd:sequence> // <xsd:attribute name="partNum" type="po:SKU" use="required"/> // </xsd:complexType> // <xsd:simpleType name="Sku"> // <xsd:restriction base="xsd:string"> // <xsd:pattern value="/d{3}-[A-Z]{2}"/> // </xsd:restriction> // </xsd:simpleType> // </xsd:schema> return xsdSchema; }
public void savePurchaseOrderSchema(java.lang.String schemaURI)
{ // Saves thePurchase Order Schema
to the given URI. // try { // Create a resource set and a resource with an extent. // Add the schema to the extent, add the resource to the set, // and save the resource. //ResourceSet
resourceSet = newResourceSetImpl
();Resource
resource = newXSDResourceImpl
(URI.createURI(schemaURI)); resource.getContents
().add(purchaseOrderSchema); resourceSet.getResources()
.add(resource); resource.save
(Collections.EMPTY_MAP); } catch (Exception exception) { System.out.println(exception.getLocalizedMessage()); exception.printStackTrace(); } }
public void printSchema(java.lang.String xsdSchemaURI)
{ // Prints the schema loaded from the given URI. // // The code assumes that the following registration has taken place. // Currently, unless special handling is implemented in the resource set, // only files ending with a .xsd extension will be loaded as schemas. // // Resource.Factory.Registry.INSTANCE
.getExtensionToFactoryMap
().put("xsd", newXSDResourceFactoryImpl
()); try { // Create a resource set, // turn on the ability of theXSDParser
to associate line and column information with the DOM, // and then load the main schema file. //ResourceSet
resourceSet = newResourceSetImpl
(); resourceSet.getLoadOptions().put(XSDResourceImpl.XSD_TRACK_LOCATION, Boolean.TRUE);XSDResourceImpl
xsdSchemaResource = (XSDResourceImpl)resourceSet.getResource
(URI.createURI(xsdSchemaURI), true); // Iterate over all the resources, i.e., the main resource // and those that have been included, imported, or redefined. // for (Iterator resources = resourceSet.getResources
().iterator(); resources.hasNext(); ) { // Check for schema resources. //Resource
resource = (Resource)resources.next(); if (resource instanceof XSDResourceImpl) { XSDResourceImpl xsdResource = (XSDResourceImpl)resource; // Get the schema's element and serialized it to System.out. //XSDSchema
xsdSchema = xsdResource.getSchema
(); System.out.println("\n<!-- *** " + xsdResource.getURI
() + " *** -->\n");printComponent
(System.out, xsdSchema); // If there are no errors from just trying to parse a DOM, // validate the schema. // if (xsdSchema.getAllDiagnostics
().isEmpty()) { xsdSchema.validate(); } // Process each of the diagnostics. // for (Iterator diagnostics = xsdSchema.getAllDiagnostics().iterator(); diagnostics.hasNext(); ) {XSDDiagnostic
xsdDiagnostic = (XSDDiagnostic)diagnostics.next(); String localizedSeverity = XSDPlugin.INSTANCE.getString
("_UI_XSDDiagnosticSeverity_" + xsdDiagnostic.getSeverity
()); System.out.println (XSDPlugin.INSTANCE.getString ("_UI_DiagnosticFileLineColumn_message", new Object [] { localizedSeverity, xsdDiagnostic.getLocationURI
(), new Integer(xsdDiagnostic.getLine
()), new Integer(xsdDiagnostic.getColumn
()) })); System.out.println(xsdDiagnostic.getMessage
()); } } } } catch (Exception exception) { System.out.println(exception.getLocalizedMessage()); exception.printStackTrace(); } }
public void printComponent(java.io.OutputStream outputStream, XSDConcreteComponent xsdConcreteComponent)
{ // Print a component's element using Xerces. // // Get the component's element and create one if there isn't one already. //Element
element = xsdConcreteComponent.getElement
(); if (element == null) { xsdConcreteComponent.updateElement
(); element = xsdConcreteComponent.getElement(); } if (element != null) { try { // OutputFormat outputFormat = new OutputFormat(element.getOwnerDocument()); // outputFormat.setLineWidth(80); // outputFormat.setIndenting(true); // outputFormat.setIndent(4); // outputFormat.setPreserveSpace(false); // XMLSerializer serializer = new XMLSerializer(outputStream, outputFormat); // serializer.serialize(element); TransformerFactory transformerFactory = TransformerFactory.newInstance(); Transformer transformer = transformerFactory.newTransformer(); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); transformer.setOutputProperty(OutputKeys.METHOD, "xml"); transformer.transform(new DOMSource(element.getOwnerDocument()), new StreamResult(outputStream)); } catch (TransformerException exception) { System.out.println(exception.getLocalizedMessage()); exception.printStackTrace(); } } }
public XSDSchema createSchema(org.w3c.dom.Element element)
{ // Create a schema from an element. // // Test if the element is really a schema element. // if (element.getLocalName().equals("schema") &&XSDConstants
.isSchemaForSchemaNamespace
(element.getNamespaceURI())) { // Create the schema. //XSDSchema
xsdSchema = XSDFactory.eINSTANCE.createXSDSchema
(); // Set the element to the schema. // This it will build the corresponding component structure. // xsdSchema.setElement
(element); return xsdSchema; } else { return null; } }
public void traceLoading(java.lang.String xsdSchemaURI)
{ // Traces a resource set's loading behavior when loading the given URI. // // The code assumes that the following registration has taken place. // Currently, unless special handling is implemented in the resource set, // only files ending with a .xsd extension will be loaded as schemas. // // Resource.Factory.Registry.INSTANCE
.getExtensionToFactoryMap
().put("xsd", newXSDResourceFactoryImpl
()); try { // Create a resource set. //ResourceSet
resourceSet = newResourceSetImpl
() { public Resource getResource(URI
uri, boolean loadOnDemand) { Resource result = super.getResource
(uri, true); System.out.println("<!-- loaded: " + uri + " --> " + result); return result; } }; // Create a derived URIConverter to track normalization. // resourceSet.getURIConverter
().getURIMap
().put (URI.createURI("http://www.example.com/logical.xsd"), URI.createURI("file://c:/physical.xsd")); // Load the schema from the URI. //XSDResourceImpl
xsdSchemaResource = (XSDResourceImpl)resourceSet.getResource(URI.createURI(xsdSchemaURI), true); // Iterate over all the resources, i.e., the main resource // and those that have been included, imported, or redefined. // for (Iterator resources = resourceSet.getResources
().iterator(); resources.hasNext(); ) { // Check for schema resources. //Resource
resource = (Resource)resources.next(); if (resource instanceof XSDResourceImpl) { XSDResourceImpl xsdResource = (XSDResourceImpl)resource; // Iterate over the schema's content's looking for directives. //XSDSchema
xsdSchema = xsdResource.getSchema
(); for (Iterator contents = xsdSchema.getContents
().iterator(); contents.hasNext(); ) {XSDSchemaContent
xsdSchemaContent = (XSDSchemaContent)contents.next(); if (xsdSchemaContent instanceofXSDSchemaDirective
) { // Check if the directive resolved to a schema. // XSDSchemaDirective xsdSchemaDirective = (XSDSchemaDirective)xsdSchemaContent; if (xsdSchemaDirective.getResolvedSchema
() == null) { System.out.println("Unresolved schema in " + xsdResource.getURI
());printComponent
(System.out, xsdSchemaDirective); } } } } } } catch (Exception exception) { System.out.println(exception.getLocalizedMessage()); exception.printStackTrace(); } }
public XSDConcreteComponent cloneComponent(XSDConcreteComponent xsdConcreteComponent, boolean preserveDOM)
{
// A component can be cloned directly or by cloning the underlying DOM.
// By cloning the DOM you ensure that <annotation>s, non-schema namespace attributes, and formatting are preserved.
//
if (preserveDOM)
{
// If there is an element to clone.
//
Element element = xsdConcreteComponent.XSDConcreteComponent.getElement()
getElement();
if (element != null)
{
// Clone the DOM using the DOM API, and create the same type of component to hold it.
//
Element clonedElement = (Element)element.cloneNode(true);
XSDConcreteComponent result = (XSDConcreteComponent)XSDFactory.eINSTANCE.create(xsdConcreteComponent.eClass());
result.setElement(clonedElement);
return result;
}
}
// Clone just the model itself so that a new DOM will need to be created to serialize it.
//
XSDConcreteComponent result = xsdConcreteComponent.cloneConcreteComponent(true, false);
return result;
}
public void crossReferenceTest(java.io.PrintStream out)
{ // Test cross references for the meta schemas. // XSDSchema xsdSchemaForSchema = XSDUtil.getSchemaForSchema
(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001); ResourceSet resourceSet = xsdSchemaForSchema.eResource
().getResourceSet
(); out.println("Show uses of the string datatype within the meta schemas themselves."); Collection usages =XSDUtil.UsageCrossReferencer
.find(xsdSchemaForSchema.resolveSimpleTypeDefinition("string"), resourceSet); XSDUtil.UsageCrossReferencer.print(out, usages); out.println("Show uses of the ur-type URI"); Map xsdURICrossReferences =XSDUtil.URICrossReferencer
.find(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001 + "#anyType", resourceSet); XSDUtil.URICrossReferencer.print(out, xsdURICrossReferences); out.println("Show all named components and their uses in the schema of the anySimpleType."); Map xsdNamedComponentUsage =XSDUtil.XSDNamedComponentCrossReferencer
.find(xsdSchemaForSchema.resolveSimpleTypeDefinition("anySimpleType").getSchema()); XSDUtil.XSDNamedComponentCrossReferencer.print(out, xsdNamedComponentUsage); out.println("Test that the URI of evey object in the schema for schemas can be resolved."); for (Iterator contents = xsdSchemaForSchema.eAllContents
(); contents.hasNext(); ) { XSDConcreteComponent xsdConcreteComponent = (XSDConcreteComponent)contents.next(); URI uri = EcoreUtil.getURI
(xsdConcreteComponent); if (resourceSet.getEObject
(uri, false) != xsdConcreteComponent) { out.println("BAD URI: " + uri); } } }
|
Copyright 2001-2006 IBM Corporation and others. All Rights Reserved. |
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |