具有属性的元素中的xml架构嵌套元素
我正在做学校作业 这是我的XML具有属性的元素中的xml架构嵌套元素,xml,xsd,Xml,Xsd,我正在做学校作业 这是我的XML <lineup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ComplexTypeDemo.xsd"> <team teamName="Maple Leafs" city="Toronto"> <visitor/> <player number="17"&g
<lineup xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="ComplexTypeDemo.xsd">
<team teamName="Maple Leafs" city="Toronto">
<visitor/>
<player number="17">
<name>John Doe</name>
<position>Forward</position>
</player>
<!--Continue 20 Iterations-->
</team>
<team teamName="Rangers" city="New York">
<home/>
<player number="17">
<name>John Doe</name>
<position>Forward</position>
</player>
<!--Continue 20 Iterations-->
</team>
</lineup>
无名氏
向前地
无名氏
向前地
这是我的模式文档
<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="lineup">
<xs:complexType>
<xs:sequence>
<xs:element name="team" minOccurs="2" maxOccurs="2">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element name="home"/>
<xs:element name="visitor"/>
</xs:choice>
<xs:element name="player" minOccurs="20" maxOccurs="20">
<xs:complexType>
<xs:all>
<xs:element name="name" />
<xs:element name="position"/>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
我需要创建一个模式来验证这一点。但我不知道如何验证,因为它是嵌套的,但它有属性。我似乎只能做一个或另一个,但不能同时做两个….你很接近您可以将属性声明放在
xs:sequence
或xs:all
关闭标记之后,但放在xs:complexType
关闭标记之前。对XSD的此更新将验证您提供的XML文档实例(如前所述,模实际上包括20次迭代):
如果您有一个复杂类型,您应该将属性引用(或声明)放在组(序列、选项等)之后。例如:
<xs:element name="team">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element ref="home"/>
<xs:element ref="visitor"/>
</xs:choice>
<xs:element ref="player" minOccurs="20" maxOccurs="20"/>
</xs:sequence>
<xs:attribute name="city" type="xs:string"/>
<xs:attribute name="teamName" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="visitor">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="visitorName" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
如果您有一个简单类型(例如,一个需要属性的空元素,或者一个包含字符串内容的元素),那么您应该将您的类型声明为一个包含简单内容的复杂类型,并为属性提供简单内容的扩展。例如:
<xs:element name="team">
<xs:complexType>
<xs:sequence>
<xs:choice>
<xs:element ref="home"/>
<xs:element ref="visitor"/>
</xs:choice>
<xs:element ref="player" minOccurs="20" maxOccurs="20"/>
</xs:sequence>
<xs:attribute name="city" type="xs:string"/>
<xs:attribute name="teamName" type="xs:string"/>
</xs:complexType>
</xs:element>
<xs:element name="visitor">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="visitorName" type="xs:string"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
哦,非常感谢。我想我尝试了的每一种组合,但我没有意识到属性需要放在嵌套部分的末尾。