我在生成允许我验证XML的XSD时遇到了困难。我当前的错误是第9行的错误:第47列,元素声明的内容必须匹配(注释?,(simpleType | complexType)?,(unique | key | keyref)*)。我已经检查了XML和XSD的良好结构;根据我的编辑,他们是。
我假设错误是指XSD而不是XML实例,主要是因为我的XML中第9行没有第47列。顺便说一下,XML无法改变。这是作业的一部分。
我尝试了一些让错误消失的事情。我曾经做过一次(忘了怎么做),但是我在XSD中的几乎同一个位置得到了另一个(涉及一个既有属性类型又有简单| complexType的元素)。 我已经尝试将属性移动到关闭该元素的complexType结束标记之前(所以在我的所有子元素之后我已经关闭了序列标记)。我已经尝试将它放在嵌套在complexType标记中的开头。
基本上我走了一圈,希望有人可以指出方向。我怀疑它与我如何为我的元素分配属性值有关,特别是在UpdatedBy元素的情况下,它有一个属性,它自己的文本字符串与属性分开,没有子元素。
XML代码是:
<?xml version="1.0" encoding="UTF-8"?>
<task
xmlns="http://www.example.com/task"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/task task2.xsd">
<UpdatedBy kind="SalesPerson">Lisa Moroz</UpdatedBy>
<ShipTo country="Canada">
<name>Maya Wells</name>
<street>44 Gamble Avenue</street>
<city>Toronto</city>
<province>ON</province>
<zip>L1M3G1</zip>
</ShipTo>
<ShipTo country="Canada">
<name>Maya Wells</name>
<street>62 Elm Street</street>
<city>Montreal</city>
<province>QC</province>
<zip>K2J3H4</zip>
</ShipTo>
<BillTo>
<country>Canada</country>
<name>Maya Wells</name>
<street>78 Audley Street</street>
<city>Oakville</city>
<province>ON</province>
<zip>O3R1M5</zip>
</BillTo>
</task>
这是XSD:
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:target="http://www.example.com/task"
targetNamespace="http://www.example.com/task" elementFormDefault="qualified">
<element name="name">
<complexType>
<sequence>
<element name="UpdatedBy" type="string">
<attribute name="kind" type="string"/>
</element>
<element name="ShipTo" maxOccurs="4">
<complexType>
<sequence>
<element name="name" type="string"/>
<simpleType>
<element name="street" type="string">
<restriction base="string">
<minLength value="5"/>
</restriction>
</element>
</simpleType>
<element name="city" type="string"/>
<simpleType>
<element name="province" type="string">
<restriction base="string">
<enumeration value="AB"/>
<enumeration value="BC"/>
<enumeration value="MB"/>
<enumeration value="NB"/>
<enumeration value="NL"/>
<enumeration value="NS"/>
<enumeration value="NU"/>
<enumeration value="ON"/>
<enumeration value="PE"/>
<enumeration value="QC"/>
<enumeration value="SK"/>
<enumeration value="YT"/>
</restriction>
</element>
</simpleType>
<element name="zip" type="string"/>
</sequence>
<attribute name="country" type="string"/>
</complexType>
</element>
<element name="BillTo" minOccurs="1">
<complexType>
<sequence>
<element name="country" type="string"/>
<element name="name" type="string"/>
<simpleType>
<element name="street" type="string">
<restriction base="string">
<minLength value="5"/>
</restriction>
</element>
</simpleType>
<element name="city" type="string"/>
<simpleType>
<element name="province" type="string">
<restriction base="string">
<enumeration value="AB"/>
<enumeration value="BC"/>
<enumeration value="MB"/>
<enumeration value="NB"/>
<enumeration value="NL"/>
<enumeration value="NS"/>
<enumeration value="NU"/>
<enumeration value="ON"/>
<enumeration value="PE"/>
<enumeration value="QC"/>
<enumeration value="SK"/>
<enumeration value="YT"/>
</restriction>
</element>
</simpleType>
<element name="zip" type="string"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>
感谢您的任何提示和建议:) [问题或如何在将来更好地提出我的问题;第一次发帖]
答案 0 :(得分:1)
(1)更改
<element name="name">
以强>
<element name="task">
(2)声明如下,
<element name="UpdatedBy" type="string">
<attribute name="kind" type="string"/>
</element>
需要xsd:complexType且没有@type =“string”属性:
<element name="UpdatedBy">
<complexType>
<simpleContent>
<extension base="string">
<attribute name="kind" type="string"/>
</extension>
</simpleContent>
</complexType>
</element>
(3)在xSD中的多个位置推送xsd:element下的xsd:simpleType。
<?xml version="1.0" encoding="UTF-8"?>
<task
xmlns="http://www.example.com/task"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/task try.xsd">
<UpdatedBy kind="SalesPerson">Lisa Moroz</UpdatedBy>
<ShipTo country="Canada">
<name>Maya Wells</name>
<street>44 Gamble Avenue</street>
<city>Toronto</city>
<province>ON</province>
<zip>L1M3G1</zip>
</ShipTo>
<ShipTo country="Canada">
<name>Maya Wells</name>
<street>62 Elm Street</street>
<city>Montreal</city>
<province>QC</province>
<zip>K2J3H4</zip>
</ShipTo>
<BillTo>
<country>Canada</country>
<name>Maya Wells</name>
<street>78 Audley Street</street>
<city>Oakville</city>
<province>ON</province>
<zip>O3R1M5</zip>
</BillTo>
</task>
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:target="http://www.example.com/task"
targetNamespace="http://www.example.com/task" elementFormDefault="qualified">
<element name="task">
<complexType>
<sequence>
<element name="UpdatedBy">
<complexType>
<simpleContent>
<extension base="string">
<attribute name="kind" type="string"/>
</extension>
</simpleContent>
</complexType>
</element>
<element name="ShipTo" maxOccurs="4">
<complexType>
<sequence>
<element name="name" type="string"/>
<element name="street">
<simpleType>
<restriction base="string">
<minLength value="5"/>
</restriction>
</simpleType>
</element>
<element name="city" type="string"/>
<element name="province">
<simpleType>
<restriction base="string">
<enumeration value="AB"/>
<enumeration value="BC"/>
<enumeration value="MB"/>
<enumeration value="NB"/>
<enumeration value="NL"/>
<enumeration value="NS"/>
<enumeration value="NU"/>
<enumeration value="ON"/>
<enumeration value="PE"/>
<enumeration value="QC"/>
<enumeration value="SK"/>
<enumeration value="YT"/>
</restriction>
</simpleType>
</element>
<element name="zip" type="string"/>
</sequence>
<attribute name="country" type="string"/>
</complexType>
</element>
<element name="BillTo" minOccurs="1">
<complexType>
<sequence>
<element name="country" type="string"/>
<element name="name" type="string"/>
<element name="street">
<simpleType>
<restriction base="string">
<minLength value="5"/>
</restriction>
</simpleType>
</element>
<element name="city" type="string"/>
<element name="province">
<simpleType>
<restriction base="string">
<enumeration value="AB"/>
<enumeration value="BC"/>
<enumeration value="MB"/>
<enumeration value="NB"/>
<enumeration value="NL"/>
<enumeration value="NS"/>
<enumeration value="NU"/>
<enumeration value="ON"/>
<enumeration value="PE"/>
<enumeration value="QC"/>
<enumeration value="SK"/>
<enumeration value="YT"/>
</restriction>
</simpleType>
</element>
<element name="zip" type="string"/>
</sequence>
</complexType>
</element>
</sequence>
</complexType>
</element>
</schema>