XML - статьи


Использование возможностей абстрактных отношений Infoset - часть 2


Листинг 2. Поиск случаев несовместимости

// Detect name collisions between top-level elems and attrs // (Обнаруживает конфликт имен между высокоуровневыми // элементами и атрибутами) List elementNames = getElementNames(complexType); List attributeNames = getAttributeNames(complexType); attributeNames.retainAll(elementNames); if (!attributeNames.isEmpty()) { // Report the name collision and return... // (Сообщает о конфликте имен и возвращает...) }

// Now check for any attribute wildcards, which we // can't really change into elements // (Проверяет групповые символы, которые нельзя // превратить в элементы) XSDWildcard attributeWildcard = complexType.getAttributeWildcard(); if (null != attributeWildcard) { // Report an incompatible wildcard and return... // (Сообщает о несовместимых групповых символах имен и возвращает...) }

// Check the content for other incompatible conditions like // groups with choice or all or a simpleType // (Проверяет содержание на другие несовместимые условия, как // группы с выбором или все или simpleType) XSDComplexTypeContent complexTypeContent = complexType.getContent(); if (complexTypeContent instanceof XSDSimpleTypeDefinition) { // Report a simple type as incompatible and return... // (Сообщает о несовместимых простых типах и возвращает...) } else if (null != complexTypeContent) { XSDTerm particleTerm = ((XSDParticle)complexTypeContent).getTerm();

if (particleTerm instanceof XSDModelGroup) { XSDCompositor compositor = ((XSDModelGroup)particleTerm).getCompositor(); if ((XSDCompositor.ALL_LITERAL == compositor) (XSDCompositor.CHOICE_LITERAL == compositor)) { // Report an incompatible group type and return... // (Сообщает о несовместимых типах групп и возвращает...) } } // more checks for wildcards, etc. // (еще проверки групповых символов и т.д.) }

Примечание. В этом примере приведен не весь код, используемый для обнаружения случаев несовместимости; пожалуйста, скачайте zip-файл с примерами (см. ), чтобы увидеть его целиком. Программа MakeSoapCompatible.java тщательно спроектирована, в ней приводятся подробные комментарии, указывающие, как манипулировать схемами с помощью этой Модели. Их изучение является необходимым условием, если вы хотите углубиться свои знания.




Начало  Назад  Вперед



Книжный магазин