我继承了2004年最后更新的一些XML Schema。从那时起,IT一直在工作,但软件更新导致了一些问题。 xml不再在XMLspy中验证。
无论如何,问题似乎是通过定义具有不同名称的几个不同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 / Schema不是实际 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有效的同时保持逻辑模式检查的信息,那将是非常棒的。
谢谢!
答案 0 :(得分:0)
将David W的评论作为回答发布,以提高新会员或访问者的可读性。
你正处于“共现约束”的复杂世界。它的 您想要根据元素的兄弟元素限制元素的位置。 有几种方法:XSL错误解析,Schematron和XML Schema 1.1。最简单的方法是将约束作为业务逻辑放在应用程序中。
并Here is a wiki Link获取更多信息。