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
Leitura de arquivos XSD
2 Respostas
tem um exemplo bem básico no meu site que valida um xml usando um xsd…veja se tem alguma coisa q te ajuda…
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