XML-схема: Установка значения по умолчанию для complexType?

Исключения следует использовать только в действительно исключительных случаях

Похоже, что использование исключений свирепствовало в проектах, над которыми я недавно работал.

Вот пример:

У нас есть фильтры, которые перехватывают веб-запросы. Фильтр вызывает средство проверки, и задание проверяет, имеет ли запрос определенные входные параметры, и проверяет параметры. Вы устанавливаете поля для проверки, и абстрактный класс проверяет, чтобы параметры не были пустыми, а затем вызывает метод screen (), реализованный вашим конкретным классом, для более расширенной проверки:

public boolean processScreener(HttpServletRequest req, HttpServletResponse resp, FilterConfig filterConfig) throws Exception{           
            // 
            if (!checkFieldExistence(req)){
                    return false;
            }
            return screen(req,resp,filterConfig);
    }

That checkFieldExistance ( req) метод никогда не возвращает false. Он возвращает true, если ни одно из полей отсутствует, и выдает исключение, если поле отсутствует.

Я знаю, что это плохой дизайн, но отчасти проблема в том, что некоторые архитекторы здесь считают, что вам нужно выдавать исключение каждый раз, когда вы сталкиваетесь с чем-то неожиданным.

Кроме того, я знаю, что сигнатура checkFieldExistance (req) действительно вызывает исключение, просто почти все наши методы это делают - так что мне не пришло в голову, что метод может выдать исключение вместо возврата false. Только пока я не начал копаться в коде, я заметил это.

9
задан WernerCD 22 February 2011 в 19:30
поделиться

1 ответ

Нет, только для простых значений. Но, возможно, вы сможете использовать их для того, что хотите, задав значения по умолчанию для всех простых частей вашего сложного типа. Однако он работает лучше для атрибутов, чем для элементов, которые у вас есть (потому что «значения атрибутов по умолчанию применяются, когда атрибуты отсутствуют, а значения элементов по умолчанию применяются, когда элементы пусты» - см. Ниже). Атрибуты сами по себе являются необязательными по умолчанию:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="button" type="button"/>
  <xs:complexType name="button">
    <xs:attribute name="id" type="xs:string"/>
    <xs:attribute name="href" type="xs:string" default="index.html"/>
    <xs:attribute name="label" type="xs:string" default="Go"/>
  </xs:complexType>
</xs:schema>

<button id="1"/>

Значения по умолчанию как атрибутов, так и элементов объявляются с использованием атрибута по умолчанию, хотя этот атрибут имеет несколько разные последствия в каждом случае. Когда атрибут объявляется со значением по умолчанию, значением атрибута является любое значение, которое отображается как значение атрибута в документе экземпляра; если атрибут не отображается в документе экземпляра, процессор схемы предоставляет атрибуту значение, равное значению атрибута по умолчанию. Обратите внимание, что значения по умолчанию для атрибутов имеют смысл только в том случае, если сами атрибуты являются необязательными, и поэтому будет ошибкой указывать и значение по умолчанию, и любое другое значение, кроме значения optional для использования.

Обработчик схемы обрабатывает элементы по умолчанию несколько иначе . Когда элемент объявляется со значением по умолчанию, значением элемента является любое значение, отображаемое как содержимое элемента в документе экземпляра; если элемент отображается без какого-либо содержимого, обработчик схемы предоставляет элементу значение, равное значению атрибута по умолчанию. Однако, если элемент не появляется в документе экземпляра, обработчик схемы не предоставляет элемент вообще. В итоге, различия между значениями по умолчанию элемента и атрибута можно сформулировать следующим образом: Значения атрибутов по умолчанию применяются, когда атрибуты отсутствуют, а значения элементов по умолчанию применяются, когда элементы пусты. [курсив добавлен]

http://www.w3.org/TR/xmlschema-0/#OccurrenceConstraints

19
ответ дан 4 December 2019 в 11:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: