嗨我有架构问题,我尝试使用如下属性创建受限元素:
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="turn">
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="360"/>
</xs:restriction>
</xs:simpleType>
<xs:element name = "TURN_LEFT" type="turn" nillable="false">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedShort">
<xs:attribute type="xs:string" name="description" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name = "FORWARD" nillable="false">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedShort">
<xs:attribute type="xs:string" name="description" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:schema>
TURN_LEFT的开放标记的错误描述&#34; type属性不能与simpleType或complexType&#34;的元素一起出现。
如何使用属性限制?
答案 0 :(得分:2)
出现元素&#34;转&#34;由TURN_LEFT在架构中使用。 但是,对于不需要的同一元素有两个显式声明。 您可以尝试以下更正:
<xs:element name = "TURN_LEFT" type="turn" nillable="false">
<!-- Commented TURN_LEFT declaration -->
<!--<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedShort">
<xs:attribute type="xs:string" name="description" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>-->
</xs:element>
<xs:simpleType name="turn">
<xs:restriction base="xs:unsignedShort">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="360"/>
</xs:restriction>
</xs:simpleType>
<xs:element name = "FORWARD" nillable="false">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:unsignedShort">
<xs:attribute type="xs:string" name="description" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
答案 1 :(得分:1)
您不能在元素中包含类型属性和 complexType (或simpleType)子元素。
TURN_LEFT可以是 turn 类型的元素(属性 type =“turn”),或者TURN_LEFT应该是元素内定义的complexType类型的元素。 / p>
看看这个简单的例子:
<xs:element name="myElement" type="xs:boolean">
<xs:restriction base="float">
</xs:restriction>
</xs:element>
如果您定义一个类似于XML Schema的元素,那么它是不正确的,因为它是不明确的(如果您已经定义了两种类型的类型,我们如何知道 myElement 它的布尔类型或浮点类型?)
我认为这就是你想要做的事情:
<xs:element name = "TURN_LEFT" nillable="false">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="turn">
<xs:attribute type="xs:string" name="description" use="optional"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
基础(您正在扩展的类型)是转类型。 这将验证此元素:
<TURN_LEFT description="cool">12</TURN_LEFT>