2011-07-27 9 views
11

Câu hỏi đầu tiên (hãy tử tế!) Giải thích: nếu một tài sản là đúng, tôi cần loại có các yếu tố. Vì vậy, nếu một thuộc tính là đúng, đầu ra XML có thể là:Một chuỗi các phần tử XML có thể có điều kiện trên một thuộc tính không?

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

Và nếu nó không được chấp thuận, đầu ra XML có thể là

<Approval Approved="false" /> 

Có thể chỉ định một cái gì đó như thế này trong một XSD?

+1

Đó là không thể trong XSD, nhưng bạn có thể bày tỏ rằng việc sử dụng Schematron (http://www.schematron.com/) hoặc một cái gì đó tương tự. –

Trả lời

6

Hóa ra, bạn có thể làm điều đó (loại) nhưng phương pháp hoàn toàn hút.

Đã phải làm hai loại phức tạp (một với thẻ Approved và một không có), thay đổi các yếu tố gốc và cho phép chuyển đổi giữa hai loại như thế này:

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

thể thêm khu phức hợp loại sử dụng thừa kế 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> 

Điều đó đã cho tôi những gì tôi muốn.

1

Phương pháp đơn giản hơn một chút là báo hiệu giá trị Boolean không có thuộc tính Approved có giá trị là đúng hoặc sai, nhưng có phần tử rỗng Approved hiện tại hoặc vắng mặt.

<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> 

Bây giờ hai ví dụ của bạn trông như thế này:

<Formulation/> 
<Formulation> 
    <Approved/> 
    <By>RT</By> 
    <Date>27/07/2011</Date> 
</Formulation>