架构规则:
<?xml version="1.0"?>
<Slams ...>
<slam name="Australia" year="2012">
<winner>Djokovic</winner>
<runnerUp>Nadal</runnerUp>
<score>5-76-46-26-77-5</score>
<surface>Rebound Ace</surface>
<semiFinalist>Federer</semiFinalist>
<semiFinalist>Murray</semiFinalist>
</slam>
<slam name="French Open" year="2012">
<winner>Nadal</winner>
<runnerUp>Djokovic</runnerUp>
<score>6-46-32-67-5</score>
<surface>Clay</surface>
<semiFinalist>Federer</semiFinalist>
<semiFinalist>Ferrer</semiFinalist>
</slam>
<slam name="Wimbledon" year="2012">
<winner>Federer</winner>
<runnerUp>Murray</runnerUp>
<score>4-67-56-36-4</score>
<surface>Grass</surface>
<semiFinalist>Djokovic</semiFinalist>
<semiFinalist>Tsonga</semiFinalist>
</slam>
<slam name="US Open" year="2012">
<winner>Murray</winner>
<runnerUp>Djokovic</runnerUp>
<score>7-67-52-63-66-2</score>
<surface>Hard Court</surface>
<semiFinalist>Berdych</semiFinalist>
<semiFinalist>Ferrer</semiFinalist>
</slam>
</Slams>
这是我到目前为止所得到的,但我不确定它是否正确。
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<xs:element name="Australia">
<xs:complexType>
<xs:sequence>
<xs:element name="winner" type="xs:string"/>
<xs:element name="runnerUp" type="xs:string"/>
<xs:element name="score" type="xs:string"/>
<xs:element name="surface" type="xs:string"/>
<xs:element name="semiFinalist" type="xs:string"/>
<xs:element name="semiFinalist" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="French Open">
<xs:complexType>
<xs:sequence>
<xs:element name="winner" type="xs:string"/>
<xs:element name="runnerUp" type="xs:string"/>
<xs:element name="score" type="xs:string"/>
<xs:element name="surface" type="xs:string"/>
<xs:element name="semiFinalist" type="xs:string"/>
<xs:element name="semiFinalist" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Wimbledon">
<xs:complexType>
<xs:sequence>
<xs:element name="winner" type="xs:string"/>
<xs:element name="runnerUp" type="xs:string"/>
<xs:element name="score" type="xs:string"/>
<xs:element name="surface" type="xs:string"/>
<xs:element name="semiFinalist" type="xs:string"/>
<xs:element name="semiFinalist" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="US Open">
<xs:complexType>
<xs:sequence>
<xs:element name="winner" type="xs:string"/>
<xs:element name="runnerUp" type="xs:string"/>
<xs:element name="score" type="xs:string"/>
<xs:element name="surface" type="xs:string"/>
<xs:element name="semiFinalist" type="xs:string"/>
<xs:element name="semiFinalist" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
答案 0 :(得分:1)
要解决的问题:
<强>#1 强>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
到
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
elementFormDefault="qualified">
<强>#2 强>
定义单个slam
元素,其中包含name
属性,而不是每个此类命名可能性的不同元素。还要添加year
属性。
<强>#3 强>
您的XML(据您所示)不使用名称空间,因此请从XSD xs:schema
元素中删除这些行:
targetNamespace="http://www.w3schools.com"
xmlns="http://www.w3schools.com"
<强>#4 强>
将slam
元素放在Slams
元素声明中,然后使用maxOccurs="unbounded"
。对maxOccurs="2"
使用unbounded
(或3或semiFinalist
),而不是在slam
中重复元素声明。
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xs:element name="Slams">
<xs:complexType>
<xs:sequence>
<xs:element name="slam" maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="winner" type="xs:string"/>
<xs:element name="runnerUp" type="xs:string"/>
<xs:element name="score" type="xs:string"/>
<xs:element name="surface" type="xs:string"/>
<xs:element name="semiFinalist" type="xs:string"
maxOccurs="unbounded"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string"/>
<xs:attribute name="year" type="xs:integer"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
这将为您提供验证XML的XSD。
留给读者练习:调整它以满足给定的架构规则。
答案 1 :(得分:0)
元素名称是标签的名称:在您的情况下 您将它与属性名称
的值混淆