我繼承了一些2004年最後更新的XML模式。自那時起IT一直在工作,但軟件更新已導致一些問題。 xml不再在XMLspy中驗證。XML Schema選擇不同序列中的不同類型的相同元素導致類型錯誤
無論如何,問題似乎是通過定義具有不同名稱的幾個不同simpleType來定義元素的當前方式是不正確的。我不明白如何解決這個問題。
用XMLspy 2004打開文件xml驗證就好了。
開口與lastes XMLSPY我收到以下錯誤的文件:
Element 'Element' is not consistent with element 'Element'.
Details:
cos-element-consistent.2: Both type definitions ('type2' and 'type1') must have the same name
注:以下XML /模式不是實際 XML。我重新創建了它,並將其推廣以防止出現任何類型的問題(在這裏發佈實時程序的內部工作有點不合時宜)。所以,如果你看到一個錯字,這是我的錯,而不是Schema的錯。
的XML:
<?xml version="1.0" encoding="UTF-8"?>
<Package xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<FirstElement></FirstElement>
<SecondElement>
<Element></Element>
<Parameters>
<Param value="#Value#">name1</Param>
</Parameters>
</SecondElement>
</Package>
他們給我的XML模式,它產生錯誤:
<?ml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="Package">
<xs:complexType>
<xs:choice>
<xs:sequence>
<xs:element name="FirstElement"/>
<xs:element name="SecondElement">
<xs:complexType>
<xs:group ref="Group1"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:sequence>
<xs:element name="FirstElement"/>
<xs:element name="SecondElement">
<xs:complexType>
<xs:group ref="Group2" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:choice>
</xs:complextype>
</xs:element>
<xs:group name="Group1">
<xs:choice>
<xs:sequence>
<xs:element name="Element" type="type1"/>
</xs:sequence>
<xs:sequence>
<xs:element name="Element" type="type2"/>
</xs:sequence>
<xs:sequence>
<xs:element name="Element" type="type3"/>
</xs:sequence>
</xs:choice>
</xs:group>
<xs:group name="Group2">
<xs:choice>
<xs:sequence>
<xs:element name="Element" type="type1"/>
</xs:sequence>
<xs:sequence>
<xs:element name="Element" type="type4"/>
<xs:element name="Parameters" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="Param">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="TRUE"/>
<xs:enumeration value="FALSE"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:choice>
</xs:group>
<xs:simpleType name="type1">
<xs:restriction base="xs:string">
<xs:enumeration value="ONE"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="type2">
<xs:restriction base="xs:string">
<xs:enumeration value="TWO"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="type3">
<xs:restriction base="xs:string">
<xs:enumeration value="THREE"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="type4">
<xs:restriction base="xs:string">
<xs:enumeration value="FOUR"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
這將是真棒,如果有人給我一些有識之士就如何保持邏輯模式在使XML有效的同時進行檢查。
謝謝!
你進入了「共現約束」的複雜世界。這是您想要根據元素的同胞來限制元素的位置。有幾種方法:XSL錯誤解析,Schematron和XML Schema 1.1。最簡單的做法是將約束作爲業務邏輯放在應用程序中。 http://www.w3.org/wiki/Co-occurrence_constraints –