2011-06-14 5 views
1

우리는 C# 클래스를 생성하기 위해 스키마를 사용하기 시작했으며 기본적으로 기본 클래스에서 상속 된 멤버를 재정 의하여 클래스를 복제하려고합니다. 나는 XSD에 대한 새로운 검색을 많이 했으므로 모든 문제가 잘못 될지 또는 가능한지 모르겠다. 다음은 내가 성취하고자하는 것을 단순화 한 예입니다.XSD 스키마 : 기본 complexType의 상속 된 요소 덮어 쓰기

<xs:complexType name="ClientBase" abstract="true"> 
    <xs:sequence> 
     <xs:element name="Company" type="CompanyBase" minOccurs="0" maxOccurs="unbounded" /> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="CompanyBase" abstract="true"> 
    <xs:attribute name="Id" type="xs:int" use="required" /> 
    </xs:complexType> 

    <xs:complexType name="Company"> 
    <xs:complexContent> 
     <xs:extension base="CompanyBase"> 
     <xs:attribute name="PartnerId" type="xs:int" use="required" /> 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 

    <xs:complexType name="Client"> 
    <xs:complexContent> 
     <xs:extension base="ClientBase"> 
     <xs:sequence> 
      <!-- error occurs here --> 
      <xs:element name="Company" type="Company" minOccurs="0" maxOccurs="unbounded" /> 
     </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 

는 나에게 "여러 정의 요소의 '회사'는 내용 모델이 모호하게됩니다"라는 오류를주고 내 클라이언트 유형에 불면으로이 분명 작동하지 않습니다.

제 목표는 이것을 나타내는 것입니다.

public abstract class CompanyBase 
    { 
     public int Id { get; set; } 

    } 
    public class Company : CompanyBase 
    { 
     public int PartnerId { get; set; } 
    } 

    public abstract class ClientBase 
    { 
     public CompanyBase[] Company { get; set; } 
    } 

    public class Client : ClientBase 
    { 
     new public Company[] Company { get; set; } 
    } 

어떤 도움을 주시면 감사하겠습니다.

답변

0

회사라는 요소를 가진 것으로 지정하고 클라이언트라는 복잡한 유형은, 이미 회사라는 요소가 포함되어 ClientBase, 확장 (유형 CompanyBase이다.) 따라서, 요소 이름에 중복성이 있습니다.

또한 복잡한 유형의 경우 스키마에 전역 요소가 아닌 유형임을 명시하는 명명 규칙을 따르는 것이 좋습니다. 는 [유형 이름]보다는 [유형 이름]를 입력 할 때 즉, 복잡한 유형의 이름을 지정합니다. 장기적으로 상황을 혼란에 빠지게하고 전역 요소와의 이름 충돌을 피할 수 있습니다.

+0

감사합니다. 그래, 내가 받고있는 오류의 원인을 이해합니다. 내가 궁금해하는 것은 내가하려는 일을 성취 할 수있는 또 다른 방법이 있다면 말이다. – Chuck

+0

죄송합니다! 여기에 몇 가지 아이디어가 있습니다 : 1) 회사에서 회사에 이르기까지 클래스 Client에서 어레이의 이름을 바꿀 수 있습니다. 2) Client와 ClientBase를 별도의 네임 스페이스로 이동하면 동일한 이름의 요소를 가질 수 있습니다. –