.NET XAML 서비스의 XAML 네임스페이스

XAML 네임스페이스는 XML 네임스페이스의 정의를 확장하는 개념입니다. XML 네임스페이스와 마찬가지로 태그의 xmlns 특성을 사용하여 XAML 네임스페이스를 정의할 수 있습니다. XAML 네임스페이스는 XAML 노드 스트림 및 기타 XAML 서비스 API에도 표시됩니다. 이 항목에서는 XAML 네임스페이스 개념을 정의하고, XAML 네임스페이스가 정의되고 .NET XAML 서비스의 XAML 스키마 컨텍스트 및 기타 측면에서 사용되는 방식을 설명합니다.

XML 네임스페이스 및 XAML 네임스페이스

XAML 네임스페이스는 XAML이 특수화된 형식의 XML이고 태그에 기본 XML 형식을 사용하는 것처럼 특수화된 XML 네임스페이스입니다. 태그에서 요소에 적용된 xmlns 특성을 통해 XAML 네임스페이스 및 해당 매핑을 선언합니다. xmlns는 XAML 네임스페이스가 선언된 동일한 요소에 대해 선언할 수 있습니다. 요소에 대한 XAML 네임스페이스 선언은 해당 요소, 해당 요소의 모든 특성, 해당 요소의 모든 자식에 유효합니다. 특성 이름 자체가 태그에서 특성 이름의 일부로 접두사를 참조하는 한 특성은 해당 특성을 포함하는 요소와 동일하지 않은 XAML 네임스페이스를 사용할 수 있습니다.

XAML 네임스페이스와 XML 네임스페이스를 구분하면 XML 네임스페이스를 사용하여 스키마를 참조하거나 단순히 엔터티를 구분할 수 있습니다. XAML의 경우 XAML에 사용되는 형식 및 멤버는 궁극적으로 지원 형식으로 확인되어야 하며 XML 스키마 개념은 이 기능에 잘 적용되지 않습니다. XAML 네임스페이스에는 XAML 스키마 컨텍스트가 이 형식 매핑을 수행하기 위해 사용할 수 있어야 하는 정보가 포함되어 있습니다.

XAML 네임스페이스 구성 요소

XAML 네임스페이스 정의에는 접두사 및 식별자의 두 가지 구성 요소가 있습니다. 각 구성 요소는 XAML 네임스페이스가 태그에 선언되거나 XAML 형식 시스템에 정의될 때 존재합니다.

접두사는 XML 1.0 사양의 W3C 네임스페이스에서 허용하는 임의의 문자열일 수 있습니다. 일반적인 태그 파일에서 접두사가 여러 번 반복되므로 규칙에 따라 접두사는 일반적으로 짧은 문자열입니다. 여러 XAML 구현에 사용하려는 특정 XAML 네임스페이스는 특정 기본 접두사를 사용합니다. 예를 들어 XAML 언어 XAML 네임스페이스는 일반적으로 x 접두사를 사용하여 매핑됩니다. 기본 XAML 네임스페이스를 정의할 수 있습니다. 여기서 접두사는 정의에 제공되지 않지만 .NET XAML 서비스 API로 정의되거나 쿼리되는 경우 빈 문자열로 표시됩니다. 일반적으로 기본 XAML 네임스페이스는 XAML 구현 기술과 해당 시나리오 및 어휘로 최대한 많은 접두사 생략 태그를 승격하기 위해 의도적으로 선택됩니다.

식별자는 XML 1.0 사양의 W3C 네임스페이스에서 허용하는 임의의 문자열일 수 있습니다. 규칙에 따라 XML 네임스페이스 또는 XAML 네임스페이스의 식별자는 URI 형식(일반적으로 프로토콜 정규화된 절대 URI)으로 제공되는 경우가 많습니다. 종종 특정 XAML 어휘를 정의하는 버전 정보는 경로 문자열의 일부로 암시됩니다. XAML 네임스페이스는 XML URI 규칙 이외의 추가 식별자 규칙을 추가합니다. XAML 네임스페이스의 경우 식별자는 해당 XAML 네임스페이스 아래에 요소로 지정된 형식을 확인하거나 멤버에 대한 특성을 확인하기 위해 필요한 정보를 XAML 스키마 컨텍스트에 전달합니다.

XAML 스키마 컨텍스트에 정보를 전달하기 위해 XAML 네임스페이스의 식별자는 여전히 URI 형식일 수 있습니다. 그러나 이 경우 URI는 특정 어셈블리 또는 어셈블리 목록에서 일치하는 식별자로도 선언됩니다. 어셈블리에서 이 작업을 수행하려면 XmlnsDefinitionAttribute를 사용하여 어셈블리에 특성을 지정합니다. 특성이 지정된 어셈블리에서 XAML 네임스페이스를 식별하고 CLR 기반 형식 확인 동작을 지원하는 이 메서드는 .NET XAML 서비스의 기본 XAML 스키마 컨텍스트에서 지원됩니다. 보다 일반적으로 이 규칙은 XAML 스키마 컨텍스트가 CLR을 통합하거나 CLR 어셈블리에서 CLR 특성을 읽는 데 필요한 기본 XAML 스키마 컨텍스트를 기반으로 하는 경우에 사용할 수 있습니다.

또한 XAML 네임스페이스는 CLR 네임스페이스 및 형식 정의 어셈블리를 전달하는 규칙으로 식별할 수도 있습니다. 이 규칙은 형식을 포함하는 어셈블리에 XmlnsDefinitionAttribute 특성이 없는 경우에 사용됩니다. 이 규칙은 URI 규칙보다 잠재적으로 더 복잡하며, 어셈블리를 참조하는 여러 가지 방법이 있기 때문에 모호성 및 중복 가능성이 있습니다.

CLR 네임스페이스 및 어셈블리 규칙을 사용하는 식별자의 가장 기본적인 형식은 다음과 같습니다.

clr-namespace:clrnsName; assembly=assemblyShortName

clr-namespace:; assembly=는 구문의 리터럴 구성 요소입니다.

clrnsName은 CLR 네임스페이스를 식별하는 문자열 이름입니다. 이 문자열 이름에는 CLR 네임스페이스와 다른 CLR 네임스페이스와의 관계에 대한 힌트를 제공하는 내부 점 문자(.)가 포함됩니다.

assemblyShortName은 XAML에서 유용한 형식을 정의하는 어셈블리의 문자열 이름입니다. 선언된 XAML 네임스페이스를 통해 액세스할 형식은 어셈블리에서 정의되고 clrnsName으로 지정된 CLR 네임스페이스 내에서 선언되어야 합니다. 이 문자열 이름은 일반적으로 AssemblyName.Name이 보고한 정보와 매우 유사합니다.

CLR 네임스페이스 및 어셈블리 규칙에 대한 보다 자세한 정의는 다음과 같습니다.

clr-namespace:clrnsName; assembly=assemblyName

assemblyNameAssembly.Load(String) 입력으로 유효한 문자열을 나타냅니다. 이 문자열에는 문화권, 공개 키 또는 버전 정보가 포함될 수 있습니다(이러한 개념의 정의는 참조 항목 Assembly에 정의되어 있음). COFF 형식 및 증명 정보(Load의 다른 오버로드에서 사용됨)는 XAML 어셈블리 로드와 관련이 없으며 모든 로드 정보를 문자열로 제공해야 합니다.

어셈블리에 공개 키를 지정하는 것은 XAML 보안을 위해 또는 어셈블리가 단순한 이름으로 로드되거나 캐시 또는 애플리케이션 도메인에 미리 존재하는 경우 존재할 수 있는 모호성을 제거하는 데 유용한 기술입니다. 자세한 내용은 XAML 보안 고려 사항을 참조하세요.

XAML 서비스 API의 XAML 네임스페이스 선언

XAML 서비스 API에서 XAML 네임스페이스 선언은 NamespaceDeclaration 개체로 표시됩니다. 코드에서 XAML 네임스페이스를 선언하는 경우 NamespaceDeclaration(String, String) 생성자를 호출합니다. nsprefix 매개 변수는 문자열로 지정되며, 이러한 매개 변수에 제공할 입력은 이 항목에서 앞서 설명한 대로 XAML 네임스페이스 식별자 및 XAML 네임스페이스 접두사의 정의에 해당합니다.

XAML 노드 스트림의 일부로 또는 XAML 형식 시스템에 대한 다른 액세스를 통해 XAML 네임스페이스 정보를 검사하는 경우 NamespaceDeclaration.Namespace는 XAML 네임스페이스 식별자를 보고하고, NamespaceDeclaration.Prefix는 XAML 네임스페이스 접두사를 보고합니다.

XAML 노드 스트림에서 XAML 네임스페이스 정보는 적용되는 엔터티 앞에 XAML 노드로 나타날 수 있습니다. 여기에는 XAML 네임스페이스 정보가 XAML 루트 요소의 StartObject 앞에 오는 경우가 포함됩니다. 자세한 내용은 Understanding XAML Node Stream Structures and Concepts을 참조하십시오.

.NET XAML 서비스 API를 사용하는 많은 시나리오에서 하나 이상의 XAML 네임스페이스 선언이 존재해야 하며, 선언에는 XAML 스키마 컨텍스트에 필요한 정보가 포함되거나 참조되어야 합니다. XAML 네임스페이스는 로드할 어셈블리를 지정하거나 이미 로드되었거나 XAML 스키마 컨텍스트에 알려진 네임스페이스 및 어셈블리 내의 특정 형식을 확인하는 데 도움을 주어야 합니다.

XAML 노드 스트림을 생성하려면 XAML 스키마 컨텍스트를 통해 XAML 형식 정보를 사용할 수 있어야 합니다. XAML 형식 정보는 만들 각 노드에 대한 관련 XAML 네임스페이스를 먼저 결정하지 않고는 확인할 수 없습니다. 이 시점에서 형식의 인스턴스는 아직 만들어지지 않았지만 XAML 스키마 컨텍스트는 정의 어셈블리 및 지원 형식에서 정보를 조회해야 할 수 있습니다. 예를 들어 태그 <Party><PartyFavor/></Party>를 처리하려면 XAML 스키마 컨텍스트가 PartyContentProperty에 대해 이름 및 형식을 확인할 수 있어야 하며, 따라서 PartyPartyFavor의 XAML 네임스페이스 정보도 알아야 합니다. 기본 XAML 스키마 컨텍스트의 경우 정적 리플렉션은 노드 스트림에서 XAML 형식 노드를 생성하는 데 필요한 XAML 형식 시스템 정보를 대부분 보고합니다.

XAML 노드 스트림에서 개체 그래프를 생성하려면 원래 태그에 사용되고 XAML 노드 스트림에 기록되는 각 XAML 접두사에 대한 XAML 네임스페이스 선언이 있어야 합니다. 이 시점에서 인스턴스가 생성되고 실제 형식 매핑 동작이 발생합니다.

XAML 네임스페이스 정보를 미리 채워야 한다면 XAML 스키마 컨텍스트를 사용하려는 XAML 네임스페이스가 태그에 정의되어 있지 않은 경우 사용할 수 있는 한 가지 방법은 XmlParserContext에서 XmlReader에 대한 XML 네임스페이스 선언을 선언하는 것입니다. 그런 다음 해당 XmlReader를 XAML 판독기 생성자에 대한 입력으로 사용하거나 XamlServices.Load(XmlReader)를 사용합니다.

.NET XAML 서비스에서 XAML 네임스페이스 처리와 관련된 다른 두 가지 API는 XmlnsDefinitionAttributeXmlnsPrefixAttribute 특성입니다. 이러한 특성은 어셈블리에 적용됩니다. XmlnsDefinitionAttribute는 XAML 스키마 컨텍스트에서 URI를 포함하는 모든 XAML 네임스페이스 선언을 해석하는 데 사용됩니다. XmlnsPrefixAttribute는 특정 XAML 네임스페이스를 예측 가능한 접두사로 직렬화할 수 있도록 XAML을 내보내는 도구에서 사용합니다. 자세한 내용은 사용자 지정 형식 및 라이브러리에 대한 XAML 관련 CLR 특성을 참조하세요.

참고 항목