Контрольный список проверки 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. Этот шаг необходимо выполнить до и после применения процесса оценки.

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

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

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

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

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

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

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

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

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

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

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

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