2009-09-30 7 views
16

한다고 가정 해 복합 타입이 아닌 요소를 확장합니다. foo 요소를 확장하여 barElement 요소가 있고이 확장 프로그램을 bar이라고 부릅니다.를 사용하여 XML 스키마는 좀 스키마를

복잡하게하려면 다른 사람이 foo을 정의했으며 스키마를 변경할 수 없다고 가정 해 봅시다. 여기 예제는 간단하지만 foo의 내용이 더 복잡 할 수도 있고 새로운 스키마를 정의하는 것이 요소 fooElement을 복사하는 것만 큼 간단하지 않다고 가정 해 봅시다.

효과적으로, 나는 새로운 스키마를 정의하고 싶습니다 :

<xsd:schema xmlns:fns="otherschema" ...> 
    <xsd:import namespace="otherschema" /> 
    <xsd:element name="bar"> 
     <xsd:complexContent> 
      <xsd:extension base="fns:foo"> 
       <xsd:sequence> 
        <xsd:element name="barElement" type="xs:string" /> 
       </xsd:sequence> 
      </xsd:extension> 
     </xsd:complexContent> 
    </xsd:element> 
</xsd:schema> 

불행하게도 <xsd:extension> 년대 base 속성은 XSD 유형의 인수가 아닌 요소를 받아들입니다. 요소를 어떻게 확장합니까? (요소를 확장 할 수 있습니까?)

+3

위대한 질문입니다. 저는 똑같은 일을하고 싶습니다. 불가능하다고 생각합니다. 미친! –

답변

8

foo 요소를 모방 한 새로운 형식을 만든 다음 확장합니다. 최상의 솔루션은 아니지만 요소를 직접 확장 할 수있는 것과 동일한 결과를 얻습니다.

<xs:complexType name="fooType"> 
    <xs:sequence> 
     <xs:element name="fooElement" type="xs:string" /> 
    </xs:sequence> 
    </xs:complexType> 

    <xs:complexType name="barType"> 
    <xs:complexContent mixed="false"> 
     <xs:extension base="fooType"> 
     <xs:sequence> 
      <xs:element name="barElement" type="xs:string" /> 
     </xs:sequence> 
     </xs:extension> 
    </xs:complexContent> 
    </xs:complexType> 

    <xs:element name="bar" type="barType" /> 
+0

엘리먼트를 호출 할 때마다 엘리먼트를 캡슐화하지 않을까요? ...보다 바람직하지 않은 과 같은 구문이됩니다. –

+0

아니, 결과는 내가 무엇을 요구했는지 생각하고있다. Ben

+0

나는 당신의 편집을 감안할 때, 고맙습니다. - 감사합니다. –

관련 문제