Group 요소의 바인딩 지원
이 항목은 레거시 기술과 관련된 것입니다. 이제 XML Web services와 XML Web services 클라이언트는 다음을 사용하여 만들어야 합니다. Windows Communication Foundation.
.NET Framework에서는 <group> 요소에 대한 부분 바인딩 지원을 제공합니다.
XML 스키마 문서에서 소스 코드를 생성할 경우 Xsd.exe는 각 <group> 참조를 해당 참조가 들어 있는 <complexType> 정의와 일치하는 클래스로 직접 확장합니다.
설명
스키마 디자이너는 <group> 요소를 사용하여 요소 그룹을 전역적으로 정의한 후 참조를 통해 개수에 제한 없이 복합 형식으로 해당 그룹을 다시 사용할 수 있습니다.
.NET Framework에는 요소 그룹을 코드에 표시하기 위한 방법이 없습니다. 대신 XML 스키마 문서에서 소스 코드를 생성할 때 Xsd.exe는 ref 특성을 통해 각 <group> 참조를 해당 참조가 들어 있는 <group> 정의와 일치하는 클래스로 직접 확장합니다. 각 요소에 대해 public 필드가 생성됩니다.
개발자는 동일한 그룹의 요소 바인딩 필드 또는 속성을 여러 클래스에서 직접 정의하지 못하도록 기본 클래스를 수동으로 만들 수 있으며 XML 스키마 복합 형식을 나타내는 클래스가 해당 기본 클래스로부터 상속받게 할 수 있습니다.
XML 스키마 정의 언어를 사용하면 maxOccurs 특성 값을 1
보다 크게 지정하여 <group> 참조를 나타낼 수 있습니다. 그룹이 여러 개 나타나는 스키마를 제대로 가져오려면 Xsd.exe에서 /order 명령줄 옵션을 사용합니다. 이러한 XML 스키마에서 소스 코드를 생성할 경우 기본적으로 Xsd.exe가 그룹의 각 요소에 대한 배열을 잘못 생성합니다. /order 옵션을 사용하면 그룹의 모든 멤버에 대해 하나의 배열이 생성되며 여러 개의 XmlElementAttribute 특성이 각 그룹 멤버에 하나씩 지정됩니다.
Example
입력 XML 스키마 문서:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns="http://example.org/" targetNamespace="http://example.org/" elementFormDefault="qualified">
<xsd:group name="version">
<xsd:sequence>
<xsd:element name="changeNumber" type="xsd:int"/>
<xsd:element name="instanceId" type="xsd:string"/>
</xsd:sequence>
</xsd:group>
<xsd:complexType name="keyInfo">
<xsd:sequence>
<xsd:element name="key" type="xsd:string"/>
<xsd:group ref="version" />
</xsd:sequence>
</xsd:complexType>
<xsd:element name="key" type="keyInfo"/>
</xsd:schema>
앞의 XML 스키마 문서에서 생성된 C# 클래스:
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://example.org/")]
[System.Xml.Serialization.XmlRootAttribute("key", Namespace="http://example.org/", IsNullable=false)]
public class keyInfo {
public string key;
public int changeNumber;
public string instanceId;
}
앞의 C# 소스에서 컴파일된 어셈블리에서 생성된 XML 스키마 복합 형식:
<xs:complexType name="keyInfo">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="1" name="key" type="xs:string" />
<xs:element minOccurs="1" maxOccurs="1" name="changeNumber" type="xs:int" />
<xs:element minOccurs="0" maxOccurs="1" name="instanceId" type="xs:string" />
</xs:sequence>
</xs:complexType>
가능한 특성 | 바인딩 지원 |
---|---|
id |
Xsd.exe 유틸리티는 고유 식별자를 제공하기 위한 id 특성을 무시합니다. |
maxOccurs |
MaxOccurs 특성의 바인딩 지원 특성을 참조하십시오. |
minOccurs |
XML 스키마 문서에서 소스 코드를 생성할 때 Xsd.exe는 <group> 요소에 적용된 minOccurs 특성을 무시합니다. MinOccurs 특성의 바인딩 지원 특성을 참조하십시오. |
name |
Xsd.exe 유틸리티는 <attributeGroup> 요소의 콘텐츠를 익명으로 확장하므로, 특성 그룹 이름을 무시합니다. Name 특성의 바인딩 지원 특성을 참조하십시오. |
ref |
.NET Framework에는 그룹을 코드에 표시하기 위한 방법이 없습니다. 대신 XML 스키마 문서에서 소스 코드를 생성할 때 Xsd.exe는 각 ref 특성의 전역적으로 선언된 그룹에 대한 <group> 참조를 해당 참조가 들어 있는 <complexType> 정의와 일치하는 클래스로 직접 확장합니다. <group>의 각 요소에 대해 public 필드가 생성됩니다. |
가능한 부모 요소: <choice>, <complexType>, <extension>, <redefine>, <restriction>, <schema>, <sequence>
가능한 자식 요소: <all>, <annotation>, <choice>, <sequence>