2011-07-27 3 views
11

첫 번째 질문 (친절하겠습니다!) 설명 : 속성이 true 인 경우 요소가 있어야 유형이 필요합니다.일련의 XML 요소를 속성에서 조건부로 사용할 수 있습니까?

<Approval Approved="true"> 
    <By>RT</By> 
    <Date>27/07/2011</Date> 
</Approval> 

를 그리고이 승인되지 않은 경우 XML 출력은

<Approval Approved="false" /> 

는이 같은 뭔가를 지정하는 것이 가능 할 수 있습니다 속성에 해당하는 경우 그래서, XML 출력이있을 수 있습니다 XSD?

+1

그것은 XSD에서 불가능하지만, 표현 할 수있을 것을 사용하여 스키마 트론 (http://www.schematron.com/) 또는 비슷한 것. –

답변

6

밝혀졌지만 (일종의) 할 수는 있지만 방법은 완전히 엉망입니다.

<xs:element name="ArchivedFormulation"> 
<xs:complexType> 
    <xs:choice> 
    <xs:element name="ApprovedFormulation" type="ApprovedFormulation" /> 
    <xs:element name="NonApprovedFormulation" type="NonApprovedFormulation" /> 
    </xs:choice> 
</xs:complexType> 

컴플렉스를 추가 할 수

두 복잡한 유형 (승인 된 태그 하나없이 하나)하게 루트 요소를 변경하고 다음과 같이 두 가지 유형을 전환 할 수 있도록했다 유형은 XSD 상속을 사용합니다. 내가 원하는 것을 준

<xs:complexType name="ApprovedFormulation"> 
<xs:complexContent> 
    <xs:extension base="NonApprovedFormulation"> 
    <xs:sequence> 
     <xs:element name="Approved" minOccurs="1" maxOccurs="1"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="ApprovedBy" type="xs:string" /> 
      <xs:element name="ApprovedOn" type="xs:date" /> 
      </xs:sequence> 
      <xs:attribute name="IsApproved" type="xs:boolean" /> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:extension> 
</xs:complexContent> 
.

1

다소 간단한 방법은 값이 true 또는 false이지만 Approved 요소가 있거나없는 부재중 Approved 속성이 아닌 부울 값을 신호로 보내는 것입니다.

<xs:element name="Formulation"> 
    <xs:complexType> 
    <xs:sequence minOccurs="0"> 
     <xs:element ref="Approved"/> 
     <xs:element ref="By"/> 
     <xs:element ref="Date"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

은 이제 두 가지 예는 다음과 같이 :

<Formulation/> 
<Formulation> 
    <Approved/> 
    <By>RT</By> 
    <Date>27/07/2011</Date> 
</Formulation> 
관련 문제