Câu hỏi Lược đồ XML Cách hạn chế thuộc tính bằng cách liệt kê


Tôi có Thẻ XML sau

<price currency="euros">20000.00</price>

Làm cách nào để hạn chế thuộc tính tiền tệ với một trong các thông tin sau:

  • euro
  • bảng
  • USD

Và giá thành gấp đôi?

Tôi chỉ gặp lỗi khi tôi thử một loại trên cả hai, đây là những gì tôi đã có cho đến thời điểm này:

<xs:element name="price">
    <xs:complexType>
        <xs:attribute name="currency" type="xs:string">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="pounds" />
                    <xs:enumeration value="euros" />
                    <xs:enumeration value="dollars" />
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:element>

76
2018-01-19 12:02


gốc


Nếu bạn làm điều này, bạn cần phải loại bỏ type = "xs: string" khỏi phần tử <xs: attribute>. Bạn không thể cung cấp loại khi simpleType hoặc complexType xuất hiện. - Sal


Các câu trả lời:


Giá trị số dường như bị thiếu trong định nghĩa giá của bạn. Hãy thử những điều sau đây:

<xs:simpleType name="curr">
  <xs:restriction base="xs:string">
    <xs:enumeration value="pounds" />
    <xs:enumeration value="euros" />
    <xs:enumeration value="dollars" />
  </xs:restriction>
</xs:simpleType>



<xs:element name="price">
        <xs:complexType>
            <xs:extension base="xs:decimal">
              <xs:attribute name="currency" type="curr"/>
            </xs:extension>
        </xs:complexType>
</xs:element>

106
2018-01-19 12:47



Như được trả lời bởi @kjhughes, <xs:extension không thể trực tiếp là con của <xs:complexType nhưng thay vào đó cũng phải được chứa bởi <xs:complexContent hoặc là <xs:simpleContent. - HankCa


Câu trả lời mới cho câu hỏi cũ

Không có câu trả lời nào cho câu hỏi cũ này vấn đề thực sự.


14
2017-10-23 13:07





bạn cần tạo một loại và tạo thuộc tính của loại đó:

<xs:simpleType name="curr">
  <xs:restriction base="xs:string">
    <xs:enumeration value="pounds" />
    <xs:enumeration value="euros" />
    <xs:enumeration value="dollars" />
  </xs:restriction>
</xs:simpleType>

sau đó:

<xs:complexType>
    <xs:attribute name="currency" type="curr"/>
</xs:complexType>

7
2018-01-19 12:16



Xin chào, Đáng buồn thay, điều này không cho phép tôi hạn chế loại Giá thành "gấp đôi" và liệt kê hạn chế trên thuộc tính "tiền tệ" cùng một lúc - Luke


<xs:element name="price" type="decimal">
<xs:attribute name="currency" type="xs:string" value="(euros|pounds|dollars)" /> 
</element> 

Điều này sẽ loại bỏ hoàn toàn nhu cầu liệt kê. Bạn có thể thay đổi loại để tăng gấp đôi nếu được yêu cầu.


0
2017-09-30 09:30