Form 특성의 바인딩 지원

.NET Framework에서는 form 특성에 대한 바인딩 지원을 제공합니다.

Xsd.exe 도구에서는 form XML 특성을 XmlAttribute 또는 XmlElement 특성의 Form 속성과 동일한 것으로 간주합니다. 하지만 NET Framework의 XML serialization 코드에서는 이러한 요소에 대해 다른 기본값인 qualified를 인식합니다.

설명

XML 스키마에서는 <schema> 요소의 자식으로 전역 선언된 모든 요소와 특성이 인스턴스 문서에 네임스페이스로 한정되어 표시되어야 합니다. <complexType> 정의 내에서 로컬로 선언된 요소와 특성의 경우 네임스페이스 한정자는 선택 사항입니다.

특정 로컬 요소나 특성을 네임스페이스로 한정할지 여부를 지정하기 위해 form 특성이 로컬 <element> 또는 <attribute> 선언에 추가됩니다. 가능한 값은 qualifiedunqualified입니다.

form 특성의 기본값은 루트 <schema> 요소의 elementFormDefault 또는 attributeFormDefault 특성에서 상속됩니다. 두 특성 모두 기본값은 unqualified입니다.

.NET Framework에는 클래스 정의 내에서 전역 또는 스키마 전반적인 수준으로 Form을 지정하는 방법이 없습니다. 대신, 클래스 집합에서 XML 스키마 문서를 생성할 경우 Xsd.exe는 항상 다음과 같은 특징이 있는 XML 스키마를 생성합니다.

  • attributeFormDefault를 지정하지 않고 기본값인 unqualified로 되돌립니다.

  • XML 스키마에서 사용하는 것과 다른 기본값을 효과적으로 사용하여 elementFormDefault="qualified"를 지정합니다.

Xsd.exe는 필드 단위로 폼을 설정하여 attributeFormDefault="qualified"elementFormDefault="unqualified" 기본값에 대해 다른 값으로 응답합니다.

이러한 제약 조건 하에서 Xsd.exe는 다음 표와 같이 form 특성에서 소스 코드를 생성합니다.

form 특성

form="qualified"

form="unqualified"

<attribute> element

XmlAttribute 특성 선언에 Form=XmlSchemaForm.Qualified 매개 변수가 전달됩니다.

<attribute> 필드의 XmlAttribute 특성 선언에 Form 매개 변수가 전달되지 않습니다.

<element> element

관련되지 않은 매개 변수를 전달하는 경우 외에는 XmlElement 특성이 적용되지 않습니다.

<element> 필드의 XmlElement 특성 선언에 Form=XmlSchemaForm.Unqualified 매개 변수가 전달됩니다.

XmlAttribute 또는 XmlElement 선언에 전달된 매개 변수는 Form 속성을 설정합니다. XmlSchemaForm 열거형에서 가져올 수 있는 값은 다음과 같습니다.

  • XmlSchemaForm.Qualified

  • XmlSchemaForm.Unqualified

  • XmlSchemaForm.None: 기본값

Form이 원본 XML 스키마 문서에서 기본값이 아닌 값으로 설정된 경우, form은 XML 스키마 기본값이 아닌 .NET Framework 기본값에 따라 소스 코드에서만 지정됩니다. form 특성이 attributeFormDefaultelementFormDefault 특성을 재정의하기 때문에 <schema> 수준에서 form을 기본값이 아닌 값으로 설정한 다음 <attribute> 또는 <element> 수준에서 form을 기본값으로 설정하는 스키마는 form을 지정하지 않는 소스를 생성합니다. 적합한 인스턴스 문서의 경우에도 이는 동일합니다.

예제

입력 XML 스키마 문서:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
  <xsd:element name="ComplexInstance" type="MyComplexType"/>
  <xsd:complexType name="MyComplexType">
    <xsd:sequence>
      <xsd:element name="elementQ" type="xsd:decimal" form="qualified" />
      <xsd:element name="elementU" type="xsd:Date" form="unqualified" />
    </xsd:sequence>
    <xsd:attribute name="attributeQ" type="xsd:string"  use="required" form="qualified"/>
    <xsd:attribute name="attributeU" type="xsd:boolean" use="required" form="unqualified"/>
  </xsd:complexType>
</xsd:schema>

앞의 XML 스키마 문서에서 생성된 C# 클래스:

[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("ComplexInstance", Namespace="http://example.org/", IsNullable=false)]
 public class MyComplexType {
        
     public System.Decimal elementQ;
        
    [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string elementU;
        
    [System.Xml.Serialization.XmlAttributeAttribute(Form=System.Xml.Schema.XmlSchemaForm.Qualified)]
    public string attributeQ;
        
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public bool attributeU;
}

앞의 C# 소스에서 컴파일된 어셈블리에서 생성된 XML 스키마 문서:

<xs:schema xmlns:tns="http://example.org/" elementFormDefault="qualified" targetNamespace="http://example.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="ComplexInstance" type="tns:MyComplexType" />
  <xs:complexType name="MyComplexType">
    <xs:sequence>
      <xs:element minOccurs="1" maxOccurs="1" name="elementQ" type="xs:decimal" />
      <xs:element minOccurs="0" maxOccurs="1" form="unqualified" name="elementU" type="xs:string" />
    </xs:sequence>
    <xs:attribute form="qualified" name="attributeQ" type="xs:string" />
    <xs:attribute name="attributeU" type="xs:boolean" use="required" />
  </xs:complexType>
</xs:schema>

포함할 수 있는 요소: <attribute>, <element>

참고 항목

참조

System.Xml.Schema.XmlSchemaAttribute.Form
System.Xml.Schema.XmlSchemaElement.Form

Footer image

Copyright © 2007 by Microsoft Corporation. All rights reserved.