Estratégias de tipo de perfil comuns do sistema de cores do Windows, controle de versão e localização

Esquema de tipos de perfil comuns V1 do WCS

O exemplo a seguir fornece a definição de esquema v1.0 para os Tipos de Perfil Comuns do WCS.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema
  xmlns:xs="http://www.w3.org/2001/XMLSchema"
  xmlns:wcs="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"
  targetNamespace="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"
  elementFormDefault="qualified"
  attributeFormDefault="unqualified"
  blockDefault="#all"
  version="1.0">

  <xs:import namespace="http://www.w3.org/XML/1998/namespace" />

  <xs:annotation>
    <xs:documentation xml:lang="en">
      Common types used in WCS profile schemas.
      Copyright (C) Microsoft. All rights reserved.
    </xs:documentation>
  </xs:annotation>

  <xs:simpleType name="NonNegativeFloatType">
    <xs:restriction base="xs:float">
      <xs:minInclusive value="0"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="NonNegativeCIEXYZType">
    <xs:attribute name="X" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="Y" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="Z" type="wcs:NonNegativeFloatType" use="required"/>
  </xs:complexType>

  <xs:simpleType name="GUIDType">
    <xs:restriction base="xs:string">
      <xs:pattern value="\{[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}\}"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="LocalizedTextType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute ref="xml:lang" use="required"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:complexType name="MultiLocalizedTextType">
    <xs:sequence>
      <xs:element name="Text" type="wcs:LocalizedTextType" minOccurs="1" />
    </xs:sequence>
  </xs:complexType>

</xs:schema>

Há suporte apenas para codificações UTF-8 ou UTF-16. Todas as outras codificações XML são altamente desencorajadas para preservar a interoperabilidade ideal.

Adições de esquema V2 de tipos de perfil comuns do WCS

No Windows 7, o esquema tipos de perfil comuns do WCS foi atualizado para incluir tipos para dar suporte ao esquema de calibragem do WCS.

  <xs:complexType name="ParameterizedCurvesType">
    <xs:sequence>
      <xs:element name="RedTRC" type="wcs:ParameterizedCurveType"/>
      <xs:element name="GreenTRC" type="wcs:ParameterizedCurveType"/>
      <xs:element name="BlueTRC" type="wcs:ParameterizedCurveType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ParameterizedCurveType">
    <xs:attribute name="Gamma" type="wcs:NonNegativeFloatType" use="required"/>
    <xs:attribute name="Offset1" type="xs:float" use="optional"/>
    <xs:attribute name="Gain" type="wcs:NonNegativeFloatType" use="optional"/>
    <xs:attribute name="Offset2" type="xs:float " use="optional"/>
    <xs:attribute name="TransitionPoint" type="wcs:NonNegativeFloatType" use="optional"/>
    <xs:attribute name="Offset3" type="xs:float" use="optional"/>
  </xs:complexType>

  <xs:simpleType name="FloatList">
    <xs:list itemType="xs:float"/>
  </xs:simpleType>

  <xs:complexType name="OneDimensionLutType">
    <xs:sequence>
      <xs:element name="Input" type="wcs:FloatList"/>
      <xs:element name="Output" type="wcs:FloatList"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="HDRToneResponseCurvesType">
    <xs:sequence>
      <xs:element name="RedTRC" type="wcs:OneDimensionLutType"/>
      <xs:element name="GreenTRC" type="wcs:OneDimensionLutType"/>
      <xs:element name="BlueTRC" type="wcs:OneDimensionLutType"/>
    </xs:sequence>
    <xs:attribute name="TRCLength" use="required">
      <xs:simpleType>
        <xs:restriction base="xs:int">
          <xs:minInclusive value="2" />
        </xs:restriction>
      </xs:simpleType>
    </xs:attribute>
  </xs:complexType>

Controle de versão do esquema de perfil do WCS

Neste Apêndice, o termo "consumidor de perfil" refere-se ao software WCS ou a um componente de software de terceiros que consome perfis WCS.

Versões mais recentes dos consumidores de perfil poderão consumir perfis WCS gravados de acordo com versões mais antigas dos esquemas. Para aproveitar ao máximo os recursos definidos na versão mais recente dos esquemas, a versão mais recente de um consumidor de perfil geralmente será necessária. No entanto, os consumidores de perfil mais antigos podem consumir perfis gravados de acordo com versões mais recentes dos esquemas. O consumidor de perfil pode ignorar elementos XML e atributos que ele não entende. Os resultados estarão corretos, mas o desempenho ou a fidelidade podem ser degradados em comparação com os resultados obtidos com a versão mais recente do consumidor de perfil.

Veja a seguir as diretrizes de controle de versão para consumidores de perfil:

  • Uma determinada versão de um consumidor de perfil deve reconhecer todos os elementos e atributos de um namespace de versão ou nenhum deles.
  • Se um consumidor de perfil encontrar um elemento ou atributo de um namespace que ele não entende, ele deverá tratar isso como uma condição de erro, a menos que o perfil contenha diretrizes explícitas sobre o processamento de fallback.
  • A Especificação de Empacotamento Aberto define um URI de namespace adicional, o namespace de compatibilidade de marcação, que define elementos e atributos que fornecem essas diretrizes de processamento de fallback.
  • Todas as versões de todos os consumidores de perfil devem reconhecer e respeitar todos os elementos e atributos no namespace de compatibilidade de marcação.
  • Os consumidores de perfil com base em uma nova versão dos esquemas de perfil devem dar suporte a todos os namespaces de versão definidos anteriormente.

Na versão v1.0, o WCS reconhece elementos e atributos dos seguintes namespaces:

  • https://schemas.microsoft.com/windows/2005/02/color/ColorDeviceModel
  • https://schemas.microsoft.com/windows/2005/02/color/GamutMapModel
  • https://schemas.microsoft.com/windows/2005/02/color/ColorAppearanceModel
  • https://schemas.microsoft.com/winfx/2005/06/markup-compatibility

O exemplo a seguir demonstra um exemplo de compatibilidade de marcação.

<?xml version="1.0" encoding="utf-8" ?>
<ColorAppearanceModel
  xmlns=http://schemas.microsoft.com/windows/2005/02/color/ColorAppearanceModel
  xmlns:cam2=http://schemas.microsoft.com/windows/2007/08/color/ColorAppearanceModel
  xmlns:mc=http://schemas.microsoft.com/winfx/2005/02/markup-compatibility
  xs:schemaLocation="http://schemas.microsoft.com/windows/2005/02/color/ColorAppearanceModel ColorAppearanceModel.xsd"
  xmlns:xs='http://www.w3.org/2001/XMLSchema-instance'
  mc:Ignorable="cam2">

  <ProfileName>Default profile for ICC viewing conditions</ProfileName>
  <mc:AlternateContent>
    <mc:Choice Requires="cam2">
      <cam2:AudioDescription source="ProfileExplanation.wav"/>
    </mc:Choice>
    <mc:Fallback>
      <Description>Appropriate for a print in a D50 viewing booth</Description>
        </mc:Fallback>
  </mc:AlternateContent>
  <Author>Microsoft</Author>

  <ViewingConditions>
    <WhitePointName>D50</WhitePointName>
    <Background X="19.3" Y="20.0" Z="16.5" />
    <Surround>Average</Surround>
    <LuminanceOfAdaptingField>31.8</LuminanceOfAdaptingField>
    <DegreeOfAdaptation>-1</DegreeOfAdaptation>
    <cam2:Humidity>30%</cam2:Humidity>
  </ViewingConditions>

</ColorAppearanceModel>

Localização de perfil do WCS

Requirements

Os perfis WCS contêm determinados elementos, como ProfileName e Description, que contêm texto legível por humanos. Esse texto é localizável.

Veja a seguir as diretrizes de controle de versão para criadores de perfil:

  • Para perfis criados por terceiros, como fabricantes de impressoras, o autor do perfil deve incorporar texto descritivo em vários idiomas.

  • Os seguintes elementos devem ser localizáveis:

    Elemento CDMP GMMP CAMP
    ProfileName x x x
    Descrição x x x
    Autor x x x

     

Expressando elementos localizáveis

Em vez de conter diretamente o texto, cada elemento localizável contém um ou mais subelementos wcs:Text, cada um dos quais deve especificar o atributo xml:lang. Conforme descrito na especificação XML Seção 2.12 ("Identificação de Idioma"), o valor do atributo xml:lang deve ser um identificador de linguagem IETF RFC 3066, como "en-US", "en" ou "fr-FR". Em esquemas WCS, o valor do atributo xml:lang não deve ser a cadeia de caracteres vazia "", embora xML permita isso no caso geral. Por exemplo:

<cdm:ColorDeviceModel ... />
    <cdm:Description>
        <wcs:Text xml:lang="en-US">Hello</wcs:Text>
        <wcs:Text xml:lang="fr-FR">Bonjour</wcs:Text>
    </cdm:Description>
    ...
</cdm:ColorDeviceeModel>

Nenhum elemento wcs:Text pode ter o mesmo atributo xml:lang. Cada esquema de perfil do WCS deve impor essa restrição separadamente para cada elemento localizável. Somente as codificações UTF-8 e UTF-16 são compatíveis.

Suporte a esquema

O design usa os tipos XSD wcs:LocalizedText e wcs:MultiLocalizedType definidos no esquema do Tipo de Perfil Comum do WCS:

    <xs:complexType name="LocalizedText">
        <xs:simpleContent>
            <xs:extension base="xs:string">
                <xs:attribute name="xml:lang" type="xs:string" use="required"/>
            <xs:extension/>
        <xs:simpleContent/>
    </xs:complexType/>

    <xs:complexType name="MultiLocalizedType">
        <xs:element name="Text" type="cam:LocalizedText" minOccurs="1"/>
    </xs:complexType>

Cada esquema de perfil do WCS declara cada elemento localizável como do tipo MultiLocalizedType, por exemplo:

<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:cdm="http://schemas.microsoft.com/windows/2005/02/color/ColorDeviceModel"
    xmlns:wcs="http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"
    targetNamespace=
        "http://schemas.microsoft.com/windows/2005/02/color/ColorDeviceModel"
    version="1.0">
    <xs:import namespace=
        "http://schemas.microsoft.com/windows/2005/02/color/WcsCommonProfileTypes"/>

    <xs:element name="cdm:Description" type="wcs:MultiLocalizableType" minOccurs="0"/>

    <xs:unique name="uniqueDescriptionLanguage">
      <xs:selector xpath="cdm:ColorDeviceModel/cdm:Description/wcs:Text"/>
      <xs:field xpath="@xml:lang"/>
    </unique>

    ...
</xs:schema>

O esquema CDMP impõe a restrição de que cada filho wcs:Text do elemento cdm:Description deve ter um atributo xml:lang exclusivo. Ele impõe a mesma restrição para os outros elementos localizáveis. Os esquemas CAMP e GMMP fazem o mesmo.

Selecionando o idioma

Ao decidir qual versão de idioma de um elemento localizável exibir, o código do aplicativo deve selecionar a "versão mais próxima" para o "idioma atual". O que "versão mais próxima" e "linguagem atual" realmente significam é dependente da plataforma; veja abaixo. Se o perfil não contiver uma versão de idioma que corresponda ao idioma atual, o aplicativo deverá selecionar a primeira versão no perfil (o primeiro elemento filho wcs:Text do elemento localizável).

No Windows Vista, a seleção de idioma é feita da seguinte maneira: cada thread tem uma lista associada de "idiomas de interface do usuário preferenciais", que podem ser obtidos chamando GetThreadPreferredUILanguages. A lista é retornada em ordem de preferência do usuário. Por exemplo, em um sistema configurado para inglês dos EUA, a lista retornada por GetThreadPreferredUILanguages é { "en-US", "en" }. Isso significa: 1) Inglês dos EUA, se presente. 2) Caso contrário, use qualquer variante regional do inglês, como "en-GB" ou simplesmente "en".

Para cada idioma nessa lista, em ordem de lista, o código da interface do usuário procura um elemento wcs:Text cujo atributo xml:lang é uma correspondência exata. A primeira versão correspondente é usada. Se nenhuma versão corresponder, o primeiro elemento wcs:Text será usado.

Perfis internos

Os perfis WCS padrão enviados com o Windows Vista, como sRGB.cdmp, têm as mesmas propriedades localizáveis que outros perfis.

A solução padrão do Windows seria colocar as cadeias de caracteres localizadas em uma DLL mui e fazer referência a elas desta forma:

<cdm:Description resourceId="mscms.dll,-101">
    <wcs:Text xml:lang="en-US">Hello, world!</wcs:Text>
<cdm:Description>

Em um sistema Windows, o texto de descrição seria extraído da ID de recurso 101 na versão localizada apropriada dos recursos mui para mscms.dll. Sistemas não Windows usariam os subelementos wcs:Text, conforme descrito acima.

Apresentamos um atributo de ID opcional e globalmente exclusivo no elemento raiz de cada esquema de perfil do WCS. O perfil padrão wcsRGB.cdmp pode ter esta aparência:

<cdm:ColorDeviceModel
    ID=http://schemas.microsoft.com/2005/02/color/profiles/wcsRGB.cdmp
    ... >
    <cdm:Description>
        <wcs:Text xml:lang="en-US">Hello.</wcs:Text>
        <wcs:Text xml:lang="fr-FR">Bonjour.</wcs:Text>
    </cdm:Description>
    ...
</cdm:ColorDeviceModel>

Para os perfis de cor do WCS fornecidos com janelas, a CPL de Cor exibe informações descritivas dos recursos, em vez dos elementos wcs:Text nos perfis. Isso permite que o Windows exiba informações localizadas para esses perfis em todos os idiomas com suporte, sem exigir que os próprios perfis contenham informações descritivas em todos os idiomas.

Conceitos básicos de gerenciamento de cores

Algoritmos e esquemas do sistema de cores do Windows