自从我搞乱模式以来已经三年了,我记得他们对 namespace 前缀等非常挑剔。我还记得在 Eclipse 中使用 XML 编辑器(我有 Indigo)时,如果不展开,复杂类型就无法轻松解析。
作为 XML 专家,您能否查看我的 XML 文件并告诉我前置的 XSD XML 架构出了什么问题?
谢谢。
再见
+++++
Eclipse 提示:
文档中根元素后面的标记必须格式正确。
我应该指出,我手动创建了 XML,并在以下位置自动生成了 XML:
http://www.xmlforasp.net/codebank/system_xml_schema/buildschema/buildxmlschema.aspx
(单独的复杂类型:正如我 3 年前手动使用 Amazon 的 Amazon Seller Central XML 文件所做的那样)
在我看来,在一种情况下应该使用 ref,但我会听从专家的意见。
+++++
<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="idioms" type="idiomsType" />
<xsd:complexType name="idiomsType">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="idiom" type="idiomType" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="idiomType">
<xsd:sequence>
<xsd:element name="phrase" type="xsd:string" />
<xsd:element name="meaning" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
<idioms>
<idiom>
<phrase>A bit much</phrase>
<meaning>Excessive or annoying.</meaning>
</idiom>
<idiom>
<phrase>A bridge too far</phrase>
<meaning>Act of overreaching.</meaning>
</idiom>
</idioms>
好的,更新。我将 XSD 内联包含在 XML 中的捷径是非法的。所以我把它放回 XSD 文件中。我还了解到我无法以 xml 开头前缀,因此我将其更改为“tc”。
XSD 现在是正确的(与我展开亚马逊卖家中心 XSD 的样式相同)。
<?xml version="1.0" encoding="utf-16"?>
<xsd:schema xmlns:tcidioms="urn:tcidioms" targetNamespace="urn:tcidioms" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="idioms" type="tcidioms:idiomsType"/>
<xsd:complexType name="idiomsType">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="idiom" type="tcidioms:idiomType" />
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="idiomType">
<xsd:sequence>
<xsd:element name="phrase" type="xsd:string" />
<xsd:element name="meaning" type="xsd:string" />
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
但是我在尝试将其包含在我的 XML 文件中时遇到了麻烦,它现在看起来像这样(XML 和 XSD 位于同一目录中):
它提示:没有检测到文档的语法约束(DTD 或 XML 模式)。
这意味着我的 XML 文档中的第 2 行不正确。我尝试了几种变体来包含此文件,但没有一个有效。请记住,此 XML(和 XSD)将从本地文件系统读取,而不是通过 http 读取。还会以这种方式验证吗?
<?xml version="1.0" encoding="utf-16"?>
<idioms xmlns:tcidioms="urn:tcidioms" targetNamespace="urn:tcidioms ./EnglishIdioms.xsd">
<idiom>
<phrase>A bit much</phrase>
<meaning>Excessive or annoying.
</meaning>
</idiom>
<idiom>
<phrase>A bridge too far</phrase>
<meaning>Act of overreaching, going too far
and getting into trouble
or
failing.
</meaning>
</idiom>
</idioms>
Visual Studio 2010(它创建了俄罗斯娃娃风格架构):
虽然 XML 文件设置为使用 VS2010 界面中的架构,但代码中并未显示这一点?
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="idioms">
<xs:complexType>
<xs:sequence>
<xs:element maxOccurs="unbounded" name="idiom">
<xs:complexType>
<xs:sequence>
<xs:element name="phrase" type="xs:string" />
<xs:element name="meaning" type="xs:string" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<?xml version="1.0" encoding="utf-8"?>
<idioms>
<idiom>
<phrase>A bit much</phrase>
<meaning>Excessive or annoying.</meaning>
</idiom>
<idiom>
<phrase>A bridge too far</phrase>
<meaning>Act of overreaching.</meaning>
</idiom>
<idiom>
<phrase>A chain is no stronger than its weakest link</phrase>
<meaning>The weakest part of an object is it's strength.</meaning>
</idiom>
</idioms>
最佳答案
您的根元素未正确关闭。
使用</idioms>
,不是<idioms>
:)
更新:
缺少命名空间可能是问题所在(架构和 xml 中)。
关于xml - 我的 XSD XML 架构出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10069678/