이 섹션에서는 스키마 지원 수준에 대한 세부 정보를 설명합니다.
스키마는 다음을 직접 지원합니다.
- 요소의 시퀀스입니다.
- 요소 형식의 파생입니다.
- 간단한 요소 선택(태그가 지정된 공용 구조체에 매핑되는 요소)
- 범위(최소/최대)를 포함하는 XSD/.NET 이진 형식으로 정의된 기본 형식입니다.
- 모든 요소에 대한 간단한 지원(요소 형식에 대한 제한 없음)
- 기본값이 있는 선택적 요소 및 특성입니다.
- 범위(최소/최대)를 사용하여 요소를 반복합니다.
- Nillable 요소입니다.
스키마는 다음을 직접 지원하지 않습니다(이는 "대체" 동작을 의미함).
- 사용자 정의 기본 형식입니다.
- 더 복잡한 선택.
- 알 수 없는 특성을 거부합니다.
- 알 수 없는 특성을 라운드트립합니다.
- 모든 요소에 대한 더 복잡한 지원입니다.
- 모든 구문입니다.
- Key/keyref.
다음은 다양한 스키마 구성 요소 지원에 대한 자세한 분석입니다. 기능의 유사성 때문에 WCF의 데이터 계약과 비교됩니다. 차이점이 설명됩니다.
일반적으로 대체 동작의 경우:
- 특성은 WS_STRING; 로 대체됩니다.
- 요소 콘텐츠는 WS_XML_BUFFER 대체됩니다.
- complexType은 WS_XML_BUFFER 필드를 포함하는 구조체로 대체됩니다.
- 단순 형식은 WS_STRING 대체됩니다.
wsutil은 현재 완전히 지원되지 않는 스키마 구성 요소에 대한 경고를 생성합니다. 애플리케이션은 해당 구성 요소에 대한 추가 확인이 필요할 수 있습니다. 기본값 지원과 같이 런타임에서 현재 지원되는 일부 기능을 처리하도록 초과 작업 wsutil을 개선할 수 있습니다. 추상과 같은 다른 기능을 지원하기 위해 직렬화와 함께 wsutil을 개선할 수도 있습니다. 지원되지 않는 스키마 구성 요소의 수는 시간이 지남에 따라 줄일 수 있습니다.
전체 스키마 문서
스키마의 포함된 정의에 영향을 줄 수 있는 전역 정의입니다. 이러한 특성은 스키마의 모든 정의에 적용할 수 있는 전역 특성입니다.
xs:schema> 특성 <
- attributeFromDefault Ignored.
- blockDefault Ignored.
- elementFormDefault Ignored. 이는 런타임에서 지원되는 정규화되지 않은 요소가 dataContract와 다릅니다.
- finalDefault Ignored. 최종 개념에 대한 C 언어 지원은 없습니다.
- ID가 무시되었습니다.
- targetNamespace 지원되며 서비스 네임스페이스에 매핑됩니다.
- 버전이 무시되었습니다.
xs:schema> 내용 <
- 지원되는 포함; wsutil을 사용하려면 컴파일 시간 동안 필요한 모든 정의를 입력 파일로 사용할 수 있어야 합니다.
- 무시된 재정의. wsutil은 이를 지원하지 않습니다.
- 지원되는 가져오기; wsutil을 사용하려면 컴파일 시간 동안 필요한 모든 정의를 입력 파일로 사용할 수 있어야 합니다.
- simpleType 지원 - 아래의 간단한 형식 섹션을 참조하세요.
- complexType 지원 - 'complexType' 섹션 참조
- 무시된 그룹입니다.
- attributeGroup 무시됨
- 지원되는 요소 은 전역 요소 정의에 매핑됩니다.
- 지원되는 특성 은 전역 특성 정의에 매핑됩니다.
- 표기법 무시됨
복합 형식
xs:complexType><나타내는 복합 형식은 단순 형식 또는 복합 형식의 제한, 단순 형식의 확장, 배열 또는 구조체일 수 있습니다. 단순 형식의 확장에서 상속이 없고 xsi:type 지원이 없다는 것을 알아차렸습니다.
xs:complexType> 특성 <
- 추상 지원되지 않는 기능에 대한 경고를 생성하고 코드 생성을 변경하지 않습니다.
- 블록 지원되지 않는 기능에 대한 경고 생성, 코드 생성에 대한 변경 내용 없음
- 최종 지원되지 않는 기능에 대한 경고를 생성합니다. 코드 생성은 변경되지 않습니다.
- ID가 무시되었습니다.
- 혼합 지원되지 않는 기능에 대한 경고를 생성하고, true이면 WS_XML_BUFFER 사용하여 구조로 대체합니다.
- 이름 지원 및 구조체 형식 이름에 매핑됩니다.
<xs:complexType> 내용
구조체에 대한 형식 정의입니다. complexContent 제한은 지원되지 않습니다.
- complexContent는 복잡한 콘텐츠 확장을 지원합니다. 구조 상속에 매핑합니다.
- group 현재 WS_XML_BUFFER 필드를 사용하여 구조체로 대체합니다. 아래 입자에 따라 지원될 수 있습니다.
- 선택 항목은 공용 구조체로 지원합니다. 이는 데이터 계약에서 지원되지 않습니다.
- 시퀀스 지원 - 구조체의 필드에 매핑
- 특성은 '금지됨'을 제외하고 지원됩니다. '금지'인 경우 WS_XML_BUFFER 사용하여 구조로 대체합니다.
- attributeGroup 지원 - 특성 시퀀스에 매핑
- anyAttribute 무시됨
- AttributeGroupRef 지원됨 - 특성 시퀀스에 매핑됩니다.
- GroupRef 현재 WS_XML_BUFFER 필드를 사용하여 구조체로 대체합니다. 아래 그룹에 따라 지원될 수 있습니다.
- 지원되는 모든 XML_BUFFER 매핑
- (비어 있음) 구조체가 생성되지 않은 빈 구조체 설명에 지원되는 맵입니다.
복합 형식의 xs:sequence><: 내용
wsutil은 minOccurs = 1 및 maxOccurs = 1의 시퀀스만 완벽하게 지원합니다. 그렇지 않으면 복합 형식이 현재 WS_XML_BUFFER 대체됩니다. 구조의 배열로 지원될 수 있습니다.
- 지원되는 요소 각 인스턴스는 구조의 필드에 매핑됩니다.
- 그룹 대체; complexType이 WS_XML_BUFFER 대체됩니다.
- 모든 대체; complexType이 WS_XML_BUFFER 대체됩니다.
- 지원되는 선택; 맵을 공용 구조체 필드에 매핑합니다.
- 시퀀스 대체; complexType이 WS_XML_BUFFER 대체됩니다.
- 지원되는 모든 것, XML_BUFFER 매핑됩니다.
- (비어 있음) 지원됨; 특성이 없는 경우 complexType은 빈 구조일 수 있습니다.
요소
<xs:element>세 가지 컨텍스트에서 발생할 수 있습니다.
- 일반 구조체의 필드를 설명하는 <xs:sequence>내에서 발생할 수 있습니다. 이 경우 maxOccurs 특성은 1이어야 합니다. minOccurs가 0인 경우 필드는 선택 사항입니다.
- 배열 필드를 설명하는 xs:sequence><내에서 발생할 수 있습니다. 이 경우 maxOccurs 특성은 1보다 크거나 '바인딩되지 않음'이어야 합니다.
- 전역 요소 설명으로 <xs:schema> 내에서 발생할 수 있습니다.
<xs:sequence> 또는 <xs:choice> 구조체의 필드로 xs:element><
- ref Supported; 은 전역 요소에 대한 참조로 확인되었습니다.
- 지원되는 이름입니다. 필드 이름에 매핑됩니다.
- 지원되는 형식으로 필드 형식에 매핑합니다. 자세한 내용은 '형식 매핑'을 참조하세요. 지정하지 않은 경우(요소에 익명 형식이 포함되지 않음) xs:anyType이 가정됩니다.
- 블록 지원되지 않는 기능에 대한 경고 생성, 코드 생성에 대한 변경 내용 없음
- 기본값은 지원되지 않는 기능에 대한 경고를 생성하며 코드 생성에 대한 변경은 없습니다.
- 는 지원되지 않는 기능에 대한 경고 생성을 수정했습니다. 코드 생성은 변경되지 않습니다.
- 양식이 무시됩니다. 직렬화 계층은 정규화된 양식과 정규화되지 않은 양식을 모두 지원합니다.
- ID가 무시되었습니다.
- maxOccurs는 1이면 단일 데이터 필드에 매핑됩니다. maxOccurs가 1보다 큰 경우 배열 필드(반복 요소)에 매핑됩니다.
- minOccurs이면 nillable이 설정되지 않은 경우 필드 옵션이 FIELD_OPTIONAL 설정됩니다.
- nillable 필드가 nillable입니다. 자세한 내용은 Serialization 참조하세요.
xs:element> 전역 요소로 <: 특성
minOccurs 및 maxOccurs 특성은 전역 요소 설명으로 유효하지 않습니다. 애플리케이션은 serialization 계층 또는 채널 계층에서 직접 생성된 요소 설명을 사용할 수 있습니다.
- 추상 지원되지 않는 기능에 대한 경고를 생성하고 코드 생성을 변경하지 않습니다.
- 블록 지원되지 않는 기능에 대한 경고 생성, 코드 생성에 대한 변경 내용 없음
- 기본값은 지원되지 않는 기능에 대한 경고를 생성하며 코드 생성에 대한 변경은 없습니다.
- 최종 지원되지 않는 기능에 대한 경고를 생성합니다. 코드 생성은 변경되지 않습니다.
- 는 지원되지 않는 기능에 대한 경고 생성을 수정했습니다. 코드 생성은 변경되지 않습니다.
- ID가 무시되었습니다.
- 이름 지원됨 - 전역 요소 설명의 이름에 매핑되며 지정된 경우 익명 형식의 기준입니다.
- nillable Ignored-application은 올바른 플래그를 사용하여 호출해야 합니다.
- substitutionGroup이 설정된 경우 WS_XML_BUFFER 사용하여 구조로 대체합니다. wsutil은 substitutionGroup을 지원하지 않습니다.
- 지원되는 형식이며 요소의 형식에 매핑합니다.
xs:element> 전역 요소로 <: 내용
- simpleType 지원됨; 는 형식 정의에 매핑됩니다.
- complexType 지원됨; 는 복합 형식에 매핑합니다.
- 고유 지원되지 않는 기능에 대한 경고 생성, 코드 생성에 대한 변경 내용 없음 wsutil은 요소 제약 조건을 지원하지 않습니다.
- 키 지원되지 않는 기능에 대한 경고를 생성하고 코드 생성을 변경하지 않습니다. wsutil은 요소 제약 조건을 지원하지 않습니다.
- keyref 지원되지 않는 기능에 대한 경고를 생성합니다. 코드 생성은 변경되지 않습니다. wsutil은 요소 제약 조건을 지원하지 않습니다.
- (공백) 지원; 형식 사양이 없는 요소는 xs:anyType으로 처리됩니다.
단순 형식
<xs:simpleType> 특성
- 마지막으로 지원되지 않는 기능에 대한 경고를 생성하고 코드 생성을 변경하지 않습니다.
- ID 무시됨
- 지원되는 이름, 형식 이름에 매핑됩니다.
<xs:simpleType> 내용
- 지원되는 제한 사항으로, 열거형 형식 또는 범위에 매핑합니다. "xs:simpleType 제한 사항" 섹션을 참조하세요.
- 목록 지원되지 않는 기능에 대한 경고 생성, XML_BUFFER 대체
- Union 지원되지 않는 기능에 대한 경고를 생성하고 XML_BUFFER 대체합니다.
단순 형식 제한
특정 패싯은 정수 형식 및 문자열 형식에서 허용되어 범위 및 열거형 지원을 허용합니다.
열거형 지원
<xs:enumeration> 문자열의 기본 형식에 대한 단순 형식 제한은 열거형 형식으로 처리됩니다. 이 경우 Base 특성은 문자열 형식이어야 합니다. 열거형의 경우 다른 모든 패싯은 무시됩니다.
단순 형식 지원 범위
일부 패싯은 형식에 허용되는 범위를 효과적으로 지원하는 간단한 형식의 지원입니다. 다음은 정수 계열 형식 및 float/double 형식에 대한 제한 사항입니다. 다른 패싯이 있는 단순 형식은 WS_STRING 형식으로 대체됩니다.
- minExclusive Supported
- minInclusive Supported
- maxExclusive 지원됨
- maxInclusive Supported
- totalDigits 지원되지 않는 기능에 대한 경고를 생성합니다. 코드 생성에는 변경 내용이 없습니다.
- fractionDigits 지원되지 않는 기능에 대한 경고를 생성하고 코드 생성을 변경하지 않습니다.
- length 지원되지 않는 기능에 대한 경고를 생성합니다. 코드 생성은 변경되지 않습니다.
- minLength 지원되지 않는 기능에 대한 경고를 생성합니다. 코드 생성은 변경되지 않습니다.
- maxLength 지원되지 않는 기능에 대한 경고를 생성합니다. 코드 생성은 변경되지 않습니다.
- 열거형 지원되지 않는 기능에 대한 경고를 생성합니다. 코드 생성은 변경되지 않습니다.
- whiteSpace 지원되지 않는 기능에 대한 경고를 생성하고 코드 생성을 변경하지 않습니다.
- 패턴 지원되지 않는 기능에 대한 경고를 생성하고 코드 생성을 변경하지 않습니다.
- (공백) 지원.
문자열의 minLength 및 maxLength는 현재 지원되지 않지만 지원하기에 바람직한 기능입니다.
상속
Wsutil은 복합 형식의 상속을 지원합니다. 즉, C++의 인터페이스 상속과 유사하게 구조체가 다른 구조체에서 상속할 수 있습니다. 이 작업은 xs:complexContentExtension><통해 수행됩니다. <xs:simpleContentExtension> 지원되지만 형식 상속 대신 기본 형식이 첫 번째 필드인 일반 구조체로 생성됩니다.
형식/기본 매핑
XML의 NCNames에서 변환할 때 식별자를 정규화해야 합니다. 문자열은 nillable입니다. 포인터 형식은 nillable입니다. 정수 계열 형식 및 float/double은 nillable이고 defaultValue는 0으로 설정됩니다.