2012-03-21 4 views
5

의 속성 또는 Type 속성 나는 그런 샘플을보고 한참조는 XSD

<xsd:element name="Product"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="ProductName" type="xsd:string" /> 
      <xsd:element ref="Customer" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 
<xsd:element name="Customer"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="FullName" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:string" /> 
      <xsd:element name="Age" type="xsd:occupation" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

무엇 ref 대신 Type을 사용하는 긍정적 인면이 있습니다. 아무도 나를 설명 할 수 있습니까? 내가 알고있는 것은 refminOccursmaxOccurs 옵션을 가질 수 있으므로 ref을 직렬화되지 않은 코드로 배열로 정의 할 수 있습니다.

답변

5

여러 가지 방법이 있습니다. 나는 그것이 저작 스타일의 일관성과 같은 몇 가지 기본 원칙으로 시작했다고 생각합니다. 거기에서 사람들은 한 방향에서 다른 방향과 다른 방향에서 함축하는 의미를 분석하기 시작했습니다. 러시아 인형, 살라미 슬라이스, Venetial Blinds, The Garden of Eden이 주어졌습니다. 더 많은 것을 알고 싶다면 XSD 디자인 스타일이라고도하는 XSD 제작 스타일에 대한 검색을 통해이 주제를 다루는 수많은 사이트를 만들 수 있습니다. 이 linkthis one은 내가 시작하는 꽤 좋은 "패스트 푸드"와 같은 참조입니다. contains only one global element (웹 서비스에 대한 rq/rs 스키마를 정의하면 준수하지 않겠습니까?) 전체적으로 좋은 시작입니다.

귀하의 경우, 참조 된 요소를 기반으로 콘텐츠 모델을 일관되게 정의하면 "살라미 슬라이스"패턴이 표시됩니다. 모든 요소는 전역이고 유형은 로컬 (익명)입니다. 첫 번째 의미는 태그와 관련된 네임 스페이스를 제거 할 수 없다는 것입니다.

참조 된 요소를 사용하지 않고 대신 로컬 정의에 의존하여 전역 유형이 "베네 치안 블라인드"패턴을 나타냅니다. 위의 네임 스페이스 주석을 유지하면서 스키마 요소에 elementFormDefault 특성을 설정하여 네임 스페이스를 제어 할 수 있습니다.

입자와 관련된 minOccurs/maxOccurs는 여기에서 관련이 없습니다. 전역 요소의 경우이 속성은 적용되지 않습니다. 내용 모델 입자의 경우 요소가 하나인데 요소가 ref이든 로컬이든 차이가 없습니다.

+0

첫 번째 링크가 깨졌습니다. – BrianTheLion

+0

@BrianTheLion, 첫 번째 링크를 업데이트했습니다. –