Тип данных Xerces2-j XML-атрибута / объявления элемента - PullRequest
3 голосов
/ 15 ноября 2010

Я использую Apache Xerces2-j для разбора моего XSD.Я пытаюсь получить информацию о типе данных для объявлений элемента / атрибута в XSD.

Вот пример XSD:

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

В этом случае я бы хотел получить типы данных атрибутов Flavor и ProductID ,В соответствии с API схемы W3C и его реализацией Xerces2-j , getActualVCType () XSAttributeDeclaration получит мне то, что я хочу.Но для меня этот метод всегда возвращает 45, что равно UNAVAILABLE_DT .Это ошибка в Xerces2-j, или я просто неправильно понимаю API?Если бы я был, я был бы признателен, если бы кто-то мог указать мне правильное направление здесь.

1 Ответ

0 голосов
/ 17 февраля 2011

Вы хотите использовать метод

XSAttributeDeclaration.getTypeDefinition(); // returns XSSimpleTypeDefinition

для простых типов и / или, возможно,

XSAttributeDeclaration.getEnclosingCTDefinition(); // returns XSComplexTypeDefinition

для сложных типов.

Метод getActualVCType () устарел, и его альтернативный вызов getValueConstraintValue (). GetActualValueType () ищет так называемое ограничение значения что не то, что вы ищете. Этот аргумент также поддерживается кодом в XSAttributeDecl.java :

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

и

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

с

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

предполагает, что вы действительно получаете UNAVAILABLE_DT, потому что он не установлен. Я предлагаю изучить методы XSSimpleTypeDefinition, это выглядит многообещающе для меня.

...