2010-11-15 34 views
3

J'utilise Xerces2-j d'Apache pour analyser ma XSD. J'essaye d'obtenir l'information de type de données pour les déclarations d'élément/attribut dans le XSD.Attribut/Élément de schéma XML Xerces2-j Type de données de déclaration

Voici un exemple XSD:

<xs:element name="Pretzel"> 
    ... 
    <xs:attribute name="Flavor" type="xs:string"/> 
    <xs:attribute name="ProductID" type="xs:nonNegativeInteger"/> 
    ... 
</xs:element> 

Dans ce cas, je veux les types de données de la saveur et ProductID attributs. Selon les W3C Schema API et its Xerces2-j implementation, getActualVCType() de XSAttributeDeclaration me donnera ce que je veux. Mais pour moi cette méthode renvoie toujours 45, ce qui est UNAVAILABLE_DT. Est-ce un bug dans Xerces2-j, ou est-ce que je ne comprends que l'API? Si je le suis, j'apprécierais que quelqu'un puisse me diriger vers la bonne direction ici.

+0

bosse. Personne ne sait? :( –

Répondre

0

Vous cherchez à utiliser la méthode

XSAttributeDeclaration.getTypeDefinition(); // returns XSSimpleTypeDefinition 

pour les types simples et/ou éventuellement

pour les types complexes.

La méthode getActualVCType() est dépréciée, et son getValueConstraintValue d'appel alternatif() getActualValueType(). Regarde dans un soi-disant value constraint qui est pas ce que vous recherchez. Cet argument est également soutenu par le code XSAttributeDecl.java:

 // variable definition 
48  // value constraint type: default, fixed or !specified 
49  short fConstraintType = XSConstants.VC_NONE; 

et

183 public short getActualVCType() { 
184  return getConstraintType() == XSConstants.VC_NONE ? 
185    XSConstants.UNAVAILABLE_DT : 
186    fDefault.actualValueType; 
187 } 

avec

136 
137 public short getConstraintType() { 
138  return fConstraintType; 
139 } 

suggère que vous êtes bien trouvé UNAVAILABLE_DT parce qu'il est pas défini. Je suggère de regarder dans les méthodes de XSSimpleTypeDefinition, cela me semble prometteur.