2013-10-30 45 views
0

我有一個原型XML模式 - 請參閱提取文章的末尾。我想要做的是在只有1個「輸入」元素的情況下使「行」和「列」屬性可選,但如果有多個「輸入」元素則需要。我如何在XSD語法中執行此操作?如何根據兄弟元素的數量更改必需/可選屬性?

另外,這個模式是從一​​個工具生成的,它看起來過於複雜。有什麼辦法可以刪除「xs:extension」/「xs:simpleContent」/「xs:complexType」元素嗎?

XML架構提取物:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified" targetNamespace="foobar" 
    xmlns:f="foobar"> 
    <xs:element name="inspection"> 
     <xs:complexType> 
      <xs:sequence minOccurs="1" maxOccurs="unbounded"> 
       <xs:element ref="f:input" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="input"> 
     <xs:complexType> 
      <xs:simpleContent> 
       <xs:extension base="xs:integer"> 
        <!--other attributes--> 
        <xs:attribute name="row" use="optional" type="xs:integer" /> 
        <xs:attribute name="column" use="optional" type="xs:integer" /> 
       </xs:extension> 
      </xs:simpleContent> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

對此的回答取決於您是否使用XSD v 1.0或v 1.1。任何想法? –

回答

0

在XML架構1.0什麼你的建議可能。

此外,關於本節:

而且,從工具生成的這個模式,它似乎過於複雜。有什麼辦法可以刪除「xs:extension」/「xs:simpleContent」/「xs:complexType」元素嗎?

沒有簡單的方法。你的元素複雜,因爲它基於一個簡單的數據類型,它已被擴展。您可以通過直接給予xs:integer類型的元素使其更簡單,因爲xs:integer數據類型沒有任何屬性,您將失去rowcolumn屬性。

相關問題