Lista de verificação de validação do PrintTicket

Este tópico não é atual. Para obter as informações mais atuais, consulte Especificação do esquema de impressão.

Os provedores printTicket devem validar o PrintTicket antes de usá-lo para qualquer finalidade. Depois que PrintTicket for validado, ele poderá ser retornado ao cliente ou poderá ser descartado após o uso. Essa lista de verificação abrange as tarefas que o provedor deve executar durante a validação. O processo de validação frequentemente alterará o conteúdo do PrintTicket, embora não altere um PrintTicket validado anteriormente.

A validação sempre é executada em um dispositivo específico que tem um conjunto de instâncias de Feature, Option e ParameterDef definidas em um documento PrintCapabilities. O código de validação deve ter acesso ao conjunto de instâncias de recurso (e as instâncias de opção contidas) e instâncias ParameterDef para o dispositivo específico e não deve precisar acessar as PrintCapabilities. As informações das instâncias Feature, Option e ParameterDef são necessárias em determinadas partes do processo de validação.

  1. Durante as tentativas de localizar elementos correspondentes ou correspondentes, observe que os namespaces dos elementos devem corresponder antes que qualquer Nome Qualificado possa ser considerado uma correspondência. Todos os nomes de elementos, nomes de atributo e nomes de instância são qualificados para namespace. Para elementos aninhados, seus locais devem corresponder antes que os elementos sejam considerados uma correspondência.

  2. Verifique se todas as marcas de elemento estão no namespace público, são definidas pelo Esquema PrintTicket, contêm os atributos XML e valores de atributo adequados e se o local de cada tipo de elemento está em conformidade com o uso definido pelo esquema PrintTicket.

  3. Determine todos os namespaces relatados pelo documento PrintCapabilities. Remova todos os elementos (e seus descendentes) do PrintTicket cujos nomes de instância pertencem a namespaces não relatados pelo documento PrintCapabilities. Observe a diferença entre esse caso e o caso a seguir, que envolve nomes de instância não reconhecidos em um namespace conhecido.

  4. Devido ao fato de que os esquemas estão continuamente sendo estendidos com a adição de novas definições de instância de elemento, o código de validação não deve ser escrito sob a suposição de que cada nome de instância em um determinado namespace é conhecido. O código de validação não pode tratar nomes de instância não reconhecidos em um namespace conhecido como erros, nem pode excluí-los do PrintTicket.

  5. Se qualquer instância de elemento tiver um irmão duplicado que não seja permitido pelo Esquema PrintTicket, mantenha apenas a primeira ocorrência e exclua as duplicatas, incluindo o conteúdo do elemento duplicado.

  6. Remova do PrintTicket qualquer recurso ou subfeatura (e todos os seus filhos) que não tenha nenhum recurso correspondente no documento PrintCapabilities.

  7. Verifique a Propriedade SelectionType definida no documento PrintCapabilities para cada uma das instâncias de recurso restantes no PrintTicket. Qualquer recurso cuja propriedade SelectionType está definida como PickOne deve ter exatamente uma instância de Opção presente no PrintTicket, enquanto um recurso cuja propriedade SelectionType é PickMany pode ter mais de uma. Se um recurso PrintTicket não tiver uma instância de opção, forneça a instância de opção padrão. Como você é o provedor, sabe qual opção é a opção padrão para cada recurso.

    Para um recurso cuja propriedade SelectionType é PickMany, com mais de uma opção selecionada no PrintTicket, verifique se nenhuma opção é designada como IdentityOption. Se houver, exclua todas as outras Opções, deixando apenas uma IdentityOption designada.

  8. Remova qualquer instância ParameterInit no PrintTicket que não tenha nenhuma instância ParameterDef correspondente no documento PrintCapabilities.

    Para quaisquer outras instâncias ParameterInit no PrintTicket, verifique se o Valor de cada um está em conformidade com a instância ParameterDef do documento PrintCapabilities. Se um Valor estiver ausente, forneça o padrão fornecido no ParameterDef.

  9. Emparelhe cada instância option no PrintTicket com uma opção listada no Recurso correspondente no documento PrintCapabilities, com base nos resultados do processo de pontuação. Pontuação é o processo de localizar a opção no documento PrintCapabilities que melhor corresponde à Opção nomeada no PrintTicket. Para obter uma descrição do que é levado em conta durante o processo de pontuação, consulte Definições de opção. Substitua cada opção de referência no PrintTicket pela opção de documento printCapabilities correspondente melhor correspondente. Você também pode classificar todos os candidatos por pontuação e passar essas informações para o estágio de resolução caso um conflito de restrição impeça que o melhor candidato correspondente seja usado. Nesses casos, o processo de resolução pode usar o segundo melhor candidato em vez de escolher outro candidato aleatoriamente.

  10. Para um recurso cuja propriedade SelectionType está definida como PickMany e que tem mais de uma opção selecionada no PrintTicket, verifique se nenhuma opção é designada como IdentityOption. Se essa opção existir, exclua todas as outras Opções, deixando apenas uma IdentityOption designada. Essa etapa deve ser executada antes e depois que o processo de pontuação é aplicado.

    O motivo pelo qual essa etapa deve ser executada duas vezes é que é possível que o processo de pontuação mapeie várias instâncias de opção de referência para a mesma opção candidata. Se isso acontecer, exclua todas as instâncias de opção duplicadas para que as Opções listadas para um determinado recurso PickMany sejam exclusivas.

  11. Adicione ao PrintTicket qualquer recurso presente no documento PrintCapabilities que não apareça no PrintTicket. Para esse recurso, designe a opção padrão como a opção selecionada.

  12. Determine se há instâncias ParameterDef que atendam a todos os seguintes critérios:

    • A instância ParameterDef aparece no documento PrintCapabilities, mas não no PrintTicket.

    • A Propriedade Obrigatória da instância ParameterDef é definida como Incondicional ou Condicional.

    • A instância ParameterDef é referenciada por uma instância ParameterRef no PrintTicket em uma instância option.

    Para cada instância parameterDef no documento PrintCapabilities, adicione ao PrintTicket uma instância parameterInit correspondente. Defina o Valor das instâncias ParameterInit recém-adicionadas para o valor padrão especificado pelas instâncias ParameterDef correspondentes.

  13. Execute a detecção de conflitos de restrição e modifique a configuração para eliminar esses conflitos. Este tópico não define um processo específico a ser usado para resolve conflitos de restrição. Você precisa decidir qual instância de Feature ou ParameterInit pode ser alterada e uma opção ou valor apropriado, respectivamente, para selecionar que tenha o menor impacto na intenção geral da configuração especificada no PrintTicket. Conforme mencionado anteriormente, talvez você queira usar a pontuação de mapeamento de cada Opção e usar a Opção com a segunda pontuação mais alta. Para determinar qual Recurso ou ParameterInit alterar, convém definir uma propriedade privada que o cliente pode adicionar ao PrintTicket. Essa Propriedade pode definir uma prioridade para instâncias Feature e ParameterInit para que o processo de resolvedor seja informado de quais instâncias de Feature ou ParameterInit são importantes para o cliente (e precisam ser preservadas no PrintTicket) e que são menos importantes.

  14. Se o processo de resolução de restrição tiver causado alterações no PrintTicket em qualquer instância ParameterRef para a qual a Propriedade Obrigatória está definida como Condicional, adicione instâncias ParameterInit com valores padrão para aqueles que agora aparecem e remova qualquer instância ParameterInit para uma instância ParameterRef que não aparece mais.

  15. Remova todas as instâncias de propriedade e seu conteúdo que aparecem em Instâncias de opção no PrintTicket. Os elementos de propriedade não têm nenhuma função no PrintTicket. Se a opção validada para um recurso específico corresponder perfeitamente à opção pré-avaliada, transfira todas as instâncias de Propriedade nessa Opção do PrintTicket de pré-avaliação para o PrintTicket agora validado, sujeito à condição de que os namespaces das instâncias de Propriedade sejam registrados no documento PrintCapabilities. Observe que para que duas instâncias de Opção sejam consideradas uma correspondência perfeita, para cada ScoredProperty encontrado em uma opção, deve haver um ScoredProperty correspondente na outra opção e os Valores de ambas as instâncias do ScoredProperty devem ser os mesmos.

  16. Se o provedor PrintTicket reconhecer e der suporte a quaisquer instâncias de Propriedade privadas ou públicas que tenham sobrevivido a esse ponto, execute a validação nelas. Não exclua uma Propriedade neste momento apenas porque você não a reconhece, ela pode ser destinada a outra fase do processamento de documentos.

Especificação de esquema de impressão