다음을 통해 공유


MinOccurs 특성의 바인딩 지원

이 항목은 레거시 기술과 관련된 것입니다. 이제 XML Web services와 XML Web services 클라이언트는 다음을 사용하여 만들어야 합니다. Windows Communication Foundation.

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

Xsd.exe는 MaxOccurs 특성의 바인딩 지원 특성 값에서 배열 필드를 지정하지 않는 경우에 한해 <element> 요소에 대해서만 minOccurs 특성 값을 확인합니다. 그런 다음 이 값은 해당 필드에 참조 또는 값 형식이 있는지 여부를 비롯한 다양한 요소에 따라 해석되거나 생성됩니다.

설명

minOccursmaxOccurs 특성은 지정된 엔터티가 XML 인스턴스 문서의 해당 위치에 연속해서 나타날 수 있는 횟수를 제한합니다.

이러한 특성은 복합 형식 정의에서만 사용됩니다. 따라서 <element> 또는 <group> 요소의 경우, 요소가 로컬 선언이거나 전역 선언 자체가 아닌 전역 선언에 대한 참조여야 합니다.

XML과 관련되지 않은 클래스를 사용하여 XML 스키마 복합 형식을 바인딩하는 경우 .NET Framework에서는 minOccurs 또는 maxOccurs 특성에 해당하는 직접적인 프로그래밍 언어를 제공하지 않습니다.

XSD를 소스로 변환

XML 스키마 문서에서 소스 코드를 생성할 경우 Xsd.exe는 <choice>, <sequence>, <group>, <all><any> 요소에 적용된 minOccurs 특성을 무시합니다.

<element> 요소의 경우 Xsd.exe에서는 maxOccurs 특성 값이 1보다 크거나 unbounded이면 minOccurs 특성을 무시합니다. 이 경우 이 도구는 XSD 데이터 형식에 해당하는 형식의 배열을 생성합니다. Xsd.exe에서는 maxOccurs 특성의 값에 따라 단일 인스턴스를 생성할지 아니면 배열을 생성할지를 결정합니다.

<element> 요소의 경우 minOccurs 특성이 .NET Framework 참조 형식으로 변환되는 스키마 데이터 형식에 적용될 경우에도 Xsd.exe에서 이 특성을 무시합니다.

Xsd.exe는 다음 조건을 모두 충족할 경우에만 minOccurs 특성 값을 사용합니다.

  • <element> 요소가 포함됩니다.

  • maxOccurs 특성에서 단일 인스턴스를 지정합니다.

  • 데이터 형식이 값 형식으로 변환됩니다.

그러면 도구는 다음과 같이 값을 해석합니다.

  • 1 or more: Xsd.exe에서 public 필드를 생성합니다. XML 관련 특성이 적용되지 않으므로 기본값 System.Xml.Serialization.XmlElementAttribute가 사용됩니다.

  • 0: Xsd.exe에서 public 필드를 생성합니다. XML 관련 특성이 적용되지 않으므로 기본 XmlElementAttribute가 사용됩니다. 또한 Xsd.exe에서는 요소 필드 이름에 Specified가 추가된 이름을 갖는 bool 형식의 public 필드를 생성합니다. 예를 들어, 요소의 필드 이름이 startDate인 경우 bool 필드 이름은 startDateSpecified가 됩니다. 개체를 XML로 serialize할 때 XmlSerializer 클래스는 bool 필드의 값을 확인하여 요소를 쓸지 여부를 결정합니다. bool 필드는 XmlSerializer가 serialize되지 않도록 System.Xml.Serialization.XmlIgnoreAttribute로 표시됩니다.

배열 바인딩에 대한 추가 정보. maxOccurs 특성 값에서 배열 바인딩을 지정하는 경우 Xsd.exe에서 minOccurs 특성을 무시하면 정의 정밀도가 손실됩니다. 생성된 배열에서 새 <element> 선언으로의 역방향 변환에서는 원래 minOccurs 값이 아니라 0unboundedmaxOccurs 값이 생성됩니다.

배열에 대한 형식 바인딩을 이해하려면 특정 형식의 개체를 선언하는 경우와 이러한 개체에 값(스택이나 힙에서의 메모리 위치)을 할당하는 경우의 차이점을 생각해 보십시오. 예를 들어, 다음과 같은 XSD 요소가 있다고 가정합니다.

<xsd:element minOccurs="5" maxOccurs="5" name="items" type="xsd:token" />

코드를 수동으로 작성하는 경우에는 public string[] items와 같이 형식 선언에 배열 크기 5를 표시하지 않습니다. 반면 값을 할당하는 경우에는 items = new string[5]와 같이 배열 크기를 표시합니다.

Xsd.exe에서 XML 스키마로 생성하는 소스 코드 유형은 형식, 필드 선언 및 형식과 필드에 특성으로 적용할 수 있는 메타데이터뿐입니다. 개체에 값을 할당하면 이러한 범위가 확장됩니다.

1보다 큰 값을 적용하는 경우는 XmlValidatingReader 클래스를 사용하여 SOM(스키마 개체 모델)으로 표시되는 XML 스키마 문서에 대해 XML 문서의 유효성을 검사할 경우입니다. SOM은 System.Xml.Schema.XmlSchemaParticle.MinOccursSystem.Xml.Schema.XmlSchemaParticle.MinOccursString 속성을 사용합니다. 이 두 속성은 minOccurs 특성을 포함할 수 있는 모든 요소에 적용됩니다.

Xsd.exe에서 다른 XML 스키마 정의 언어 요소에 발생 제약 조건을 처리하는 방법에 대한 자세한 내용은 maxOccurs 특성을 참조하십시오.

소스를 XSD로 변환

클래스에서 XML 스키마 문서를 생성할 때 Xsd.exe에서 생성하는 minOccurs 값은 생성되고 있는 포함하는 XML 스키마 정의 언어 요소에 따라 달라집니다. 포함할 수 있는 요소와 해당 minOccurs 동작은 다음과 같습니다.

<choice>: choice가 단일 개체를 나타내면 1이고, 배열을 나타내면 0입니다.

<sequence>: 지정되지 않은 경우 기본값 1로 되돌려집니다.

<group>: Xsd.exe는 소스에서 <group> 요소를 생성하지 않습니다.

<all>: Xsd.exe는 소스에서 <all> 요소를 생성하지 않습니다.

<any>: <element> 요소에 설명된 규칙에 따라 0입니다. <any> 요소에 대해서는 이 항목의 뒷부분에서 자세히 설명합니다.

<element>: Xsd.exe에서는 필드나 속성이 배열 또는 단일 인스턴스인지, 필드나 속성에 값 형식이나 참조 형식이 있는지, 값 형식에 기본값이 있거나 값이 지정되었는지 여부를 나타내는 추가 필드가 있는지 그리고 참조 형식에 IsNullable 속성이 true로 설정된 XML 관련 특성이 할당되어 있는지 등에 따라 minOccurs에 대해 다른 값을 생성합니다.

IsNullable 속성은 XML과 관련된 특정 특성 클래스에 사용됩니다. 이 속성은 다음과 같이 표시됩니다.

클래스 멤버의 IsNullable 속성이 true로 설정되고 개체가 null 참조(Visual Basic에서는 Nothing)로 설정된 경우, XmlSerializer 클래스는 true 값을 갖는 xsi:nil 특성을 생성합니다. xsi 접두사는 XML 스키마 인스턴스 네임스페이스에 사용됩니다(http://www.w3.org/2001/XMLSchema-instance).

인스턴스 문서 내의 요소에 xsi:nil="true"가 있으면 자식 요소든 본문 텍스트든 요소에 아무 콘텐츠도 없음을 명시적으로 나타냅니다. xsi:nil 특성을 참조하십시오.

IsNullable 속성은 XML 스키마 정의 언어의 nillable 특성에 해당합니다. 클래스에서 XSD 정의를 생성하는 동안 Xsd.exe가 클래스나 멤버의 IsNullable 속성에서 true 값을 발견한 경우 형식이 null 참조로 지정될 수 있으면, 해당 XSD <element> 요소에 대해 nillable="true" 설정이 생성됩니다. nillable 특성을 참조하십시오.

단일 인스턴스인 클래스 멤버에 해당하는 minOccurs 특성 값은 다음 표에 표시된 규칙에 따라 결정됩니다. 배열도 이 규칙을 따르지만 한 가지 예외 사항이 있습니다. 이 예외 사항은 이 항목의 뒷부분에서 설명합니다. 이 표에는 관련 클래스 멤버 변형과 결과 minOccurs 값이 함께 나와 있습니다.

입력 클래스 멤버

출력 <element> 요소의 minOccurs 값

System.Component.DefaultValueAttribute를 통해 지정된 기본값을 갖는 값 형식

0. <element> 요소의 기본값도 default XML 특성을 통해 지정됩니다.

앞의 XSD를 소스로 변환에서 설명한 Specified 명명 규칙을 사용하는 public bool 필드가 있는 값 형식

0.

기본값이나 관련 부울 필드가 없는 값 형식

1.

XmlElement 특성의 IsNullable 속성이 true로 설정된 참조 형식

1. <element> 요소의 nillable 특성도 true로 설정됩니다.

IsNullable=false로 설정되거나 IsNullable 설정이 없는 참조 형식

0.

Xsd.exe에서는 XML 스키마 문서에서 소스 코드로의 역방향 변환 시에 이러한 특징을 유지합니다.

참고: default XML 특성에서 minOccurs 특성이 0으로 설정되고 데이터 형식이 값 형식에 매핑되는 경우 DefaultValue 특성만 생성됩니다. 관련 부울 필드는 생성되지 않습니다. default 특성을 참조하십시오.

예를 들어, 입력 소스 파일에 다음 요소가 있다고 가정합니다.

<xsd:element name="birthdate" type="xsd:date" default="2002-03-04" minOccurs="0" />Xsd.exe would then produce: 
[System.Xml.Serialization.XmlElementAttribute(DataType="date")]
[System.ComponentModel.DefaultValueAttribute(typeof(System.DateTime), "2002-03-04")]
public System.DateTime birthdate = new System.DateTime(631507968000000000);

배열 바인딩. Xsd.exe는 배열에 대해 다음 형식의 <element> 선언을 생성합니다.

<element minOccurs="0" maxOccurs="unbounded" />

배열 형식이 참조 형식이기 때문에 이 조건을 충족합니다. 하지만, 다른 참조 형식과 달리 배열 멤버에 다음 특성 선언이 적용되는 경우에도 마찬가지입니다.

[XmlElementAttribute(IsNullable=true)]

기본 XmlArrayAttribute 대신 XmlElement 특성이 배열에 적용된 경우, 배열 요소는 클래스에 바인딩되는 요소의 자식으로 인스턴스 문서에 나타납니다. 배열 요소의 부모 역할만을 하기 위해 사용되는 추가 요소는 없습니다. Xsd.exe에서 nillable="true"인 요소를 생성하여 IsNullable=true 설정을 인식하더라도, minOccurs에 대해 0 값이 여전히 생성되며 배열 요소는 여전히 없을 수 있습니다.

기본 XmlArray 특성이 적용된 경우, 배열의 부모 요소를 나타내기 위해 ArrayOf로 시작하는 이름을 갖는 스키마 데이터 형식이 만들어집니다. 배열 바인딩에 대한 자세한 내용은 maxOccurs 특성 및 특성을 사용하여 XML Serialization 제어를 참조하십시오.

부모 요소 스키마 데이터 형식은 참조 형식에 해당하며 Xsd.exe는 이 형식을 minOccurs 값을 생성할 때와 같이 처리합니다. 즉, 다음과 같이 IsNullable 속성이 true로 설정된 경우 minOccurs 값이 1로 생성됩니다.

[System.Xml.Serialization.XmlArrayAttribute(IsNullable=true)]

그렇지 않으면 minOccurs 값이 0으로 생성됩니다.

<any> 요소. 단일 개체나 배열 중 어느 것과 관련되어 있든 상관없이 Xsd.exe에서 <any> 요소에 대해 minOccurs="0"을 생성하는 이유는 동일한 코드 구문이 참조 형식이기 때문입니다. 이러한 구문은 System.Xml.Serialization.XmlAnyElementAttribute 특성을 갖는 System.Xml.XmlElement(또는 이 요소의 배열) 형식의 필드입니다. [XmlElementAttribute(IsNullable=true)]라는 특성 선언이 XmlElement 개체 또는 배열에 적용될 수 있지만, Xsd.exe에서는 이러한 사용을 minOccurs="1"<any> 요소로 해석하지 않습니다.

포함할 수 있는 요소: <all>, <any>, <choice>, <element>, <group>, <sequence>

참고 항목

참조

System.Xml.Schema.XmlSchemaParticle.MinOccurs
System.Xml.Schema.XmlSchemaParticle.MinOccursString
XmlSchemaAll
XmlSchemaAny
XmlSchemaChoice
XmlSchemaElement
XmlSchemaGroupRef
XmlSchemaSequence