Контрольный список проверки PrintTicket

Этот раздел не является текущим. Актуальные сведения см. в спецификации схемы печати.

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

Проверка всегда выполняется на определенном устройстве с набором экземпляров Feature, Option и ParameterDef, определенных в документе PrintCapabilities. Код проверки должен иметь доступ к набору экземпляров компонентов (и автономных экземпляров Option) и ParameterDef для конкретного устройства и не должен иметь доступа к PrintCapabilities. Сведения из экземпляров Feature, Option и ParameterDef необходимы в определенных частях процесса проверки.

  1. Во время попыток поиска соответствующих или соответствующих элементов обратите внимание, что пространства имен элементов должны совпадать, прежде чем любое полное имя может считаться совпадением. Все имена элементов, имена атрибутов и имена экземпляров имеют полное имя пространства имен. Для вложенных элементов их расположения должны совпадать, прежде чем элементы считаются соответствующими.

  2. Убедитесь, что все теги элементов находятся в общедоступном пространстве имен, определяются схемой PrintTicket, содержат соответствующие атрибуты XML и значения атрибутов, а расположение каждого типа элемента соответствует использованию схемы PrintTicket.

  3. Определите все пространства имен, сообщаемые документом PrintCapabilities. Удалите все элементы (и их потомки) из PrintTicket, имена экземпляров которых принадлежат к пространствам имен, не сообщаемым документом PrintCapabilities. Обратите внимание на разницу между этим делом и следующим случаем, включающее нераспознанные имена экземпляров в известном пространстве имен.

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

  5. Если любой экземпляр элемента имеет повторяющийся одноуровневый элемент, который не разрешен схемой PrintTicket, сохраните только первое вхождение и удалите дубликаты, включая содержимое повторяющегося элемента.

  6. Удалите из printTicket любой компонент или дочерний элемент (и все его дочерние элементы), у него нет соответствующего компонента в документе PrintCapabilities.

  7. Проверьте свойство SelectionType, определенное в документе PrintCapabilities, для каждого из оставшихся экземпляров компонента в PrintTicket. Любой компонент, свойство SelectionType которого имеет значение PickOne, должно иметь только один экземпляр Option, присутствующий в PrintTicket, а компонент, свойство SelectionType которого — PickMany, может иметь несколько экземпляров. Если компонент PrintTicket не имеет экземпляра Option, укажите экземпляр Option по умолчанию. Так как вы являетесь поставщиком, вы знаете, какой параметр является параметром по умолчанию для каждого компонента.

    Для компонента, свойство SelectionType которого — PickMany, с несколькими параметрами, выбранными в PrintTicket, убедитесь, что параметр не указан как IdentityOption. Если есть, удалите все остальные параметры, оставив только один назначенный IdentityOption.

  8. Удалите любой экземпляр ParameterInit в PrintTicket без соответствующего экземпляра ParameterDef в документе PrintCapabilities.

    Для всех других экземпляров ParameterInit в PrintTicket убедитесь, что значение для каждого из них соответствует экземпляру ParameterDef документа PrintCapabilities. Если значение отсутствует, укажите значение по умолчанию, указанное в параметре ParameterDef.

  9. Свяжите каждый экземпляр Option в PrintTicket с параметром, указанным в соответствующем компоненте в документе PrintCapabilities, на основе результатов процесса оценки. Оценка — это процесс поиска параметра в документе PrintCapabilities, который лучше всего соответствует параметру с именем PrintTicket. Описание того, что учитывается во время процесса оценки, см. в разделе "Определения параметров". Замените каждый параметр ссылки в PrintTicket соответствующим подходящим вариантом документа PrintCapabilities. Вы также можете ранжировать всех кандидатов по оценке и передать эту информацию на этап разрешения в случае конфликта ограничения предотвращает использование наиболее подходящего кандидата. В таких случаях процесс разрешения может использовать второго лучшего кандидата, а не выбрать другого кандидата случайным образом.

  10. Для компонента, свойство SelectionType которого имеет значение PickMany и имеет несколько параметров, выбранных в PrintTicket, убедитесь, что параметр не назначен как IdentityOption. Если такой параметр существует, удалите все остальные параметры, оставив только один указанный IdentityOption. Этот шаг необходимо выполнить до и после применения процесса оценки.

    Причина, по которой этот шаг должен выполняться дважды, заключается в том, что процесс оценки может сопоставить несколько экземпляров ссылочного параметра с одинаковым вариантом-кандидатом. В этом случае удалите все экземпляры повторяющихся параметров, чтобы параметры, перечисленные для определенного компонента PickMany, были уникальными.

  11. Добавьте в printTicket любой компонент, представленный в документе PrintCapabilities, который не отображается в PrintTicket. Для такого компонента указать параметр по умолчанию в качестве выбранного параметра.

  12. Определите, существуют ли экземпляры ParameterDef, соответствующие всем следующим критериям:

    • Экземпляр ParameterDef отображается в документе PrintCapabilities, но не в PrintTicket.

    • Обязательное свойство экземпляра ParameterDef имеет значение "Безусловное" или "Условное".

    • На экземпляр ParameterDef ссылается экземпляр ParameterRef в printTicket в экземпляре Option.

    Для каждого такого экземпляра ParameterDef в документе PrintCapabilities добавьте в PrintTicket соответствующий экземпляр ParameterInit. Задайте для вновь добавленных экземпляров ParameterInit значение по умолчанию, указанное соответствующими экземплярами ParameterDef.

  13. Выполните обнаружение конфликтов ограничений и измените конфигурацию, чтобы устранить такие конфликты. В этом разделе не определен конкретный процесс, используемый для разрешения конфликтов ограничений. Необходимо решить, какой экземпляр feature или ParameterInit можно изменить, и соответствующий параметр или значение соответственно, чтобы выбрать, что имеет наименьшее влияние на общее намерение конфигурации, указанной в PrintTicket. Как упоминалось ранее, вы можете использовать оценку сопоставления каждого параметра и использовать параметр со вторым самым высоким показателем. Чтобы определить, какой компонент или ParameterInit следует изменить, может потребоваться определить частное свойство, которое клиент может добавить в PrintTicket. Это свойство может определить приоритет для экземпляров Feature и ParameterInit, чтобы процесс сопоставителя был проинформирован о том, какие экземпляры Feature или ParameterInit важны для клиента (и их необходимо сохранить в PrintTicket) и которые менее важны.

  14. Если процесс разрешения ограничений вызвал изменения в PrintTicket на любые экземпляры ParameterRef, для которых свойство "Обязательное свойство" имеет значение Conditional, добавьте экземпляры ParameterInit со значениями по умолчанию для тех, которые теперь отображаются, и удалите любой экземпляр ParameterInit для экземпляра ParameterRef, который больше не отображается.

  15. Удалите все экземпляры свойств и их содержимое, которые отображаются в экземплярах Option в PrintTicket. Элементы свойств не имеют роли в PrintTicket. Если проверенный параметр для определенного компонента идеально соответствует предварительно опроверженным параметром, передайте все экземпляры свойств в этом параметре из предварительной версии PrintTicket в проверенную функцию PrintTicket, при условии, что пространства имен экземпляров свойств регистрируются в документе PrintCapabilities. Обратите внимание, что для двух экземпляров Option, которые считаются идеальным совпадением, для каждого объекта ScoredProperty, найденного в одном параметре, в другом параметре должно быть соответствующее значение ScoredProperty, а значения обоих экземпляров ScoredProperty должны быть одинаковыми.

  16. Если поставщик PrintTicket распознает и поддерживает любые частные или общедоступные экземпляры свойств, которые выжили до этой точки, выполните проверку. Не удаляйте свойство на этом этапе только потому, что оно не распознается, оно может быть предназначено для другого этапа обработки документов.

Спецификация схемы печати