Leitura de arquivos XSD

Olá,
alguém sabe se existe alguma API para parse de arquivos XSD que permita a consulta das regras existentes no arquivo.
Simplesmente ler o XSD como um XML comum não funciona pois eu teria que reescrever todas as regras já contidas no XSD.
Obrigado

tem um exemplo bem básico no meu site que valida um xml usando um xsd…veja se tem alguma coisa q te ajuda…

http://www.giullianomorroni.com/articles/19

Obrigado Giulliano, mas isso ainda não resolve meu problema.
O seu exemplo serve perfeitamente pra validar um XML contra um esquema, mas o que preciso é verificar as regras de montagem do XML.
Utilizando o seu exemplo pra explicar melhor, como eu identifico essas infomações:

  • caso eu queira criar um novo shiporder, quais elementos eu posso adicionar abaixo dele?
  • imagine que o elemento name não seja do tipo string, e sim uma referência para outro complex type. Como recupero os elementos que podem ser incluídos no nome?

segue um excerto do meu xsd:

<xs:include schemaLocation="SCL_Substation.xsd" /> <xs:include schemaLocation="SCL_DataTypeTemplates.xsd" /> <xs:element name="SCL"> <xs:complexType> <xs:complexContent> <xs:extension base="tBaseElement"> <xs:sequence> <xs:element name="Header" type="tHeader"/> <xs:element ref="Substation" minOccurs="0" maxOccurs="unbounded" /> <xs:element ref="DataTypeTemplates" minOccurs="0" /> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
No SCL_Substation.xsd tenho as informações do complex type Substation:

<xs:complexType name="tSubstation"> <xs:complexContent> <xs:extension base="tEquipmentContainer"> <xs:sequence> <xs:element name="VoltageLevel" type="tVoltageLevel" maxOccurs="unbounded"> <xs:unique name="uniqueBayInVoltageLevel"> <xs:selector xpath="./scl:Bay" /> <xs:field xpath="@name" /> </xs:unique> <xs:element name="Function" type="tFunction" minOccurs="0" maxOccurs="unbounded"> <xs:unique name="uniqueSubFunctionInFunction"> <xs:selector xpath="./scl:SubFunction" /> <xs:field xpath="@name" /> </xs:unique> <xs:unique name="uniqueGeneralEquipmentInFunction"> <xs:selector xpath="./scl:GeneralEquipment" /> <xs:field xpath="@name" /> </xs:unique> </xs:element> </xs:sequence> </xs:extension> </xs:complexContent> </xs:complexType>
O que preciso é recuperar as regras de montagem de um elemento Substation.
Se alguém tiver alguma idéia eu agradeço.

Obrigado