xml - 我的 XSD XML 架构出了什么问题?

标签 xml xsd root complextype

自从我搞乱模式以来已经三年了,我记得他们对 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/

相关文章:

xml - 测试选择时不采用 XSLT

Java 文件写入和 Raspberry Pi

c - 为什么以 root 用户身份运行 Quake II 是愚蠢的?

xml - 在 XSD 中嵌套来自不同命名空间的 XML 元素

sql - 在邻接表中查找后代的根节点

android - 如果 Android 是底层的 Linux,那我们为什么还需要 root?

xml - Inputmask 小部件不适用于 odoo 10 c

java - 按下时如何使按钮变大? (安卓工作室)

java - 使用 JAXB marshal 添加/修改 XML 文件中的元素

java - 让 JAXB 在编码到 XML 时强制执行 XSD 限制