Home » Archived » XML Schema Definition (XSD) » XSD schema tree 
| XSD schema tree [message #61612] | 
Tue, 14 June 2005 10:42   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: Parameshwara.tatini.gxs.com 
 
Hi, 
I am trying to build tree from Schema.  And I am able to build the tree  
from schema. 
 
But I am facing the problems if my schema has import/include schemas. 
 
It is like A.xsd imported B.xsd and B.xsd imports C.xsd. 
 
 
Say I have Element 'xa' defined in A.xsd  and type="xbtype" which is  
defined in B.xsd and in b.xsd the defination for 'xbtype' is defined as  
type="xctype" and in C.xsd i have defined type for 'xctype'. but in parser  
i am not able to get all the elements which are defined in C.XSD 
 
Please help me to resolve this issue 
 
Robert
 |  
 |  
  |   |  
| Re: XSD schema tree [message #61804 is a reply to message #61660] | 
Tue, 21 June 2005 01:29    | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: Parameshwara.tatini.gxs.com 
 
Hi Ed Merks, 
 
Thanks for your response. 
 
I have gone through that link But not able to solve my problem. 
Brief Des about my problem is 
 
I have A.XSD which Includes B.XSD and B.xsd includes C.XSD. 
 
I am able to resolve entity type referenced in B.XSD But not from C.XSD 
My Requirement is to build schema tree. I am sending you sample schemas  
and code which I have used (modified for demo purpose). 
 
 
with the current code I am getting this as output 
 
/envelope 
/envelope/messageHeader 
/envelope/messageHeader/to 
 
Here the problem is Typedefination for element 'to' is defined in C.xsd  
which is not resolved. 
 
I should get some thing like this  
 
/envelope 
/envelope/messageHeader 
/envelope/messageHeader/to 
/envelope/messageHeader/to/gln 
 
Here is the code I have used 
 
/* 
 * Created on Mar 9, 2005 
 * 
 * TODO To change the template for this generated file go to 
 * Window - Preferences - Java - Code Style - Code Templates 
 */ 
package com.gxs.ai.ngwb.xsdparser; 
 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Iterator; 
 
 
import javax.swing.tree.TreeNode; 
 
 
import org.eclipse.emf.common.util.URI; 
import org.eclipse.emf.ecore.resource.Resource; 
import org.eclipse.emf.ecore.resource.ResourceSet; 
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; 
import org.eclipse.xsd.XSDAttributeDeclaration; 
import org.eclipse.xsd.XSDAttributeGroupContent; 
import org.eclipse.xsd.XSDAttributeGroupDefinition; 
import org.eclipse.xsd.XSDAttributeUse; 
import org.eclipse.xsd.XSDAttributeUseCategory; 
import org.eclipse.xsd.XSDComplexTypeDefinition; 
import org.eclipse.xsd.XSDDiagnostic; 
import org.eclipse.xsd.XSDElementDeclaration; 
import org.eclipse.xsd.XSDModelGroup; 
import org.eclipse.xsd.XSDModelGroupDefinition; 
import org.eclipse.xsd.XSDParticle; 
import org.eclipse.xsd.XSDParticleContent; 
import org.eclipse.xsd.XSDPlugin; 
import org.eclipse.xsd.XSDSchema; 
import org.eclipse.xsd.XSDSchemaContent; 
import org.eclipse.xsd.XSDSimpleTypeDefinition; 
import org.eclipse.xsd.XSDTypeDefinition; 
import org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl; 
import org.eclipse.xsd.impl.XSDElementDeclarationImpl; 
import org.eclipse.xsd.util.XSDResourceFactoryImpl; 
import org.eclipse.xsd.util.XSDResourceImpl; 
 
 
 
/** 
 * @author tatinip 
 * 
 * TODO To change the template for this generated type comment go to 
 * Window - Preferences - Java - Code Style - Code Templates 
 */ 
public class XSDParserNEW  
{	 
 
 
	private String m_XSDFileName; 
	private ArrayList m_error_List ; 
	private ArrayList m_warning_List ; 
 
	private int m_minOccurrence = 1; 
	private int m_maxOccurrence = 1; 
	private String m_rootElementName; 
	private boolean m_isRoot = false; 
	private boolean flag = false; 
	private boolean m_ignoreCpexTypeDefnName = false; 
	 
	private String m_modelName; 
	private String m_modelDirection; 
	protected TreeNode m_VirtualRoot; 
	private String m_ModelType=""; 
	 
 
	 
	public XSDParserNEW(){ 
		 
	}  
	 
	public boolean parseXSD(String xsdFileName ,   
						    String rootElementName)  
	throws FileNotFoundException , IOException , Exception 
	{ 
			m_rootElementName = rootElementName; 
			m_XSDFileName = xsdFileName; 
				 
		 Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).put( "xsd",  
new XSDResourceFactoryImpl()); 
		 
		try 
		{ 
			boolean status = validateAndProcess(xsdFileName); 
			return status; 
		}catch(IOException ioe) 
		{ 
			throw ioe; 
		}catch(Exception e) 
		{  
			throw e; 
		} 
	 
		 
	} 
								 
	private boolean validateAndProcess(String xsdFile) throws Exception 
	{ 
		/* 
		 *  This let's us test whether the string exists as a file. 
		 * It not, we try as a URI. 
		 */ 
 
		m_error_List = new ArrayList(); 
		m_warning_List = new ArrayList(); 
		 
	    URI uri; 
	     
	    if (xsdFile==null ){ 
	    	//DMParseError parserError = new DMParseError(4,"","Schema file not  
specified",0,0); 
            //m_error_List.add(parserError); 
 
	    	m_warning_List.add("Schema file not specified in Model file " +  
m_modelName); 
            //this.rootNode = null; 
	    	return true; 
	    } 
	     
	    File file = new File(xsdFile); 
	    if (!file.exists()){ 
            //DMParseError parserError = new DMParseError(4,"","File Not  
Found",0,0); 
            //m_error_List.add(parserError); 
	    	m_warning_List.add("Schema file not Found " + xsdFile); 
            //this.rootNode = null; 
            return true; 
	    } 
	    if (file.isFile()) 
	    { 
	      uri = URI.createFileURI(file.getCanonicalFile().toString()); 
	    } 
	    else 
	    { 
	      uri = URI.createURI(xsdFile); 
	    } 
 
	    // Create a resource set, create a schema resource, and load the main  
schema file into it. 
	    ResourceSet resourceSet = new ResourceSetImpl(); 
	     resourceSet.getLoadOptions().put(XSDResourceImpl.XSD_TRACK_L OCATION,  
Boolean.TRUE); 
	    XSDResourceImpl xsdMainResource =  
(XSDResourceImpl)resourceSet.createResource(uri); 
	    xsdMainResource.setURI(uri); 
	    xsdMainResource.load(resourceSet.getLoadOptions()); 
 
	    // Get the first resource, i.e., the main resource and those that  
have been included or imported. 
	    Object resource = resourceSet.getResources().get(0); 
	    if (resource instanceof XSDResourceImpl) 
	     { 
	     	XSDResourceImpl xsdResource = (XSDResourceImpl)resource; 
	        XSDSchema xsdSchema = xsdResource.getSchema(); 
	        xsdSchema.validate(); 
	        	         
			/* 
			 * Schema file is valid if Diagnostics is empty 
			 */ 
	        if (!xsdSchema.getDiagnostics().isEmpty()) 
	        { 
	          for (Iterator i = xsdSchema.getDiagnostics().iterator();  
i.hasNext(); ) 
	          { 
	            XSDDiagnostic xsdDiagnostic = (XSDDiagnostic)i.next(); 
				 
	            String localizedSeverity = 
	             XSDPlugin.INSTANCE.getString("_UI_XSDDiagnosticSeverity_" +  
xsdDiagnostic.getSeverity()); 
	             
	            //Handle Error 
	           // DMParseError parserError = new  
DMParseError(4,"" ,xsdDiagnostic.getMessage(),xsdDiagnostic.getLine(),xsdDiagn ostic.getColumn()); 
	            	             
	            //m_error_List.add(parserError); 
	          } 
	          
	          //this.rootNode = null; 
	          xsdResource.unload(); 
	          return false; 
	        } 
	         
	            
	       
	        // If the user not selected root element set first element as  
root element 
	        if (m_rootElementName == null ||  
m_rootElementName.equalsIgnoreCase("")){ 
	        	Iterator i = xsdSchema.getContents().iterator(); 
	        	while(i.hasNext()){ 
					XSDSchemaContent  e = (XSDSchemaContent)i.next(); // probable root  
element 
					if (e instanceof XSDElementDeclaration){ 
						m_rootElementName = e.getElement().getAttribute("name"); 
						break; 
					} 
	        	} 
	        } 
 
	        processRoot(xsdSchema); 
	        xsdResource.unload(); 
	        return true; 
	      } 
	    return false; 
	} 
 
	private void processRoot(XSDSchema schema) 
	{ 
		//process each element directly under the 'schema' element 
		for(Iterator i = schema.getElementDeclarations().iterator();  
i.hasNext(); ) 
		{ 
			XSDElementDeclaration  e = (XSDElementDeclaration)i.next(); // probable  
root element 
			m_isRoot = true; 
			if (m_rootElementName != null &&  
!m_rootElementName.equalsIgnoreCase("")){ 
				if (m_rootElementName.equalsIgnoreCase(e.getName())){ 
					dumpContentItem(e, 0,""); 
				} 
			}else{ 
				dumpContentItem(e, 0,""); 
			} 
			flag = false; 
		} 
	} 
	/** 
	 * Method dumpContentItem. 
	 * @param item 
	 * @param level 
	 * 
	 * This is a recursive method called for handling (currently)  
XSDElementDeclaration, 
	 * XSDComplexTypeDefinition, XSDSimpleTypeDefinition,  
XSDAttributeDeclaration, 
	 * XSDModelGroupDefinition, XSDAttributeGroupDefinition 
	 * 
	 */ 
	private void dumpContentItem(XSDSchemaContent item, int level, String  
xPath) 
	{ 
		try{ 
			 
					 
		if(item instanceof XSDElementDeclaration) 
		{ 
 
			XSDElementDeclarationImpl elem = (XSDElementDeclarationImpl)item; 
 
			int min = m_minOccurrence; 
			int max = m_maxOccurrence; 
			if(elem.getName() != null) 
			 { 
				xPath = xPath+"/"+elem.getName(); 
				 
				printTree(xPath); 
				 
								 
			 } 
 
			 m_isRoot = false; // Need to do this after writing the root header, 
			 				    //because the processing of child elements starts here 
			 // Get the type definition of the Element 
			 XSDTypeDefinition elemTypeDef= elem.getTypeDefinition(); 
 
			 if(elemTypeDef==null &&  
elem.getResolvedElementDeclaration().getValue() == null) 
			 { 
			 	// For a reference 
			 	dumpContentItem(elem.getResolvedElementDeclaration(), level, xPath); 
 
			 }else if((elemTypeDef instanceof XSDSimpleTypeDefinition) &&  
 ((XSDSimpleTypeDefinition)elem.getTypeDefinition()).getConte nts().isEmpty()) 
			 { 
			 	// Element doesn't have any children i.e simpleContent but might have  
restrictions etc 
			 } 
			 else  // The 'type' attribute is another element in the same XSD file 
			 { 
			 	/* name of the Complex type must be ignored when an element refers to 
			 	 * it with the 'type' attribute 
			 	 */ 
			 	 if(elemTypeDef instanceof XSDComplexTypeDefinition) 
			 	{ 
			 		if(((XSDComplexTypeDefinition)elemTypeDef).getName()!=null ) 
			 		m_ignoreCpexTypeDefnName = true; 
			 	} 
			 	dumpContentItem(elemTypeDef, level, xPath); 
			 } 
		} 
		else if (item instanceof XSDComplexTypeDefinition) 
		{ 
 
			XSDComplexTypeDefinitionImpl cplex = (XSDComplexTypeDefinitionImpl)item; 
			int min = m_minOccurrence; 
			int max = m_maxOccurrence; 
 
 
			if(!m_ignoreCpexTypeDefnName && cplex.getName()!=null) 
			{ 
				xPath = xPath+"/"+cplex.getName(); 
			} 
			// Process the attributes 
			for(Iterator i = cplex.getAttributeContents().iterator(); i.hasNext(); ) 
			{ 
				XSDAttributeGroupContent att_grp = (XSDAttributeGroupContent) i.next(); 
 
			 	// For attribute group 
			 	if(att_grp instanceof XSDAttributeGroupDefinition) 
			 	{ 
			 		dumpContentItem(((XSDAttributeGroupDefinition)att_grp), level,  
xPath); 
			 		/*for(Iterator j =  
 ((XSDAttributeGroupDefinition)att_grp).getAttributeUses().it erator();  
j.hasNext(); ) 
			 		{ 
			 			j.next(); // need to take care 
			  
			 //dumpContentItem(((XSDAttributeUse)j.next()).getAttributeDe claration(),level); 
			 		} 
			 		*/ 
			 	}else if(att_grp instanceof XSDAttributeUse) 
			 	{ 
			 		 setAttributeOccurrences(((XSDAttributeUse)att_grp).getUse()) ; 
			  
		 dumpContentItem(((XSDAttributeUse)att_grp).getAttributeDecla ration(),level,  
xPath); 
			 	} 
			 	else 
			 	{ 
			 		System.out.println("2. UNHANDLED"); 
			 	} 
 
			} 
			// Process the element content if it is not equal to null 
			if(cplex.getContent() != null) 
			{ 
				if(cplex.getContent() instanceof XSDParticle) 
				{ 
					dumpParticle((XSDParticle)cplex.getContent(), level, xPath); 
				} 
				else if(cplex.getContent() instanceof XSDSimpleTypeDefinition) 
				{ 
					 dumpContentItem((XSDSimpleTypeDefinition)cplex.getContent(), level,  
xPath); 
				} 
				else 
				{ 
				 
					System.out.println("1. UNHANDLED"+ cplex.getContent().toString()); 
				} 
			} 
		} 
		else if (item instanceof XSDSimpleTypeDefinition) 
		{ 
			XSDSimpleTypeDefinition simple = (XSDSimpleTypeDefinition)item; 
			int min = m_minOccurrence; 
			int max = m_maxOccurrence; 
 
			xPath = xPath+"/"+simple.getName(); 
 
			if(simple.getContents() != null ) 
			{ 
				if(!simple.getContents().isEmpty()) 
				{ 
					for(Iterator i = simple.getContents().iterator(); i.hasNext(); ) 
					{ 
						XSDSimpleTypeDefinition child_simple =  
(XSDSimpleTypeDefinition)i.next(); 
						dumpContentItem(child_simple, level+1, xPath); 
					} 
				} 
				else 
				{ 
					System.out.println("4. UNHANDLED"); 
				} 
			} 
			else 
			{ 
				System.out.println("3. UNHANDLED"); 
			} 
		} 
		else if (item instanceof XSDAttributeDeclaration) 
		{ 
			XSDAttributeDeclaration attrib = (XSDAttributeDeclaration)item; 
 
			xPath = xPath+"/"+attrib.getName(); 
 
		} else if(item instanceof XSDModelGroupDefinition) 
		{ 
			// For sequence, all, choice 
			XSDModelGroupDefinition mgdef = (XSDModelGroupDefinition)item; 
			if(mgdef.getModelGroup() != null) 
			{ 
				for(Iterator i = mgdef.getModelGroup().getContents().iterator();  
i.hasNext(); ) 
				{ 
					XSDParticle pcle = (XSDParticle)i.next(); 
					dumpParticle(pcle, level+1, xPath); 
				} 
			} else 
			{ 
				// for "<xs:group ref= 
				dumpContentItem((mgdef.getResolvedModelGroupDefinition()), level,  
xPath); 
			} 
 
		} else if(item instanceof XSDAttributeGroupDefinition) 
		{ 
			XSDAttributeGroupDefinition att_grp = (XSDAttributeGroupDefinition)item; 
			if(!att_grp.getAttributeUses().isEmpty()) 
			{ 
				for(Iterator i = att_grp.getAttributeUses().iterator(); i.hasNext(); ) 
				{ 
					XSDAttributeUse att_use = (XSDAttributeUse)i.next(); 
					setAttributeOccurrences(att_use.getUse()); 
					dumpContentItem((att_use).getAttributeDeclaration(),level, xPath); 
				} 
			}else  // For an attributeGroup reference 
			{ 
				 //dumpContentItem(att_grp.getResolvedAttributeGroupDefinitio n(),  
level, xPath); 
			} 
 
		} 
		else 
		{ 
			// example : XSDAnnotation, XSDNotationDeclaration, XSDImport,  
XSDInclude, 
			if(item != null) 
				System.out.println("Unhandled Schema Content : "+ item.toString()); 
		} 
		}catch(Exception e) 
		{ 
			e.printStackTrace(); 
		} 
		// Set the class level helper variables to default values 
		m_minOccurrence = 1; 
		m_maxOccurrence = 1; 
		m_ignoreCpexTypeDefnName = false; 
		m_isRoot = false; 
 
	} 
 
	 //---------------------------------------------------------- ----------------------------------------------------- 
	 
	private void setAttributeOccurrences(XSDAttributeUseCategory e) 
	{ 
		if(e == XSDAttributeUseCategory.OPTIONAL_LITERAL) 
		 { 
		 	m_minOccurrence = 0; 
		 	m_maxOccurrence = 1; 
		 } else 
		if(e == XSDAttributeUseCategory.REQUIRED_LITERAL) 
		 { 
		 	m_minOccurrence = 1; 
		 	m_maxOccurrence = 1; 
		 } else 
		if(e == XSDAttributeUseCategory.PROHIBITED_LITERAL) 
		 { 
		 	m_minOccurrence = 0; 
		 	m_maxOccurrence = 0; 
		 } 
		 else // default 
		 { 
		 	m_minOccurrence = 0; 
		 	m_maxOccurrence = 1; 
 
		 } 
 
	} 
 
	/** 
	 * Method dumpParticle. 
	 * @param p 
	 * @param level 
	 */ 
	private void dumpParticle(XSDParticle p, int level,String xPath) 
	{ 
		m_minOccurrence = p.getMinOccurs(); 
 
		if (p.getMaxOccurs() == XSDParticle.UNBOUNDED ) { 
			m_maxOccurrence = Integer.MAX_VALUE; 
		}else { 
			m_maxOccurrence = p.getMaxOccurs(); 
		} 
        
		XSDParticleContent partContent= p.getContent(); 
		if(partContent instanceof XSDElementDeclaration) 
		{ 
			dumpContentItem((XSDElementDeclaration)partContent, level, xPath); 
		} 
		else if(partContent instanceof XSDModelGroupDefinition) 
		{ 
			dumpContentItem((XSDModelGroupDefinition)partContent, level, xPath); 
		} 
		else if(partContent instanceof XSDModelGroup) 
		{ 
			XSDModelGroup temp = (XSDModelGroup)partContent; 
 
			for(Iterator i = temp.getContents().iterator(); i.hasNext(); ) 
			{ 
				dumpParticle((XSDParticle)i.next(), level+1, xPath); 
			} 
		} 
		else 
		{ 
			System.out.println("unhandled particle "+ p.toString()); 
				//XSDTerm 
				//XSDWildcard 
		} 
	} 
	 
	 
	private void printTree(String xPath){ 
		 
		System.out.println(xPath); 
 
	} 
	 
	 
public static void main(String arg[]){ 
	try { 
		new XSDParserNEW().parseXSD("A.xsd","envelope"); 
	} catch (FileNotFoundException e) { 
		// TODO Auto-generated catch block 
		e.printStackTrace(); 
	} catch (IOException e) { 
		// TODO Auto-generated catch block 
		e.printStackTrace(); 
	} catch (Exception e) { 
		// TODO Auto-generated catch block 
		e.printStackTrace(); 
	} 
} 
		 
} 
 
These are sample files. 
 
A.XSD 
<?xml version="1.0" encoding="UTF-8"?> 
<!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by Param  
(GXS) --> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
xmlns="http://www.ean-ucc.org/schemas/1.3.1/eanucc"  
targetNamespace="http://www.ean-ucc.org/schemas/1.3.1/eanucc"  
elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
	<xsd:include schemaLocation="B.xsd"/> 
	<xsd:element name="envelope" type="EnvelopeType"/> 
	<xsd:complexType name="EnvelopeType"> 
		<xsd:sequence> 
			<xsd:element name="messageHeader" type="MessageHeaderType"/> 
		</xsd:sequence> 
	</xsd:complexType> 
</xsd:schema> 
 
 
B.XSD 
 
<?xml version="1.0" encoding="UTF-8"?> 
<!-- edited with XMLSPY v5 rel. 3 U (http://www.xmlspy.com) by Ewa Iwicka  
(EAN International) --> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
	<xsd:include schemaLocation="C.xsd"/> 
	<!--Entity Identification --> 
	<xsd:complexType name="MessageHeaderType"> 
		<xsd:sequence> 
			<xsd:element name="to" type="PartyIdentificationType" minOccurs="0"/> 
		</xsd:sequence> 
	</xsd:complexType> 
</xsd:schema> 
 
C.XSD 
 
<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
	<xsd:simpleType name="GlobalLocationNumberType"> 
		<xsd:restriction base="xsd:string"> 
			<xsd:pattern value="\d{13}"/> 
		</xsd:restriction> 
	</xsd:simpleType> 
	<xsd:complexType name="PartyIdentificationType"> 
		<xsd:sequence> 
			<xsd:choice> 
				<xsd:element name="gln" type="GlobalLocationNumberType"/> 
			</xsd:choice> 
		</xsd:sequence> 
	</xsd:complexType> 
</xsd:schema> 
 
 
Thanks for Help. 
Robert
 |  
 |  
  |  
| Re: XSD schema tree [message #61854 is a reply to message #61804] | 
Tue, 21 June 2005 08:08    | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: merks.ca.ibm.com 
 
This is a multi-part message in MIME format. 
--------------050100040901090906070309 
Content-Type: text/plain; charset=ISO-8859-15; format=flowed 
Content-Transfer-Encoding: 7bit 
 
Robert, 
 
When I ran this sample it produced: 
 
    /envelope 
    /envelope/messageHeader 
    /envelope/messageHeader/to 
    /envelope/messageHeader/to/gln 
 
I wonder if  99227 <https://bugs.eclipse.org/bugs/show_bug.cgi?id=99227>  
solved the problem?  Which version are you trying? 
 
 
Robert wrote: 
 
> Hi Ed Merks, 
> 
> Thanks for your response. 
> 
> I have gone through that link But not able to solve my problem. 
> Brief Des about my problem is 
> 
> I have A.XSD which Includes B.XSD and B.xsd includes C.XSD. 
> 
> I am able to resolve entity type referenced in B.XSD But not from C.XSD 
> My Requirement is to build schema tree. I am sending you sample  
> schemas and code which I have used (modified for demo purpose). 
> 
> 
> with the current code I am getting this as output 
> 
> /envelope 
> /envelope/messageHeader 
> /envelope/messageHeader/to 
> 
> Here the problem is Typedefination for element 'to' is defined in  
> C.xsd which is not resolved. 
> 
> I should get some thing like this 
> /envelope 
> /envelope/messageHeader 
> /envelope/messageHeader/to 
> /envelope/messageHeader/to/gln 
> 
> Here is the code I have used 
> 
> /* 
> * Created on Mar 9, 2005 
> * 
> * TODO To change the template for this generated file go to 
> * Window - Preferences - Java - Code Style - Code Templates 
> */ 
> package com.gxs.ai.ngwb.xsdparser; 
> 
> import java.io.File; 
> import java.io.FileNotFoundException; 
> import java.io.IOException; 
> import java.util.ArrayList; 
> import java.util.Iterator; 
> 
> 
> import javax.swing.tree.TreeNode; 
> 
> 
> import org.eclipse.emf.common.util.URI; 
> import org.eclipse.emf.ecore.resource.Resource; 
> import org.eclipse.emf.ecore.resource.ResourceSet; 
> import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; 
> import org.eclipse.xsd.XSDAttributeDeclaration; 
> import org.eclipse.xsd.XSDAttributeGroupContent; 
> import org.eclipse.xsd.XSDAttributeGroupDefinition; 
> import org.eclipse.xsd.XSDAttributeUse; 
> import org.eclipse.xsd.XSDAttributeUseCategory; 
> import org.eclipse.xsd.XSDComplexTypeDefinition; 
> import org.eclipse.xsd.XSDDiagnostic; 
> import org.eclipse.xsd.XSDElementDeclaration; 
> import org.eclipse.xsd.XSDModelGroup; 
> import org.eclipse.xsd.XSDModelGroupDefinition; 
> import org.eclipse.xsd.XSDParticle; 
> import org.eclipse.xsd.XSDParticleContent; 
> import org.eclipse.xsd.XSDPlugin; 
> import org.eclipse.xsd.XSDSchema; 
> import org.eclipse.xsd.XSDSchemaContent; 
> import org.eclipse.xsd.XSDSimpleTypeDefinition; 
> import org.eclipse.xsd.XSDTypeDefinition; 
> import org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl; 
> import org.eclipse.xsd.impl.XSDElementDeclarationImpl; 
> import org.eclipse.xsd.util.XSDResourceFactoryImpl; 
> import org.eclipse.xsd.util.XSDResourceImpl; 
> 
> 
> 
> /** 
> * @author tatinip 
> * 
> * TODO To change the template for this generated type comment go to 
> * Window - Preferences - Java - Code Style - Code Templates 
> */ 
> public class XSDParserNEW {    
> 
> 
>     private String m_XSDFileName; 
>     private ArrayList m_error_List ; 
>     private ArrayList m_warning_List ; 
> 
>     private int m_minOccurrence = 1; 
>     private int m_maxOccurrence = 1; 
>     private String m_rootElementName; 
>     private boolean m_isRoot = false; 
>     private boolean flag = false; 
>     private boolean m_ignoreCpexTypeDefnName = false; 
>      
>     private String m_modelName; 
>     private String m_modelDirection; 
>     protected TreeNode m_VirtualRoot; 
>     private String m_ModelType=""; 
>      
> 
>      
>     public XSDParserNEW(){ 
>         
>     }      
>     public boolean parseXSD(String xsdFileName ,   
>                             String rootElementName)     throws  
> FileNotFoundException , IOException , Exception 
>     { 
>             m_rootElementName = rootElementName; 
>             m_XSDFileName = xsdFileName; 
>                 
>          
>  Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).put( "xsd",  
> new XSDResourceFactoryImpl()); 
>         
>         try 
>         { 
>             boolean status = validateAndProcess(xsdFileName); 
>             return status; 
>         }catch(IOException ioe) 
>         { 
>             throw ioe; 
>         }catch(Exception e) 
>         {             throw e; 
>         } 
>      
>         
>     } 
>                                 
>     private boolean validateAndProcess(String xsdFile) throws Exception 
>     { 
>         /* 
>          *  This let's us test whether the string exists as a file. 
>          * It not, we try as a URI. 
>          */ 
> 
>         m_error_List = new ArrayList(); 
>         m_warning_List = new ArrayList(); 
>         
>         URI uri; 
>                 if (xsdFile==null ){ 
>             //DMParseError parserError = new DMParseError(4,"","Schema  
> file not specified",0,0); 
>            //m_error_List.add(parserError); 
> 
>             m_warning_List.add("Schema file not specified in Model  
> file " + m_modelName); 
>            //this.rootNode = null; 
>             return true; 
>         } 
>                 File file = new File(xsdFile); 
>         if (!file.exists()){ 
>            //DMParseError parserError = new DMParseError(4,"","File  
> Not Found",0,0); 
>            //m_error_List.add(parserError); 
>             m_warning_List.add("Schema file not Found " + xsdFile); 
>            //this.rootNode = null; 
>            return true; 
>         } 
>         if (file.isFile()) 
>         { 
>           uri = URI.createFileURI(file.getCanonicalFile().toString()); 
>         } 
>         else 
>         { 
>           uri = URI.createURI(xsdFile); 
>         } 
> 
>         // Create a resource set, create a schema resource, and load  
> the main schema file into it. 
>         ResourceSet resourceSet = new ResourceSetImpl(); 
>          
>  resourceSet.getLoadOptions().put(XSDResourceImpl.XSD_TRACK_L OCATION,  
> Boolean.TRUE); 
>         XSDResourceImpl xsdMainResource =  
> (XSDResourceImpl)resourceSet.createResource(uri); 
>         xsdMainResource.setURI(uri); 
>         xsdMainResource.load(resourceSet.getLoadOptions()); 
> 
>         // Get the first resource, i.e., the main resource and those  
> that have been included or imported. 
>         Object resource = resourceSet.getResources().get(0); 
>         if (resource instanceof XSDResourceImpl) 
>          { 
>              XSDResourceImpl xsdResource = (XSDResourceImpl)resource; 
>             XSDSchema xsdSchema = xsdResource.getSchema(); 
>             xsdSchema.validate(); 
>                                     /* 
>              * Schema file is valid if Diagnostics is empty 
>              */ 
>             if (!xsdSchema.getDiagnostics().isEmpty()) 
>             { 
>               for (Iterator i = xsdSchema.getDiagnostics().iterator();  
> i.hasNext(); ) 
>               { 
>                 XSDDiagnostic xsdDiagnostic = (XSDDiagnostic)i.next(); 
>                 
>                 String localizedSeverity = 
>                   
> XSDPlugin.INSTANCE.getString("_UI_XSDDiagnosticSeverity_" +  
> xsdDiagnostic.getSeverity()); 
>                                 //Handle Error 
>                // DMParseError parserError = new  
> DMParseError(4,"" ,xsdDiagnostic.getMessage(),xsdDiagnostic.getLine(),xsdDiagn ostic.getColumn());  
> 
>                                                  
> //m_error_List.add(parserError); 
>               } 
>                            //this.rootNode = null; 
>               xsdResource.unload(); 
>               return false; 
>             } 
>                                                  // If the user not  
> selected root element set first element as root element 
>             if (m_rootElementName == null ||  
> m_rootElementName.equalsIgnoreCase("")){ 
>                 Iterator i = xsdSchema.getContents().iterator(); 
>                 while(i.hasNext()){ 
>                     XSDSchemaContent  e = (XSDSchemaContent)i.next();  
> // probable root element 
>                     if (e instanceof XSDElementDeclaration){ 
>                         m_rootElementName =  
> e.getElement().getAttribute("name"); 
>                         break; 
>                     } 
>                 } 
>             } 
> 
>             processRoot(xsdSchema); 
>             xsdResource.unload(); 
>             return true; 
>           } 
>         return false; 
>     } 
> 
>     private void processRoot(XSDSchema schema) 
>     { 
>         //process each element directly under the 'schema' element 
>         for(Iterator i = schema.getElementDeclarations().iterator();  
> i.hasNext(); ) 
>         { 
>             XSDElementDeclaration  e =  
> (XSDElementDeclaration)i.next(); // probable root element 
>             m_isRoot = true; 
>             if (m_rootElementName != null &&  
> !m_rootElementName.equalsIgnoreCase("")){ 
>                 if (m_rootElementName.equalsIgnoreCase(e.getName())){ 
>                     dumpContentItem(e, 0,""); 
>                 } 
>             }else{ 
>                 dumpContentItem(e, 0,""); 
>             } 
>             flag = false; 
>         } 
>     } 
>     /** 
>      * Method dumpContentItem. 
>      * @param item 
>      * @param level 
>      * 
>      * This is a recursive method called for handling (currently)  
> XSDElementDeclaration, 
>      * XSDComplexTypeDefinition, XSDSimpleTypeDefinition,  
> XSDAttributeDeclaration, 
>      * XSDModelGroupDefinition, XSDAttributeGroupDefinition 
>      * 
>      */ 
>     private void dumpContentItem(XSDSchemaContent item, int level,  
> String xPath) 
>     { 
>         try{ 
>             
>                     
>         if(item instanceof XSDElementDeclaration) 
>         { 
> 
>             XSDElementDeclarationImpl elem =  
> (XSDElementDeclarationImpl)item; 
> 
>             int min = m_minOccurrence; 
>             int max = m_maxOccurrence; 
>             if(elem.getName() != null) 
>              { 
>                 xPath = xPath+"/"+elem.getName(); 
>                 
>                 printTree(xPath); 
>                 
>                                 
>              } 
> 
>              m_isRoot = false; // Need to do this after writing the  
> root header, 
>                                  //because the processing of child  
> elements starts here 
>              // Get the type definition of the Element 
>              XSDTypeDefinition elemTypeDef= elem.getTypeDefinition(); 
> 
>              if(elemTypeDef==null &&  
> elem.getResolvedElementDeclaration().getValue() == null) 
>              { 
>                  // For a reference 
>                  dumpContentItem(elem.getResolvedElementDeclaration(),  
> level, xPath); 
> 
>              }else if((elemTypeDef instanceof XSDSimpleTypeDefinition)  
> &&  
>  ((XSDSimpleTypeDefinition)elem.getTypeDefinition()).getConte nts().isEmpty())  
> 
>              { 
>                  // Element doesn't have any children i.e  
> simpleContent but might have restrictions etc 
>              } 
>              else  // The 'type' attribute is another element in the  
> same XSD file 
>              { 
>                  /* name of the Complex type must be ignored when an  
> element refers to 
>                   * it with the 'type' attribute 
>                   */ 
>                   if(elemTypeDef instanceof XSDComplexTypeDefinition) 
>                  { 
>                       
> if(((XSDComplexTypeDefinition)elemTypeDef).getName()!=null ) 
>                      m_ignoreCpexTypeDefnName = true; 
>                  } 
>                  dumpContentItem(elemTypeDef, level, xPath); 
>              } 
>         } 
>         else if (item instanceof XSDComplexTypeDefinition) 
>         { 
> 
>             XSDComplexTypeDefinitionImpl cplex =  
> (XSDComplexTypeDefinitionImpl)item; 
>             int min = m_minOccurrence; 
>             int max = m_maxOccurrence; 
> 
> 
>             if(!m_ignoreCpexTypeDefnName && cplex.getName()!=null) 
>             { 
>                 xPath = xPath+"/"+cplex.getName(); 
>             } 
>             // Process the attributes 
>             for(Iterator i = cplex.getAttributeContents().iterator();  
> i.hasNext(); ) 
>             { 
>                 XSDAttributeGroupContent att_grp =  
> (XSDAttributeGroupContent) i.next(); 
> 
>                  // For attribute group 
>                  if(att_grp instanceof XSDAttributeGroupDefinition) 
>                  { 
>                       
> dumpContentItem(((XSDAttributeGroupDefinition)att_grp), level, xPath); 
>                      /*for(Iterator j =  
>  ((XSDAttributeGroupDefinition)att_grp).getAttributeUses().it erator();  
> j.hasNext(); ) 
>                      { 
>                          j.next(); // need to take care 
>                           
>  //dumpContentItem(((XSDAttributeUse)j.next()).getAttributeDe claration(),level);  
> 
>                      } 
>                      */ 
>                  }else if(att_grp instanceof XSDAttributeUse) 
>                  { 
>                       
>  setAttributeOccurrences(((XSDAttributeUse)att_grp).getUse()) ; 
>                       
>  dumpContentItem(((XSDAttributeUse)att_grp).getAttributeDecla ration(),level,  
> xPath); 
>                  } 
>                  else 
>                  { 
>                      System.out.println("2. UNHANDLED"); 
>                  } 
> 
>             } 
>             // Process the element content if it is not equal to null 
>             if(cplex.getContent() != null) 
>             { 
>                 if(cplex.getContent() instanceof XSDParticle) 
>                 { 
>                     dumpParticle((XSDParticle)cplex.getContent(),  
> level, xPath); 
>                 } 
>                 else if(cplex.getContent() instanceof  
> XSDSimpleTypeDefinition) 
>                 { 
>                      
>  dumpContentItem((XSDSimpleTypeDefinition)cplex.getContent(), level,  
> xPath); 
>                 } 
>                 else 
>                 { 
>                 
>                     System.out.println("1. UNHANDLED"+  
> cplex.getContent().toString()); 
>                 } 
>             } 
>         } 
>         else if (item instanceof XSDSimpleTypeDefinition) 
>         { 
>             XSDSimpleTypeDefinition simple =  
> (XSDSimpleTypeDefinition)item; 
>             int min = m_minOccurrence; 
>             int max = m_maxOccurrence; 
> 
>             xPath = xPath+"/"+simple.getName(); 
> 
>             if(simple.getContents() != null ) 
>             { 
>                 if(!simple.getContents().isEmpty()) 
>                 { 
>                     for(Iterator i = simple.getContents().iterator();  
> i.hasNext(); ) 
>                     { 
>                         XSDSimpleTypeDefinition child_simple =  
> (XSDSimpleTypeDefinition)i.next(); 
>                         dumpContentItem(child_simple, level+1, xPath); 
>                     } 
>                 } 
>                 else 
>                 { 
>                     System.out.println("4. UNHANDLED"); 
>                 } 
>             } 
>             else 
>             { 
>                 System.out.println("3. UNHANDLED"); 
>             } 
>         } 
>         else if (item instanceof XSDAttributeDeclaration) 
>         { 
>             XSDAttributeDeclaration attrib =  
> (XSDAttributeDeclaration)item; 
> 
>             xPath = xPath+"/"+attrib.getName(); 
> 
>         } else if(item instanceof XSDModelGroupDefinition) 
>         { 
>             // For sequence, all, choice 
>             XSDModelGroupDefinition mgdef =  
> (XSDModelGroupDefinition)item; 
>             if(mgdef.getModelGroup() != null) 
>             { 
>                 for(Iterator i =  
> mgdef.getModelGroup().getContents().iterator(); i.hasNext(); ) 
>                 { 
>                     XSDParticle pcle = (XSDParticle)i.next(); 
>                     dumpParticle(pcle, level+1, xPath); 
>                 } 
>             } else 
>             { 
>                 // for "<xs:group ref= 
>                  
> dumpContentItem((mgdef.getResolvedModelGroupDefinition()), level, xPath); 
>             } 
> 
>         } else if(item instanceof XSDAttributeGroupDefinition) 
>         { 
>             XSDAttributeGroupDefinition att_grp =  
> (XSDAttributeGroupDefinition)item; 
>             if(!att_grp.getAttributeUses().isEmpty()) 
>             { 
>                 for(Iterator i =  
> att_grp.getAttributeUses().iterator(); i.hasNext(); ) 
>                 { 
>                     XSDAttributeUse att_use = (XSDAttributeUse)i.next(); 
>                     setAttributeOccurrences(att_use.getUse()); 
>                      
> dumpContentItem((att_use).getAttributeDeclaration(),level, xPath); 
>                 } 
>             }else  // For an attributeGroup reference 
>             { 
>                  
>  //dumpContentItem(att_grp.getResolvedAttributeGroupDefinitio n(),  
> level, xPath); 
>             } 
> 
>         } 
>         else 
>         { 
>             // example : XSDAnnotation, XSDNotationDeclaration,  
> XSDImport, XSDInclude, 
>             if(item != null) 
>                 System.out.println("Unhandled Schema Content : "+  
> item.toString()); 
>         } 
>         }catch(Exception e) 
>         { 
>             e.printStackTrace(); 
>         } 
>         // Set the class level helper variables to default values 
>         m_minOccurrence = 1; 
>         m_maxOccurrence = 1; 
>         m_ignoreCpexTypeDefnName = false; 
>         m_isRoot = false; 
> 
>     } 
> 
>      //---------------------------------------------------------- -----------------------------------------------------  
> 
>      
>     private void setAttributeOccurrences(XSDAttributeUseCategory e) 
>     { 
>         if(e == XSDAttributeUseCategory.OPTIONAL_LITERAL) 
>          { 
>              m_minOccurrence = 0; 
>              m_maxOccurrence = 1; 
>          } else 
>         if(e == XSDAttributeUseCategory.REQUIRED_LITERAL) 
>          { 
>              m_minOccurrence = 1; 
>              m_maxOccurrence = 1; 
>          } else 
>         if(e == XSDAttributeUseCategory.PROHIBITED_LITERAL) 
>          { 
>              m_minOccurrence = 0; 
>              m_maxOccurrence = 0; 
>          } 
>          else // default 
>          { 
>              m_minOccurrence = 0; 
>              m_maxOccurrence = 1; 
> 
>          } 
> 
>     } 
> 
>     /** 
>      * Method dumpParticle. 
>      * @param p 
>      * @param level 
>      */ 
>     private void dumpParticle(XSDParticle p, int level,String xPath) 
>     { 
>         m_minOccurrence = p.getMinOccurs(); 
> 
>         if (p.getMaxOccurs() == XSDParticle.UNBOUNDED ) { 
>             m_maxOccurrence = Integer.MAX_VALUE; 
>         }else { 
>             m_maxOccurrence = p.getMaxOccurs(); 
>         } 
>               XSDParticleContent partContent= p.getContent(); 
>         if(partContent instanceof XSDElementDeclaration) 
>         { 
>             dumpContentItem((XSDElementDeclaration)partContent, level,  
> xPath); 
>         } 
>         else if(partContent instanceof XSDModelGroupDefinition) 
>         { 
>             dumpContentItem((XSDModelGroupDefinition)partContent,  
> level, xPath); 
>         } 
>         else if(partContent instanceof XSDModelGroup) 
>         { 
>             XSDModelGroup temp = (XSDModelGroup)partContent; 
> 
>             for(Iterator i = temp.getContents().iterator();  
> i.hasNext(); ) 
>             { 
>                 dumpParticle((XSDParticle)i.next(), level+1, xPath); 
>             } 
>         } 
>         else 
>         { 
>             System.out.println("unhandled particle "+ p.toString()); 
>                 //XSDTerm 
>                 //XSDWildcard 
>         } 
>     } 
>      
>      
>     private void printTree(String xPath){ 
>         
>         System.out.println(xPath); 
> 
>     } 
>      
>      
> public static void main(String arg[]){ 
>     try { 
>         new XSDParserNEW().parseXSD("A.xsd","envelope"); 
>     } catch (FileNotFoundException e) { 
>         // TODO Auto-generated catch block 
>         e.printStackTrace(); 
>     } catch (IOException e) { 
>         // TODO Auto-generated catch block 
>         e.printStackTrace(); 
>     } catch (Exception e) { 
>         // TODO Auto-generated catch block 
>         e.printStackTrace(); 
>     } 
> } 
>         
> } 
> 
> These are sample files. 
> 
> A.XSD 
> <?xml version="1.0" encoding="UTF-8"?> 
> <!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by  
> Param (GXS) --> 
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
> xmlns="http://www.ean-ucc.org/schemas/1.3.1/eanucc"  
> targetNamespace="http://www.ean-ucc.org/schemas/1.3.1/eanucc"  
> elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
>     <xsd:include schemaLocation="B.xsd"/> 
>     <xsd:element name="envelope" type="EnvelopeType"/> 
>     <xsd:complexType name="EnvelopeType"> 
>         <xsd:sequence> 
>             <xsd:element name="messageHeader" type="MessageHeaderType"/> 
>         </xsd:sequence> 
>     </xsd:complexType> 
> </xsd:schema> 
> 
> 
> B.XSD 
> 
> <?xml version="1.0" encoding="UTF-8"?> 
> <!-- edited with XMLSPY v5 rel. 3 U (http://www.xmlspy.com) by Ewa  
> Iwicka (EAN International) --> 
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
> elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
>     <xsd:include schemaLocation="C.xsd"/> 
>     <!--Entity Identification --> 
>     <xsd:complexType name="MessageHeaderType"> 
>         <xsd:sequence> 
>             <xsd:element name="to" type="PartyIdentificationType"  
> minOccurs="0"/> 
>         </xsd:sequence> 
>     </xsd:complexType> 
> </xsd:schema> 
> 
> C.XSD 
> 
> <?xml version="1.0" encoding="UTF-8"?> 
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
> elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
>     <xsd:simpleType name="GlobalLocationNumberType"> 
>         <xsd:restriction base="xsd:string"> 
>             <xsd:pattern value="\d{13}"/> 
>         </xsd:restriction> 
>     </xsd:simpleType> 
>     <xsd:complexType name="PartyIdentificationType"> 
>         <xsd:sequence> 
>             <xsd:choice> 
>                 <xsd:element name="gln" type="GlobalLocationNumberType"/> 
>             </xsd:choice> 
>         </xsd:sequence> 
>     </xsd:complexType> 
> </xsd:schema> 
> 
> 
> Thanks for Help. 
> Robert 
> 
> 
> 
> 
> 
 
 
--------------050100040901090906070309 
Content-Type: text/html; charset=ISO-8859-15 
Content-Transfer-Encoding: 8bit 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
  <meta content="text/html;charset=ISO-8859-15" 
 http-equiv="Content-Type"> 
</head> 
<body bgcolor="#ffffff" text="#000000"> 
Robert,<br> 
<br> 
When I ran this sample it produced:<br> 
<blockquote>/envelope<br> 
/envelope/messageHeader<br> 
/envelope/messageHeader/to<br> 
/envelope/messageHeader/to/gln<br> 
</blockquote> 
I wonder if
 |  
 |  
  |   |   |   |   |  
| Re: XSD schema tree [message #62140 is a reply to message #62116] | 
Wed, 29 June 2005 17:36    | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: merks.ca.ibm.com 
 
Robert, 
 
Your code looks okay, but the problem is that the schema locations could  
be relative URIs (needing to be resolved against the base URI of the  
schema in which they occur) or could even be missing (for imports), in  
which case the namespace itself is used as a location. 
 
If you loaded the main remote file into a resource set, all the imports  
and includes will resolve (to the correct relative locations).  This  
will fill the resource set up with all the schema resources you need.   
You could look at the URI of each resource to know what file to copy  
over and you have the complete list.  This seems better. 
 
 
Robert wrote: 
 
> HI Ed Merks, 
> I am here again with new question. 
> 
> My requirement is I have to copy main Schema file and  
> imported/included schema files from remote site. 
> 
> I have another utility which will copy file from remote site to my  
> local disk if I send file name. 
> 
> So first time I will send main schema file to my utility. So that I  
> can have main file in local disk. 
> 
> Now my requirement comes here. I have to parse main schema file and  
> get Import/Include files list. 
> 
> So when I load schema and validate I am getting getAllDiagnostics  
> errors. Because I do not have imported files (they are not resolved) 
> 
> To get imported files I am using the below code. Please advise me  
> weather I am following right way or not ? 
> 
> I am posting my code here. The below method prints import/include file  
> names. 
> 
> 
> Thanks 
> Robert 
> 
>     public String[] getImpIncList(String schemaFileName)throws  
> IOException{ 
>         String impincList[]; 
>         
>         
>          
>  Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).put( "xsd",  
> new XSDResourceFactoryImpl()); 
>         
>         File file = new File(schemaFileName); 
>         URI uri; 
> 
>         if (file.isFile()) 
>         { 
>             uri = URI.createFileURI(file.getCanonicalFile().toString()); 
>         } 
>         else 
>         { 
>             uri = URI.createURI(schemaFileName); 
>         } 
> 
>         //     Create a resource set, create a schema resource, and  
> load the main schema file into it. 
>         ResourceSet resourceSet = new ResourceSetImpl(); 
>          
>  resourceSet.getLoadOptions().put(XSDResourceImpl.XSD_TRACK_L OCATION,  
> Boolean.TRUE); 
>         XSDResourceImpl xsdMainResource =  
> (XSDResourceImpl)resourceSet.createResource(URI.createURI("*.xsd ")); 
>         xsdMainResource.setURI(uri); 
>         xsdMainResource.load(resourceSet.getLoadOptions()); 
> 
>         //     Get the first resource, i.e., the main resource and  
> those that have been included or imported. 
>         Object resource = resourceSet.getResources().get(0); 
>         if (resource instanceof XSDResourceImpl) 
>         { 
>             XSDResourceImpl xsdResource = (XSDResourceImpl)resource; 
>             XSDSchema xsdSchema = xsdResource.getSchema(); 
>             xsdSchema.validate(); 
>             
>             /* 
>              *     Schema file is valid if Diagnostics is empty 
>              */ 
>             if (!xsdSchema.getAllDiagnostics().isEmpty()) 
>             { 
>                 m_error_List = new ArrayList(); 
>                 for (Iterator i =  
> xsdSchema.getAllDiagnostics().iterator(); i.hasNext(); ) 
>                 { 
>                     XSDDiagnostic xsdDiagnostic =  
> (XSDDiagnostic)i.next(); 
>                     EList elist = xsdDiagnostic.getComponents(); 
>                     if (elist != null){ 
>                         for (Iterator ie = elist.iterator();  
> ie.hasNext(); ) 
>                         { 
>                             Object obj = ie.next(); 
>                             if (obj instanceof XSDImport){ 
>                                 XSDImport imp = (XSDImport)obj; 
>                                  
> System.out.println(imp.getSchemaLocation()); 
>                             }else if (obj instanceof XSDInclude){ 
>                                 XSDInclude inc = (XSDInclude)obj; 
>                                  
> System.out.println(inc.getSchemaLocation()); 
>                             } 
>                         } 
>                     } 
> 
>                 } 
>                 return null; 
>                  } 
>            
>         } 
>         
>         
>         
>         
>         return null; 
>     } 
> 
>
 |  
 |  
  |   |   |  
| Re: XSD schema tree [message #65712 is a reply to message #65650] | 
Mon, 09 January 2006 10:34   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
erezh wrote: 
 
> i'm new to the XSD schema infoset API. 
> can u help me just extract the tree information from a given schema file? 
> a simple example would be appreciated (via email as well). 
 
Hi Erez, 
 
I'd invite you look at the samples in the org.eclipse.xsd.example  
plug-in.  XSDMainExample is a good place to start.  If you get stuck,  
please feel free to come back here and ask specific questions. 
 
Cheers, 
Dave
 |  
 |  
  |  
| Re: XSD schema tree [message #595689 is a reply to message #61612] | 
Tue, 14 June 2005 12:24   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Robert, 
 
It will help me to know what you've tried.  The XSD model really  
supports both a syntactic view of the schema as well as the abstract  
component model defined in the XML Schema specification.   For example,  
XSDSchema.getContents() will get you what's physically in the schema  
whereas something like XSDSchema.getElementDeclarations will get you all  
the elements logically part of the schema (via includes and imports).    
It's also possible that you are having problems with imports and  
includes not resolving because you've not loaded the schema with an  
absolute URI;  see the note about "How to get elements from the include  
schemas" which is two notes up from this one in the newsgroup. 
 
 
Robert wrote: 
 
> Hi, 
> I am trying to build tree from Schema.  And I am able to build the  
> tree from schema. 
> 
> But I am facing the problems if my schema has import/include schemas. 
> 
> It is like A.xsd imported B.xsd and B.xsd imports C.xsd. 
> 
> 
> Say I have Element 'xa' defined in A.xsd  and type="xbtype" which is  
> defined in B.xsd and in b.xsd the defination for 'xbtype' is defined  
> as type="xctype" and in C.xsd i have defined type for 'xctype'. but in  
> parser i am not able to get all the elements which are defined in C.XSD 
> 
> Please help me to resolve this issue 
> 
> Robert 
> 
> 
>
 |  
 |  
  |  
| Re: XSD schema tree [message #595752 is a reply to message #61660] | 
Tue, 21 June 2005 01:29   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Hi Ed Merks, 
 
Thanks for your response. 
 
I have gone through that link But not able to solve my problem. 
Brief Des about my problem is 
 
I have A.XSD which Includes B.XSD and B.xsd includes C.XSD. 
 
I am able to resolve entity type referenced in B.XSD But not from C.XSD 
My Requirement is to build schema tree. I am sending you sample schemas  
and code which I have used (modified for demo purpose). 
 
 
with the current code I am getting this as output 
 
/envelope 
/envelope/messageHeader 
/envelope/messageHeader/to 
 
Here the problem is Typedefination for element 'to' is defined in C.xsd  
which is not resolved. 
 
I should get some thing like this  
 
/envelope 
/envelope/messageHeader 
/envelope/messageHeader/to 
/envelope/messageHeader/to/gln 
 
Here is the code I have used 
 
/* 
 * Created on Mar 9, 2005 
 * 
 * TODO To change the template for this generated file go to 
 * Window - Preferences - Java - Code Style - Code Templates 
 */ 
package com.gxs.ai.ngwb.xsdparser; 
 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Iterator; 
 
 
import javax.swing.tree.TreeNode; 
 
 
import org.eclipse.emf.common.util.URI; 
import org.eclipse.emf.ecore.resource.Resource; 
import org.eclipse.emf.ecore.resource.ResourceSet; 
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; 
import org.eclipse.xsd.XSDAttributeDeclaration; 
import org.eclipse.xsd.XSDAttributeGroupContent; 
import org.eclipse.xsd.XSDAttributeGroupDefinition; 
import org.eclipse.xsd.XSDAttributeUse; 
import org.eclipse.xsd.XSDAttributeUseCategory; 
import org.eclipse.xsd.XSDComplexTypeDefinition; 
import org.eclipse.xsd.XSDDiagnostic; 
import org.eclipse.xsd.XSDElementDeclaration; 
import org.eclipse.xsd.XSDModelGroup; 
import org.eclipse.xsd.XSDModelGroupDefinition; 
import org.eclipse.xsd.XSDParticle; 
import org.eclipse.xsd.XSDParticleContent; 
import org.eclipse.xsd.XSDPlugin; 
import org.eclipse.xsd.XSDSchema; 
import org.eclipse.xsd.XSDSchemaContent; 
import org.eclipse.xsd.XSDSimpleTypeDefinition; 
import org.eclipse.xsd.XSDTypeDefinition; 
import org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl; 
import org.eclipse.xsd.impl.XSDElementDeclarationImpl; 
import org.eclipse.xsd.util.XSDResourceFactoryImpl; 
import org.eclipse.xsd.util.XSDResourceImpl; 
 
 
 
/** 
 * @author tatinip 
 * 
 * TODO To change the template for this generated type comment go to 
 * Window - Preferences - Java - Code Style - Code Templates 
 */ 
public class XSDParserNEW  
{	 
 
 
	private String m_XSDFileName; 
	private ArrayList m_error_List ; 
	private ArrayList m_warning_List ; 
 
	private int m_minOccurrence = 1; 
	private int m_maxOccurrence = 1; 
	private String m_rootElementName; 
	private boolean m_isRoot = false; 
	private boolean flag = false; 
	private boolean m_ignoreCpexTypeDefnName = false; 
	 
	private String m_modelName; 
	private String m_modelDirection; 
	protected TreeNode m_VirtualRoot; 
	private String m_ModelType=""; 
	 
 
	 
	public XSDParserNEW(){ 
		 
	}  
	 
	public boolean parseXSD(String xsdFileName ,   
						    String rootElementName)  
	throws FileNotFoundException , IOException , Exception 
	{ 
			m_rootElementName = rootElementName; 
			m_XSDFileName = xsdFileName; 
				 
		 Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).put( "xsd",  
new XSDResourceFactoryImpl()); 
		 
		try 
		{ 
			boolean status = validateAndProcess(xsdFileName); 
			return status; 
		}catch(IOException ioe) 
		{ 
			throw ioe; 
		}catch(Exception e) 
		{  
			throw e; 
		} 
	 
		 
	} 
								 
	private boolean validateAndProcess(String xsdFile) throws Exception 
	{ 
		/* 
		 *  This let's us test whether the string exists as a file. 
		 * It not, we try as a URI. 
		 */ 
 
		m_error_List = new ArrayList(); 
		m_warning_List = new ArrayList(); 
		 
	    URI uri; 
	     
	    if (xsdFile==null ){ 
	    	//DMParseError parserError = new DMParseError(4,"","Schema file not  
specified",0,0); 
            //m_error_List.add(parserError); 
 
	    	m_warning_List.add("Schema file not specified in Model file " +  
m_modelName); 
            //this.rootNode = null; 
	    	return true; 
	    } 
	     
	    File file = new File(xsdFile); 
	    if (!file.exists()){ 
            //DMParseError parserError = new DMParseError(4,"","File Not  
Found",0,0); 
            //m_error_List.add(parserError); 
	    	m_warning_List.add("Schema file not Found " + xsdFile); 
            //this.rootNode = null; 
            return true; 
	    } 
	    if (file.isFile()) 
	    { 
	      uri = URI.createFileURI(file.getCanonicalFile().toString()); 
	    } 
	    else 
	    { 
	      uri = URI.createURI(xsdFile); 
	    } 
 
	    // Create a resource set, create a schema resource, and load the main  
schema file into it. 
	    ResourceSet resourceSet = new ResourceSetImpl(); 
	     resourceSet.getLoadOptions().put(XSDResourceImpl.XSD_TRACK_L OCATION,  
Boolean.TRUE); 
	    XSDResourceImpl xsdMainResource =  
(XSDResourceImpl)resourceSet.createResource(uri); 
	    xsdMainResource.setURI(uri); 
	    xsdMainResource.load(resourceSet.getLoadOptions()); 
 
	    // Get the first resource, i.e., the main resource and those that  
have been included or imported. 
	    Object resource = resourceSet.getResources().get(0); 
	    if (resource instanceof XSDResourceImpl) 
	     { 
	     	XSDResourceImpl xsdResource = (XSDResourceImpl)resource; 
	        XSDSchema xsdSchema = xsdResource.getSchema(); 
	        xsdSchema.validate(); 
	        	         
			/* 
			 * Schema file is valid if Diagnostics is empty 
			 */ 
	        if (!xsdSchema.getDiagnostics().isEmpty()) 
	        { 
	          for (Iterator i = xsdSchema.getDiagnostics().iterator();  
i.hasNext(); ) 
	          { 
	            XSDDiagnostic xsdDiagnostic = (XSDDiagnostic)i.next(); 
				 
	            String localizedSeverity = 
	             XSDPlugin.INSTANCE.getString("_UI_XSDDiagnosticSeverity_" +  
xsdDiagnostic.getSeverity()); 
	             
	            //Handle Error 
	           // DMParseError parserError = new  
DMParseError(4,"" ,xsdDiagnostic.getMessage(),xsdDiagnostic.getLine(),xsdDiagn ostic.getColumn()); 
	            	             
	            //m_error_List.add(parserError); 
	          } 
	          
	          //this.rootNode = null; 
	          xsdResource.unload(); 
	          return false; 
	        } 
	         
	            
	       
	        // If the user not selected root element set first element as  
root element 
	        if (m_rootElementName == null ||  
m_rootElementName.equalsIgnoreCase("")){ 
	        	Iterator i = xsdSchema.getContents().iterator(); 
	        	while(i.hasNext()){ 
					XSDSchemaContent  e = (XSDSchemaContent)i.next(); // probable root  
element 
					if (e instanceof XSDElementDeclaration){ 
						m_rootElementName = e.getElement().getAttribute("name"); 
						break; 
					} 
	        	} 
	        } 
 
	        processRoot(xsdSchema); 
	        xsdResource.unload(); 
	        return true; 
	      } 
	    return false; 
	} 
 
	private void processRoot(XSDSchema schema) 
	{ 
		//process each element directly under the 'schema' element 
		for(Iterator i = schema.getElementDeclarations().iterator();  
i.hasNext(); ) 
		{ 
			XSDElementDeclaration  e = (XSDElementDeclaration)i.next(); // probable  
root element 
			m_isRoot = true; 
			if (m_rootElementName != null &&  
!m_rootElementName.equalsIgnoreCase("")){ 
				if (m_rootElementName.equalsIgnoreCase(e.getName())){ 
					dumpContentItem(e, 0,""); 
				} 
			}else{ 
				dumpContentItem(e, 0,""); 
			} 
			flag = false; 
		} 
	} 
	/** 
	 * Method dumpContentItem. 
	 * @param item 
	 * @param level 
	 * 
	 * This is a recursive method called for handling (currently)  
XSDElementDeclaration, 
	 * XSDComplexTypeDefinition, XSDSimpleTypeDefinition,  
XSDAttributeDeclaration, 
	 * XSDModelGroupDefinition, XSDAttributeGroupDefinition 
	 * 
	 */ 
	private void dumpContentItem(XSDSchemaContent item, int level, String  
xPath) 
	{ 
		try{ 
			 
					 
		if(item instanceof XSDElementDeclaration) 
		{ 
 
			XSDElementDeclarationImpl elem = (XSDElementDeclarationImpl)item; 
 
			int min = m_minOccurrence; 
			int max = m_maxOccurrence; 
			if(elem.getName() != null) 
			 { 
				xPath = xPath+"/"+elem.getName(); 
				 
				printTree(xPath); 
				 
								 
			 } 
 
			 m_isRoot = false; // Need to do this after writing the root header, 
			 				    //because the processing of child elements starts here 
			 // Get the type definition of the Element 
			 XSDTypeDefinition elemTypeDef= elem.getTypeDefinition(); 
 
			 if(elemTypeDef==null &&  
elem.getResolvedElementDeclaration().getValue() == null) 
			 { 
			 	// For a reference 
			 	dumpContentItem(elem.getResolvedElementDeclaration(), level, xPath); 
 
			 }else if((elemTypeDef instanceof XSDSimpleTypeDefinition) &&  
 ((XSDSimpleTypeDefinition)elem.getTypeDefinition()).getConte nts().isEmpty()) 
			 { 
			 	// Element doesn't have any children i.e simpleContent but might have  
restrictions etc 
			 } 
			 else  // The 'type' attribute is another element in the same XSD file 
			 { 
			 	/* name of the Complex type must be ignored when an element refers to 
			 	 * it with the 'type' attribute 
			 	 */ 
			 	 if(elemTypeDef instanceof XSDComplexTypeDefinition) 
			 	{ 
			 		if(((XSDComplexTypeDefinition)elemTypeDef).getName()!=null ) 
			 		m_ignoreCpexTypeDefnName = true; 
			 	} 
			 	dumpContentItem(elemTypeDef, level, xPath); 
			 } 
		} 
		else if (item instanceof XSDComplexTypeDefinition) 
		{ 
 
			XSDComplexTypeDefinitionImpl cplex = (XSDComplexTypeDefinitionImpl)item; 
			int min = m_minOccurrence; 
			int max = m_maxOccurrence; 
 
 
			if(!m_ignoreCpexTypeDefnName && cplex.getName()!=null) 
			{ 
				xPath = xPath+"/"+cplex.getName(); 
			} 
			// Process the attributes 
			for(Iterator i = cplex.getAttributeContents().iterator(); i.hasNext(); ) 
			{ 
				XSDAttributeGroupContent att_grp = (XSDAttributeGroupContent) i.next(); 
 
			 	// For attribute group 
			 	if(att_grp instanceof XSDAttributeGroupDefinition) 
			 	{ 
			 		dumpContentItem(((XSDAttributeGroupDefinition)att_grp), level,  
xPath); 
			 		/*for(Iterator j =  
 ((XSDAttributeGroupDefinition)att_grp).getAttributeUses().it erator();  
j.hasNext(); ) 
			 		{ 
			 			j.next(); // need to take care 
			  
			 //dumpContentItem(((XSDAttributeUse)j.next()).getAttributeDe claration(),level); 
			 		} 
			 		*/ 
			 	}else if(att_grp instanceof XSDAttributeUse) 
			 	{ 
			 		 setAttributeOccurrences(((XSDAttributeUse)att_grp).getUse()) ; 
			  
		 dumpContentItem(((XSDAttributeUse)att_grp).getAttributeDecla ration(),level,  
xPath); 
			 	} 
			 	else 
			 	{ 
			 		System.out.println("2. UNHANDLED"); 
			 	} 
 
			} 
			// Process the element content if it is not equal to null 
			if(cplex.getContent() != null) 
			{ 
				if(cplex.getContent() instanceof XSDParticle) 
				{ 
					dumpParticle((XSDParticle)cplex.getContent(), level, xPath); 
				} 
				else if(cplex.getContent() instanceof XSDSimpleTypeDefinition) 
				{ 
					 dumpContentItem((XSDSimpleTypeDefinition)cplex.getContent(), level,  
xPath); 
				} 
				else 
				{ 
				 
					System.out.println("1. UNHANDLED"+ cplex.getContent().toString()); 
				} 
			} 
		} 
		else if (item instanceof XSDSimpleTypeDefinition) 
		{ 
			XSDSimpleTypeDefinition simple = (XSDSimpleTypeDefinition)item; 
			int min = m_minOccurrence; 
			int max = m_maxOccurrence; 
 
			xPath = xPath+"/"+simple.getName(); 
 
			if(simple.getContents() != null ) 
			{ 
				if(!simple.getContents().isEmpty()) 
				{ 
					for(Iterator i = simple.getContents().iterator(); i.hasNext(); ) 
					{ 
						XSDSimpleTypeDefinition child_simple =  
(XSDSimpleTypeDefinition)i.next(); 
						dumpContentItem(child_simple, level+1, xPath); 
					} 
				} 
				else 
				{ 
					System.out.println("4. UNHANDLED"); 
				} 
			} 
			else 
			{ 
				System.out.println("3. UNHANDLED"); 
			} 
		} 
		else if (item instanceof XSDAttributeDeclaration) 
		{ 
			XSDAttributeDeclaration attrib = (XSDAttributeDeclaration)item; 
 
			xPath = xPath+"/"+attrib.getName(); 
 
		} else if(item instanceof XSDModelGroupDefinition) 
		{ 
			// For sequence, all, choice 
			XSDModelGroupDefinition mgdef = (XSDModelGroupDefinition)item; 
			if(mgdef.getModelGroup() != null) 
			{ 
				for(Iterator i = mgdef.getModelGroup().getContents().iterator();  
i.hasNext(); ) 
				{ 
					XSDParticle pcle = (XSDParticle)i.next(); 
					dumpParticle(pcle, level+1, xPath); 
				} 
			} else 
			{ 
				// for "<xs:group ref= 
				dumpContentItem((mgdef.getResolvedModelGroupDefinition()), level,  
xPath); 
			} 
 
		} else if(item instanceof XSDAttributeGroupDefinition) 
		{ 
			XSDAttributeGroupDefinition att_grp = (XSDAttributeGroupDefinition)item; 
			if(!att_grp.getAttributeUses().isEmpty()) 
			{ 
				for(Iterator i = att_grp.getAttributeUses().iterator(); i.hasNext(); ) 
				{ 
					XSDAttributeUse att_use = (XSDAttributeUse)i.next(); 
					setAttributeOccurrences(att_use.getUse()); 
					dumpContentItem((att_use).getAttributeDeclaration(),level, xPath); 
				} 
			}else  // For an attributeGroup reference 
			{ 
				 //dumpContentItem(att_grp.getResolvedAttributeGroupDefinitio n(),  
level, xPath); 
			} 
 
		} 
		else 
		{ 
			// example : XSDAnnotation, XSDNotationDeclaration, XSDImport,  
XSDInclude, 
			if(item != null) 
				System.out.println("Unhandled Schema Content : "+ item.toString()); 
		} 
		}catch(Exception e) 
		{ 
			e.printStackTrace(); 
		} 
		// Set the class level helper variables to default values 
		m_minOccurrence = 1; 
		m_maxOccurrence = 1; 
		m_ignoreCpexTypeDefnName = false; 
		m_isRoot = false; 
 
	} 
 
	 //---------------------------------------------------------- ----------------------------------------------------- 
	 
	private void setAttributeOccurrences(XSDAttributeUseCategory e) 
	{ 
		if(e == XSDAttributeUseCategory.OPTIONAL_LITERAL) 
		 { 
		 	m_minOccurrence = 0; 
		 	m_maxOccurrence = 1; 
		 } else 
		if(e == XSDAttributeUseCategory.REQUIRED_LITERAL) 
		 { 
		 	m_minOccurrence = 1; 
		 	m_maxOccurrence = 1; 
		 } else 
		if(e == XSDAttributeUseCategory.PROHIBITED_LITERAL) 
		 { 
		 	m_minOccurrence = 0; 
		 	m_maxOccurrence = 0; 
		 } 
		 else // default 
		 { 
		 	m_minOccurrence = 0; 
		 	m_maxOccurrence = 1; 
 
		 } 
 
	} 
 
	/** 
	 * Method dumpParticle. 
	 * @param p 
	 * @param level 
	 */ 
	private void dumpParticle(XSDParticle p, int level,String xPath) 
	{ 
		m_minOccurrence = p.getMinOccurs(); 
 
		if (p.getMaxOccurs() == XSDParticle.UNBOUNDED ) { 
			m_maxOccurrence = Integer.MAX_VALUE; 
		}else { 
			m_maxOccurrence = p.getMaxOccurs(); 
		} 
        
		XSDParticleContent partContent= p.getContent(); 
		if(partContent instanceof XSDElementDeclaration) 
		{ 
			dumpContentItem((XSDElementDeclaration)partContent, level, xPath); 
		} 
		else if(partContent instanceof XSDModelGroupDefinition) 
		{ 
			dumpContentItem((XSDModelGroupDefinition)partContent, level, xPath); 
		} 
		else if(partContent instanceof XSDModelGroup) 
		{ 
			XSDModelGroup temp = (XSDModelGroup)partContent; 
 
			for(Iterator i = temp.getContents().iterator(); i.hasNext(); ) 
			{ 
				dumpParticle((XSDParticle)i.next(), level+1, xPath); 
			} 
		} 
		else 
		{ 
			System.out.println("unhandled particle "+ p.toString()); 
				//XSDTerm 
				//XSDWildcard 
		} 
	} 
	 
	 
	private void printTree(String xPath){ 
		 
		System.out.println(xPath); 
 
	} 
	 
	 
public static void main(String arg[]){ 
	try { 
		new XSDParserNEW().parseXSD("A.xsd","envelope"); 
	} catch (FileNotFoundException e) { 
		// TODO Auto-generated catch block 
		e.printStackTrace(); 
	} catch (IOException e) { 
		// TODO Auto-generated catch block 
		e.printStackTrace(); 
	} catch (Exception e) { 
		// TODO Auto-generated catch block 
		e.printStackTrace(); 
	} 
} 
		 
} 
 
These are sample files. 
 
A.XSD 
<?xml version="1.0" encoding="UTF-8"?> 
<!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by Param  
(GXS) --> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
xmlns="http://www.ean-ucc.org/schemas/1.3.1/eanucc"  
targetNamespace="http://www.ean-ucc.org/schemas/1.3.1/eanucc"  
elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
	<xsd:include schemaLocation="B.xsd"/> 
	<xsd:element name="envelope" type="EnvelopeType"/> 
	<xsd:complexType name="EnvelopeType"> 
		<xsd:sequence> 
			<xsd:element name="messageHeader" type="MessageHeaderType"/> 
		</xsd:sequence> 
	</xsd:complexType> 
</xsd:schema> 
 
 
B.XSD 
 
<?xml version="1.0" encoding="UTF-8"?> 
<!-- edited with XMLSPY v5 rel. 3 U (http://www.xmlspy.com) by Ewa Iwicka  
(EAN International) --> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
	<xsd:include schemaLocation="C.xsd"/> 
	<!--Entity Identification --> 
	<xsd:complexType name="MessageHeaderType"> 
		<xsd:sequence> 
			<xsd:element name="to" type="PartyIdentificationType" minOccurs="0"/> 
		</xsd:sequence> 
	</xsd:complexType> 
</xsd:schema> 
 
C.XSD 
 
<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
	<xsd:simpleType name="GlobalLocationNumberType"> 
		<xsd:restriction base="xsd:string"> 
			<xsd:pattern value="\d{13}"/> 
		</xsd:restriction> 
	</xsd:simpleType> 
	<xsd:complexType name="PartyIdentificationType"> 
		<xsd:sequence> 
			<xsd:choice> 
				<xsd:element name="gln" type="GlobalLocationNumberType"/> 
			</xsd:choice> 
		</xsd:sequence> 
	</xsd:complexType> 
</xsd:schema> 
 
 
Thanks for Help. 
Robert
 |  
 |  
  |  
| Re: XSD schema tree [message #595775 is a reply to message #61804] | 
Tue, 21 June 2005 08:08   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
This is a multi-part message in MIME format. 
--------------050100040901090906070309 
Content-Type: text/plain; charset=ISO-8859-15; format=flowed 
Content-Transfer-Encoding: 7bit 
 
Robert, 
 
When I ran this sample it produced: 
 
    /envelope 
    /envelope/messageHeader 
    /envelope/messageHeader/to 
    /envelope/messageHeader/to/gln 
 
I wonder if  99227 <https://bugs.eclipse.org/bugs/show_bug.cgi?id=99227>  
solved the problem?  Which version are you trying? 
 
 
Robert wrote: 
 
> Hi Ed Merks, 
> 
> Thanks for your response. 
> 
> I have gone through that link But not able to solve my problem. 
> Brief Des about my problem is 
> 
> I have A.XSD which Includes B.XSD and B.xsd includes C.XSD. 
> 
> I am able to resolve entity type referenced in B.XSD But not from C.XSD 
> My Requirement is to build schema tree. I am sending you sample  
> schemas and code which I have used (modified for demo purpose). 
> 
> 
> with the current code I am getting this as output 
> 
> /envelope 
> /envelope/messageHeader 
> /envelope/messageHeader/to 
> 
> Here the problem is Typedefination for element 'to' is defined in  
> C.xsd which is not resolved. 
> 
> I should get some thing like this 
> /envelope 
> /envelope/messageHeader 
> /envelope/messageHeader/to 
> /envelope/messageHeader/to/gln 
> 
> Here is the code I have used 
> 
> /* 
> * Created on Mar 9, 2005 
> * 
> * TODO To change the template for this generated file go to 
> * Window - Preferences - Java - Code Style - Code Templates 
> */ 
> package com.gxs.ai.ngwb.xsdparser; 
> 
> import java.io.File; 
> import java.io.FileNotFoundException; 
> import java.io.IOException; 
> import java.util.ArrayList; 
> import java.util.Iterator; 
> 
> 
> import javax.swing.tree.TreeNode; 
> 
> 
> import org.eclipse.emf.common.util.URI; 
> import org.eclipse.emf.ecore.resource.Resource; 
> import org.eclipse.emf.ecore.resource.ResourceSet; 
> import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; 
> import org.eclipse.xsd.XSDAttributeDeclaration; 
> import org.eclipse.xsd.XSDAttributeGroupContent; 
> import org.eclipse.xsd.XSDAttributeGroupDefinition; 
> import org.eclipse.xsd.XSDAttributeUse; 
> import org.eclipse.xsd.XSDAttributeUseCategory; 
> import org.eclipse.xsd.XSDComplexTypeDefinition; 
> import org.eclipse.xsd.XSDDiagnostic; 
> import org.eclipse.xsd.XSDElementDeclaration; 
> import org.eclipse.xsd.XSDModelGroup; 
> import org.eclipse.xsd.XSDModelGroupDefinition; 
> import org.eclipse.xsd.XSDParticle; 
> import org.eclipse.xsd.XSDParticleContent; 
> import org.eclipse.xsd.XSDPlugin; 
> import org.eclipse.xsd.XSDSchema; 
> import org.eclipse.xsd.XSDSchemaContent; 
> import org.eclipse.xsd.XSDSimpleTypeDefinition; 
> import org.eclipse.xsd.XSDTypeDefinition; 
> import org.eclipse.xsd.impl.XSDComplexTypeDefinitionImpl; 
> import org.eclipse.xsd.impl.XSDElementDeclarationImpl; 
> import org.eclipse.xsd.util.XSDResourceFactoryImpl; 
> import org.eclipse.xsd.util.XSDResourceImpl; 
> 
> 
> 
> /** 
> * @author tatinip 
> * 
> * TODO To change the template for this generated type comment go to 
> * Window - Preferences - Java - Code Style - Code Templates 
> */ 
> public class XSDParserNEW {    
> 
> 
>     private String m_XSDFileName; 
>     private ArrayList m_error_List ; 
>     private ArrayList m_warning_List ; 
> 
>     private int m_minOccurrence = 1; 
>     private int m_maxOccurrence = 1; 
>     private String m_rootElementName; 
>     private boolean m_isRoot = false; 
>     private boolean flag = false; 
>     private boolean m_ignoreCpexTypeDefnName = false; 
>      
>     private String m_modelName; 
>     private String m_modelDirection; 
>     protected TreeNode m_VirtualRoot; 
>     private String m_ModelType=""; 
>      
> 
>      
>     public XSDParserNEW(){ 
>         
>     }      
>     public boolean parseXSD(String xsdFileName ,   
>                             String rootElementName)     throws  
> FileNotFoundException , IOException , Exception 
>     { 
>             m_rootElementName = rootElementName; 
>             m_XSDFileName = xsdFileName; 
>                 
>          
>  Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).put( "xsd",  
> new XSDResourceFactoryImpl()); 
>         
>         try 
>         { 
>             boolean status = validateAndProcess(xsdFileName); 
>             return status; 
>         }catch(IOException ioe) 
>         { 
>             throw ioe; 
>         }catch(Exception e) 
>         {             throw e; 
>         } 
>      
>         
>     } 
>                                 
>     private boolean validateAndProcess(String xsdFile) throws Exception 
>     { 
>         /* 
>          *  This let's us test whether the string exists as a file. 
>          * It not, we try as a URI. 
>          */ 
> 
>         m_error_List = new ArrayList(); 
>         m_warning_List = new ArrayList(); 
>         
>         URI uri; 
>                 if (xsdFile==null ){ 
>             //DMParseError parserError = new DMParseError(4,"","Schema  
> file not specified",0,0); 
>            //m_error_List.add(parserError); 
> 
>             m_warning_List.add("Schema file not specified in Model  
> file " + m_modelName); 
>            //this.rootNode = null; 
>             return true; 
>         } 
>                 File file = new File(xsdFile); 
>         if (!file.exists()){ 
>            //DMParseError parserError = new DMParseError(4,"","File  
> Not Found",0,0); 
>            //m_error_List.add(parserError); 
>             m_warning_List.add("Schema file not Found " + xsdFile); 
>            //this.rootNode = null; 
>            return true; 
>         } 
>         if (file.isFile()) 
>         { 
>           uri = URI.createFileURI(file.getCanonicalFile().toString()); 
>         } 
>         else 
>         { 
>           uri = URI.createURI(xsdFile); 
>         } 
> 
>         // Create a resource set, create a schema resource, and load  
> the main schema file into it. 
>         ResourceSet resourceSet = new ResourceSetImpl(); 
>          
>  resourceSet.getLoadOptions().put(XSDResourceImpl.XSD_TRACK_L OCATION,  
> Boolean.TRUE); 
>         XSDResourceImpl xsdMainResource =  
> (XSDResourceImpl)resourceSet.createResource(uri); 
>         xsdMainResource.setURI(uri); 
>         xsdMainResource.load(resourceSet.getLoadOptions()); 
> 
>         // Get the first resource, i.e., the main resource and those  
> that have been included or imported. 
>         Object resource = resourceSet.getResources().get(0); 
>         if (resource instanceof XSDResourceImpl) 
>          { 
>              XSDResourceImpl xsdResource = (XSDResourceImpl)resource; 
>             XSDSchema xsdSchema = xsdResource.getSchema(); 
>             xsdSchema.validate(); 
>                                     /* 
>              * Schema file is valid if Diagnostics is empty 
>              */ 
>             if (!xsdSchema.getDiagnostics().isEmpty()) 
>             { 
>               for (Iterator i = xsdSchema.getDiagnostics().iterator();  
> i.hasNext(); ) 
>               { 
>                 XSDDiagnostic xsdDiagnostic = (XSDDiagnostic)i.next(); 
>                 
>                 String localizedSeverity = 
>                   
> XSDPlugin.INSTANCE.getString("_UI_XSDDiagnosticSeverity_" +  
> xsdDiagnostic.getSeverity()); 
>                                 //Handle Error 
>                // DMParseError parserError = new  
> DMParseError(4,"" ,xsdDiagnostic.getMessage(),xsdDiagnostic.getLine(),xsdDiagn ostic.getColumn());  
> 
>                                                  
> //m_error_List.add(parserError); 
>               } 
>                            //this.rootNode = null; 
>               xsdResource.unload(); 
>               return false; 
>             } 
>                                                  // If the user not  
> selected root element set first element as root element 
>             if (m_rootElementName == null ||  
> m_rootElementName.equalsIgnoreCase("")){ 
>                 Iterator i = xsdSchema.getContents().iterator(); 
>                 while(i.hasNext()){ 
>                     XSDSchemaContent  e = (XSDSchemaContent)i.next();  
> // probable root element 
>                     if (e instanceof XSDElementDeclaration){ 
>                         m_rootElementName =  
> e.getElement().getAttribute("name"); 
>                         break; 
>                     } 
>                 } 
>             } 
> 
>             processRoot(xsdSchema); 
>             xsdResource.unload(); 
>             return true; 
>           } 
>         return false; 
>     } 
> 
>     private void processRoot(XSDSchema schema) 
>     { 
>         //process each element directly under the 'schema' element 
>         for(Iterator i = schema.getElementDeclarations().iterator();  
> i.hasNext(); ) 
>         { 
>             XSDElementDeclaration  e =  
> (XSDElementDeclaration)i.next(); // probable root element 
>             m_isRoot = true; 
>             if (m_rootElementName != null &&  
> !m_rootElementName.equalsIgnoreCase("")){ 
>                 if (m_rootElementName.equalsIgnoreCase(e.getName())){ 
>                     dumpContentItem(e, 0,""); 
>                 } 
>             }else{ 
>                 dumpContentItem(e, 0,""); 
>             } 
>             flag = false; 
>         } 
>     } 
>     /** 
>      * Method dumpContentItem. 
>      * @param item 
>      * @param level 
>      * 
>      * This is a recursive method called for handling (currently)  
> XSDElementDeclaration, 
>      * XSDComplexTypeDefinition, XSDSimpleTypeDefinition,  
> XSDAttributeDeclaration, 
>      * XSDModelGroupDefinition, XSDAttributeGroupDefinition 
>      * 
>      */ 
>     private void dumpContentItem(XSDSchemaContent item, int level,  
> String xPath) 
>     { 
>         try{ 
>             
>                     
>         if(item instanceof XSDElementDeclaration) 
>         { 
> 
>             XSDElementDeclarationImpl elem =  
> (XSDElementDeclarationImpl)item; 
> 
>             int min = m_minOccurrence; 
>             int max = m_maxOccurrence; 
>             if(elem.getName() != null) 
>              { 
>                 xPath = xPath+"/"+elem.getName(); 
>                 
>                 printTree(xPath); 
>                 
>                                 
>              } 
> 
>              m_isRoot = false; // Need to do this after writing the  
> root header, 
>                                  //because the processing of child  
> elements starts here 
>              // Get the type definition of the Element 
>              XSDTypeDefinition elemTypeDef= elem.getTypeDefinition(); 
> 
>              if(elemTypeDef==null &&  
> elem.getResolvedElementDeclaration().getValue() == null) 
>              { 
>                  // For a reference 
>                  dumpContentItem(elem.getResolvedElementDeclaration(),  
> level, xPath); 
> 
>              }else if((elemTypeDef instanceof XSDSimpleTypeDefinition)  
> &&  
>  ((XSDSimpleTypeDefinition)elem.getTypeDefinition()).getConte nts().isEmpty())  
> 
>              { 
>                  // Element doesn't have any children i.e  
> simpleContent but might have restrictions etc 
>              } 
>              else  // The 'type' attribute is another element in the  
> same XSD file 
>              { 
>                  /* name of the Complex type must be ignored when an  
> element refers to 
>                   * it with the 'type' attribute 
>                   */ 
>                   if(elemTypeDef instanceof XSDComplexTypeDefinition) 
>                  { 
>                       
> if(((XSDComplexTypeDefinition)elemTypeDef).getName()!=null ) 
>                      m_ignoreCpexTypeDefnName = true; 
>                  } 
>                  dumpContentItem(elemTypeDef, level, xPath); 
>              } 
>         } 
>         else if (item instanceof XSDComplexTypeDefinition) 
>         { 
> 
>             XSDComplexTypeDefinitionImpl cplex =  
> (XSDComplexTypeDefinitionImpl)item; 
>             int min = m_minOccurrence; 
>             int max = m_maxOccurrence; 
> 
> 
>             if(!m_ignoreCpexTypeDefnName && cplex.getName()!=null) 
>             { 
>                 xPath = xPath+"/"+cplex.getName(); 
>             } 
>             // Process the attributes 
>             for(Iterator i = cplex.getAttributeContents().iterator();  
> i.hasNext(); ) 
>             { 
>                 XSDAttributeGroupContent att_grp =  
> (XSDAttributeGroupContent) i.next(); 
> 
>                  // For attribute group 
>                  if(att_grp instanceof XSDAttributeGroupDefinition) 
>                  { 
>                       
> dumpContentItem(((XSDAttributeGroupDefinition)att_grp), level, xPath); 
>                      /*for(Iterator j =  
>  ((XSDAttributeGroupDefinition)att_grp).getAttributeUses().it erator();  
> j.hasNext(); ) 
>                      { 
>                          j.next(); // need to take care 
>                           
>  //dumpContentItem(((XSDAttributeUse)j.next()).getAttributeDe claration(),level);  
> 
>                      } 
>                      */ 
>                  }else if(att_grp instanceof XSDAttributeUse) 
>                  { 
>                       
>  setAttributeOccurrences(((XSDAttributeUse)att_grp).getUse()) ; 
>                       
>  dumpContentItem(((XSDAttributeUse)att_grp).getAttributeDecla ration(),level,  
> xPath); 
>                  } 
>                  else 
>                  { 
>                      System.out.println("2. UNHANDLED"); 
>                  } 
> 
>             } 
>             // Process the element content if it is not equal to null 
>             if(cplex.getContent() != null) 
>             { 
>                 if(cplex.getContent() instanceof XSDParticle) 
>                 { 
>                     dumpParticle((XSDParticle)cplex.getContent(),  
> level, xPath); 
>                 } 
>                 else if(cplex.getContent() instanceof  
> XSDSimpleTypeDefinition) 
>                 { 
>                      
>  dumpContentItem((XSDSimpleTypeDefinition)cplex.getContent(), level,  
> xPath); 
>                 } 
>                 else 
>                 { 
>                 
>                     System.out.println("1. UNHANDLED"+  
> cplex.getContent().toString()); 
>                 } 
>             } 
>         } 
>         else if (item instanceof XSDSimpleTypeDefinition) 
>         { 
>             XSDSimpleTypeDefinition simple =  
> (XSDSimpleTypeDefinition)item; 
>             int min = m_minOccurrence; 
>             int max = m_maxOccurrence; 
> 
>             xPath = xPath+"/"+simple.getName(); 
> 
>             if(simple.getContents() != null ) 
>             { 
>                 if(!simple.getContents().isEmpty()) 
>                 { 
>                     for(Iterator i = simple.getContents().iterator();  
> i.hasNext(); ) 
>                     { 
>                         XSDSimpleTypeDefinition child_simple =  
> (XSDSimpleTypeDefinition)i.next(); 
>                         dumpContentItem(child_simple, level+1, xPath); 
>                     } 
>                 } 
>                 else 
>                 { 
>                     System.out.println("4. UNHANDLED"); 
>                 } 
>             } 
>             else 
>             { 
>                 System.out.println("3. UNHANDLED"); 
>             } 
>         } 
>         else if (item instanceof XSDAttributeDeclaration) 
>         { 
>             XSDAttributeDeclaration attrib =  
> (XSDAttributeDeclaration)item; 
> 
>             xPath = xPath+"/"+attrib.getName(); 
> 
>         } else if(item instanceof XSDModelGroupDefinition) 
>         { 
>             // For sequence, all, choice 
>             XSDModelGroupDefinition mgdef =  
> (XSDModelGroupDefinition)item; 
>             if(mgdef.getModelGroup() != null) 
>             { 
>                 for(Iterator i =  
> mgdef.getModelGroup().getContents().iterator(); i.hasNext(); ) 
>                 { 
>                     XSDParticle pcle = (XSDParticle)i.next(); 
>                     dumpParticle(pcle, level+1, xPath); 
>                 } 
>             } else 
>             { 
>                 // for "<xs:group ref= 
>                  
> dumpContentItem((mgdef.getResolvedModelGroupDefinition()), level, xPath); 
>             } 
> 
>         } else if(item instanceof XSDAttributeGroupDefinition) 
>         { 
>             XSDAttributeGroupDefinition att_grp =  
> (XSDAttributeGroupDefinition)item; 
>             if(!att_grp.getAttributeUses().isEmpty()) 
>             { 
>                 for(Iterator i =  
> att_grp.getAttributeUses().iterator(); i.hasNext(); ) 
>                 { 
>                     XSDAttributeUse att_use = (XSDAttributeUse)i.next(); 
>                     setAttributeOccurrences(att_use.getUse()); 
>                      
> dumpContentItem((att_use).getAttributeDeclaration(),level, xPath); 
>                 } 
>             }else  // For an attributeGroup reference 
>             { 
>                  
>  //dumpContentItem(att_grp.getResolvedAttributeGroupDefinitio n(),  
> level, xPath); 
>             } 
> 
>         } 
>         else 
>         { 
>             // example : XSDAnnotation, XSDNotationDeclaration,  
> XSDImport, XSDInclude, 
>             if(item != null) 
>                 System.out.println("Unhandled Schema Content : "+  
> item.toString()); 
>         } 
>         }catch(Exception e) 
>         { 
>             e.printStackTrace(); 
>         } 
>         // Set the class level helper variables to default values 
>         m_minOccurrence = 1; 
>         m_maxOccurrence = 1; 
>         m_ignoreCpexTypeDefnName = false; 
>         m_isRoot = false; 
> 
>     } 
> 
>      //---------------------------------------------------------- -----------------------------------------------------  
> 
>      
>     private void setAttributeOccurrences(XSDAttributeUseCategory e) 
>     { 
>         if(e == XSDAttributeUseCategory.OPTIONAL_LITERAL) 
>          { 
>              m_minOccurrence = 0; 
>              m_maxOccurrence = 1; 
>          } else 
>         if(e == XSDAttributeUseCategory.REQUIRED_LITERAL) 
>          { 
>              m_minOccurrence = 1; 
>              m_maxOccurrence = 1; 
>          } else 
>         if(e == XSDAttributeUseCategory.PROHIBITED_LITERAL) 
>          { 
>              m_minOccurrence = 0; 
>              m_maxOccurrence = 0; 
>          } 
>          else // default 
>          { 
>              m_minOccurrence = 0; 
>              m_maxOccurrence = 1; 
> 
>          } 
> 
>     } 
> 
>     /** 
>      * Method dumpParticle. 
>      * @param p 
>      * @param level 
>      */ 
>     private void dumpParticle(XSDParticle p, int level,String xPath) 
>     { 
>         m_minOccurrence = p.getMinOccurs(); 
> 
>         if (p.getMaxOccurs() == XSDParticle.UNBOUNDED ) { 
>             m_maxOccurrence = Integer.MAX_VALUE; 
>         }else { 
>             m_maxOccurrence = p.getMaxOccurs(); 
>         } 
>               XSDParticleContent partContent= p.getContent(); 
>         if(partContent instanceof XSDElementDeclaration) 
>         { 
>             dumpContentItem((XSDElementDeclaration)partContent, level,  
> xPath); 
>         } 
>         else if(partContent instanceof XSDModelGroupDefinition) 
>         { 
>             dumpContentItem((XSDModelGroupDefinition)partContent,  
> level, xPath); 
>         } 
>         else if(partContent instanceof XSDModelGroup) 
>         { 
>             XSDModelGroup temp = (XSDModelGroup)partContent; 
> 
>             for(Iterator i = temp.getContents().iterator();  
> i.hasNext(); ) 
>             { 
>                 dumpParticle((XSDParticle)i.next(), level+1, xPath); 
>             } 
>         } 
>         else 
>         { 
>             System.out.println("unhandled particle "+ p.toString()); 
>                 //XSDTerm 
>                 //XSDWildcard 
>         } 
>     } 
>      
>      
>     private void printTree(String xPath){ 
>         
>         System.out.println(xPath); 
> 
>     } 
>      
>      
> public static void main(String arg[]){ 
>     try { 
>         new XSDParserNEW().parseXSD("A.xsd","envelope"); 
>     } catch (FileNotFoundException e) { 
>         // TODO Auto-generated catch block 
>         e.printStackTrace(); 
>     } catch (IOException e) { 
>         // TODO Auto-generated catch block 
>         e.printStackTrace(); 
>     } catch (Exception e) { 
>         // TODO Auto-generated catch block 
>         e.printStackTrace(); 
>     } 
> } 
>         
> } 
> 
> These are sample files. 
> 
> A.XSD 
> <?xml version="1.0" encoding="UTF-8"?> 
> <!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by  
> Param (GXS) --> 
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
> xmlns="http://www.ean-ucc.org/schemas/1.3.1/eanucc"  
> targetNamespace="http://www.ean-ucc.org/schemas/1.3.1/eanucc"  
> elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
>     <xsd:include schemaLocation="B.xsd"/> 
>     <xsd:element name="envelope" type="EnvelopeType"/> 
>     <xsd:complexType name="EnvelopeType"> 
>         <xsd:sequence> 
>             <xsd:element name="messageHeader" type="MessageHeaderType"/> 
>         </xsd:sequence> 
>     </xsd:complexType> 
> </xsd:schema> 
> 
> 
> B.XSD 
> 
> <?xml version="1.0" encoding="UTF-8"?> 
> <!-- edited with XMLSPY v5 rel. 3 U (http://www.xmlspy.com) by Ewa  
> Iwicka (EAN International) --> 
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
> elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
>     <xsd:include schemaLocation="C.xsd"/> 
>     <!--Entity Identification --> 
>     <xsd:complexType name="MessageHeaderType"> 
>         <xsd:sequence> 
>             <xsd:element name="to" type="PartyIdentificationType"  
> minOccurs="0"/> 
>         </xsd:sequence> 
>     </xsd:complexType> 
> </xsd:schema> 
> 
> C.XSD 
> 
> <?xml version="1.0" encoding="UTF-8"?> 
> <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
> elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
>     <xsd:simpleType name="GlobalLocationNumberType"> 
>         <xsd:restriction base="xsd:string"> 
>             <xsd:pattern value="\d{13}"/> 
>         </xsd:restriction> 
>     </xsd:simpleType> 
>     <xsd:complexType name="PartyIdentificationType"> 
>         <xsd:sequence> 
>             <xsd:choice> 
>                 <xsd:element name="gln" type="GlobalLocationNumberType"/> 
>             </xsd:choice> 
>         </xsd:sequence> 
>     </xsd:complexType> 
> </xsd:schema> 
> 
> 
> Thanks for Help. 
> Robert 
> 
> 
> 
> 
> 
 
 
--------------050100040901090906070309 
Content-Type: text/html; charset=ISO-8859-15 
Content-Transfer-Encoding: 8bit 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
  <meta content="text/html;charset=ISO-8859-15" 
 http-equiv="Content-Type"> 
</head> 
<body bgcolor="#ffffff" text="#000000"> 
Robert,<br> 
<br> 
When I ran this sample it produced:<br> 
<blockquote>/envelope<br> 
/envelope/messageHeader<br> 
/envelope/messageHeader/to<br> 
/envelope/messageHeader/to/gln<br> 
</blockquote> 
I wonder if
 |  
 |  
  |  
| Re: XSD schema tree [message #595783 is a reply to message #61854] | 
Tue, 21 June 2005 08:19   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Hi Ed Merks, 
 
Thanks for very quick response. 
 
I am using XSD 2.0.0 plugin and eclipse 3.0.0 
 
Can you suggest me which version of XSD plugin I have to use?. 
We are using eclipse 3.0.0 and that I can't change as we are developing  
all products in 3.0.0. 
 
Thanks again for quick response 
 
Robert.
 |  
 |  
  |  
| Re: XSD schema tree [message #595806 is a reply to message #61879] | 
Tue, 21 June 2005 09:12   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
This is a multi-part message in MIME format. 
--------------010906030604020109030401 
Content-Type: text/plain; charset=ISO-8859-15; format=flowed 
Content-Transfer-Encoding: 7bit 
 
Robert, 
 
I'm not able to reproduce this on an old 3.0.1 (with EMF/XSD/SDO 2.0.1)  
base I have kicking around either: 
 
 
Maybe the problem was fixed in the 2.0.x stream.  The 2.0.2 version of  
EMF/XSD/SDO is a released supported version that should still work with  
Eclipse 3.0.0.  
 
 
Robert wrote: 
 
> Hi Ed Merks, 
> 
> Thanks for very quick response. 
> 
> I am using XSD 2.0.0 plugin and eclipse 3.0.0 
> 
> Can you suggest me which version of XSD plugin I have to use?. 
> We are using eclipse 3.0.0 and that I can't change as we are  
> developing all products in 3.0.0. 
> 
> Thanks again for quick response 
> 
> Robert. 
> 
 
 
--------------010906030604020109030401 
Content-Type: multipart/related; 
 boundary="------------020404090102070604030907" 
 
 
--------------020404090102070604030907 
Content-Type: text/html; charset=ISO-8859-15 
Content-Transfer-Encoding: 8bit 
 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
  <meta content="text/html;charset=ISO-8859-15" 
 http-equiv="Content-Type"> 
</head> 
<body bgcolor="#ffffff" text="#000000"> 
Robert,<br> 
<br> 
I'm not able to reproduce this on an old 3.0.1 (with EMF/XSD/SDO 2.0.1) 
base I have kicking around either:<br> 
<blockquote><img src="cid:part1.09070607.03000306@ca.ibm.com" alt=""><br> 
</blockquote> 
Maybe the problem was fixed in the 2.0.x stream.
 |  
 |  
  |  
| Re: XSD schema tree [message #595818 is a reply to message #61932] | 
Tue, 21 June 2005 09:34   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Hi Ed Merks, 
 
Yes you are correct. This is fixed in 2.0.3 or may be before. 
 
Your valueble suggistions really helped us. 
 
Thanks again 
Robert.
 |  
 |  
  |  
| Re: XSD schema tree [message #595888 is a reply to message #61954] | 
Wed, 29 June 2005 09:43   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
HI Ed Merks, 
I am here again with new question. 
 
My requirement is I have to copy main Schema file and imported/included  
schema files from remote site. 
 
I have another utility which will copy file from remote site to my local  
disk if I send file name. 
 
So first time I will send main schema file to my utility. So that I can  
have main file in local disk. 
 
Now my requirement comes here. I have to parse main schema file and get  
Import/Include files list. 
 
So when I load schema and validate I am getting getAllDiagnostics errors.  
Because I do not have imported files (they are not resolved) 
 
To get imported files I am using the below code. Please advise me weather  
I am following right way or not ? 
 
I am posting my code here. The below method prints import/include file  
names. 
 
 
Thanks 
Robert 
 
	public String[] getImpIncList(String schemaFileName)throws IOException{ 
		String impincList[]; 
		 
		 
		 Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).put( "xsd",  
new XSDResourceFactoryImpl()); 
		 
		File file = new File(schemaFileName); 
		URI uri; 
 
		if (file.isFile()) 
		{ 
			uri = URI.createFileURI(file.getCanonicalFile().toString()); 
		} 
		else 
		{ 
			uri = URI.createURI(schemaFileName); 
		} 
 
		// 	Create a resource set, create a schema resource, and load the main  
schema file into it. 
		ResourceSet resourceSet = new ResourceSetImpl(); 
		 resourceSet.getLoadOptions().put(XSDResourceImpl.XSD_TRACK_L OCATION,  
Boolean.TRUE); 
		XSDResourceImpl xsdMainResource =  
(XSDResourceImpl)resourceSet.createResource(URI.createURI("*.xsd ")); 
		xsdMainResource.setURI(uri); 
		xsdMainResource.load(resourceSet.getLoadOptions()); 
 
		// 	Get the first resource, i.e., the main resource and those that have  
been included or imported. 
		Object resource = resourceSet.getResources().get(0); 
		if (resource instanceof XSDResourceImpl) 
		{ 
			XSDResourceImpl xsdResource = (XSDResourceImpl)resource; 
			XSDSchema xsdSchema = xsdResource.getSchema(); 
			xsdSchema.validate(); 
			 
			/* 
			 * 	Schema file is valid if Diagnostics is empty 
			 */ 
			if (!xsdSchema.getAllDiagnostics().isEmpty()) 
			{ 
				m_error_List = new ArrayList(); 
				for (Iterator i = xsdSchema.getAllDiagnostics().iterator();  
i.hasNext(); ) 
				{ 
					XSDDiagnostic xsdDiagnostic = (XSDDiagnostic)i.next(); 
					EList elist = xsdDiagnostic.getComponents(); 
					if (elist != null){ 
						for (Iterator ie = elist.iterator(); ie.hasNext(); ) 
						{ 
							Object obj = ie.next(); 
							if (obj instanceof XSDImport){ 
								XSDImport imp = (XSDImport)obj; 
								System.out.println(imp.getSchemaLocation()); 
							}else if (obj instanceof XSDInclude){ 
								XSDInclude inc = (XSDInclude)obj; 
								System.out.println(inc.getSchemaLocation()); 
							} 
						} 
					} 
 
				} 
				return null; 
       
			} 
     
		 
		} 
		 
		 
		 
		 
		return null; 
	}
 |  
 |  
  |  
| Re: XSD schema tree [message #595894 is a reply to message #62116] | 
Wed, 29 June 2005 17:36   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Robert, 
 
Your code looks okay, but the problem is that the schema locations could  
be relative URIs (needing to be resolved against the base URI of the  
schema in which they occur) or could even be missing (for imports), in  
which case the namespace itself is used as a location. 
 
If you loaded the main remote file into a resource set, all the imports  
and includes will resolve (to the correct relative locations).  This  
will fill the resource set up with all the schema resources you need.   
You could look at the URI of each resource to know what file to copy  
over and you have the complete list.  This seems better. 
 
 
Robert wrote: 
 
> HI Ed Merks, 
> I am here again with new question. 
> 
> My requirement is I have to copy main Schema file and  
> imported/included schema files from remote site. 
> 
> I have another utility which will copy file from remote site to my  
> local disk if I send file name. 
> 
> So first time I will send main schema file to my utility. So that I  
> can have main file in local disk. 
> 
> Now my requirement comes here. I have to parse main schema file and  
> get Import/Include files list. 
> 
> So when I load schema and validate I am getting getAllDiagnostics  
> errors. Because I do not have imported files (they are not resolved) 
> 
> To get imported files I am using the below code. Please advise me  
> weather I am following right way or not ? 
> 
> I am posting my code here. The below method prints import/include file  
> names. 
> 
> 
> Thanks 
> Robert 
> 
>     public String[] getImpIncList(String schemaFileName)throws  
> IOException{ 
>         String impincList[]; 
>         
>         
>          
>  Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap( ).put( "xsd",  
> new XSDResourceFactoryImpl()); 
>         
>         File file = new File(schemaFileName); 
>         URI uri; 
> 
>         if (file.isFile()) 
>         { 
>             uri = URI.createFileURI(file.getCanonicalFile().toString()); 
>         } 
>         else 
>         { 
>             uri = URI.createURI(schemaFileName); 
>         } 
> 
>         //     Create a resource set, create a schema resource, and  
> load the main schema file into it. 
>         ResourceSet resourceSet = new ResourceSetImpl(); 
>          
>  resourceSet.getLoadOptions().put(XSDResourceImpl.XSD_TRACK_L OCATION,  
> Boolean.TRUE); 
>         XSDResourceImpl xsdMainResource =  
> (XSDResourceImpl)resourceSet.createResource(URI.createURI("*.xsd ")); 
>         xsdMainResource.setURI(uri); 
>         xsdMainResource.load(resourceSet.getLoadOptions()); 
> 
>         //     Get the first resource, i.e., the main resource and  
> those that have been included or imported. 
>         Object resource = resourceSet.getResources().get(0); 
>         if (resource instanceof XSDResourceImpl) 
>         { 
>             XSDResourceImpl xsdResource = (XSDResourceImpl)resource; 
>             XSDSchema xsdSchema = xsdResource.getSchema(); 
>             xsdSchema.validate(); 
>             
>             /* 
>              *     Schema file is valid if Diagnostics is empty 
>              */ 
>             if (!xsdSchema.getAllDiagnostics().isEmpty()) 
>             { 
>                 m_error_List = new ArrayList(); 
>                 for (Iterator i =  
> xsdSchema.getAllDiagnostics().iterator(); i.hasNext(); ) 
>                 { 
>                     XSDDiagnostic xsdDiagnostic =  
> (XSDDiagnostic)i.next(); 
>                     EList elist = xsdDiagnostic.getComponents(); 
>                     if (elist != null){ 
>                         for (Iterator ie = elist.iterator();  
> ie.hasNext(); ) 
>                         { 
>                             Object obj = ie.next(); 
>                             if (obj instanceof XSDImport){ 
>                                 XSDImport imp = (XSDImport)obj; 
>                                  
> System.out.println(imp.getSchemaLocation()); 
>                             }else if (obj instanceof XSDInclude){ 
>                                 XSDInclude inc = (XSDInclude)obj; 
>                                  
> System.out.println(inc.getSchemaLocation()); 
>                             } 
>                         } 
>                     } 
> 
>                 } 
>                 return null; 
>                  } 
>            
>         } 
>         
>         
>         
>         
>         return null; 
>     } 
> 
>
 |  
 |  
  |  
| Re: XSD schema tree [message #597425 is a reply to message #61612] | 
Sun, 08 January 2006 05:16   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
Originally posted by: erezh.magicsoftware.com 
 
hi, 
i'm new to the XSD schema infoset API. 
can u help me just extract the tree information from a given schema file? 
a simple example would be appreciated (via email as well). 
 
10x 
erez
 |  
 |  
  |   |  
| Re: XSD schema tree [message #597444 is a reply to message #65650] | 
Mon, 09 January 2006 10:34   | 
 
Eclipse User  | 
 | 
 | 
   | 
 
erezh wrote: 
 
> i'm new to the XSD schema infoset API. 
> can u help me just extract the tree information from a given schema file? 
> a simple example would be appreciated (via email as well). 
 
Hi Erez, 
 
I'd invite you look at the samples in the org.eclipse.xsd.example  
plug-in.  XSDMainExample is a good place to start.  If you get stuck,  
please feel free to come back here and ask specific questions. 
 
Cheers, 
Dave
 |  
 |  
  |   
Goto Forum:
 
 Current Time: Mon Nov 03 18:56:04 EST 2025 
 Powered by  FUDForum. Page generated in 0.31639 seconds  
 |