首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的XSD XML Schema有什么问题?

我的XSD XML Schema有什么问题?
EN

Stack Overflow用户
提问于 2012-04-09 14:20:42
回答 3查看 2.4K关注 0票数 2

我已经3年没有使用模式了,我记得他们对名称空间、前缀等等都很讲究。我还记得,在Eclipse中使用XML编辑器(我有Indigo)时,如果不展开复杂类型,就不能很容易地解析它。

那么,能否请XML专家看看我的XML文件,告诉我前面的XSD XML模式出了什么问题?

谢谢。

再见

+++++

Eclipse抱怨:

文档中跟在根元素后面的标记必须是格式正确的。

我应该指出的是,我手动创建了XML,并从下面的位置自动生成了XML:

http://www.xmlforasp.net/codebank/system_xml_schema/buildschema/buildxmlschema.aspx

(分离复杂类型:正如我3年前手动处理Amazon的Amazon卖家Central XML文件时所做的那样)

在我看来,作为ref应该在一种情况下使用,但我会听从专家的意见。

+++++

代码语言:javascript
复制
<?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>

好的,更新。我在XML中内联包含XSD的快捷方式是非法的。所以我把它放回了XSD文件中。我还了解到不能以xml作为前缀,所以我将其改为'tc‘。

XSD现在是正确的(与我展开Amazon卖家Central XSD的风格相同)。

代码语言:javascript
复制
<?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>

但是我在尝试包含这个im我的XML文件时遇到了麻烦,它现在看起来像这样( XML和XSD在同一个目录中):

它报告:没有检测到文档的语法约束(DTD或XML模式)。

这意味着我的XML文档中的第2行不正确。我尝试了几种变体来包含这个文件,但都没有成功。记住,这个XML (和XSD)将从本地文件系统中读取,而不是通过http。它还会以这种方式进行验证吗?

代码语言:javascript
复制
<?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接口中使用模式,但在代码中没有显示出来吗?

代码语言:javascript
复制
<?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>
EN

回答 3

Stack Overflow用户

发布于 2012-04-09 14:38:50

您的根元素未正确关闭。

使用</idioms>,而不是<idioms> :)

更新:

缺少名称空间可能是问题所在(在模式和xml中)。

票数 3
EN

Stack Overflow用户

发布于 2012-04-10 01:58:32

XSD spec

由顶级声明验证的

元素信息项必须使用该声明的{目标命名空间}进行限定(如果这是·不存在的·,则该项必须是非限定的)。

翻译:

如果希望将elementFormDefault属性设置为qualified (您是故意选择的吗?),则必须声明一个targetNamespace元素并将其设置为某个URI,然后为其提供也在名称空间中声明的XML。所以,就像这样

代码语言:javascript
复制
<xsd:schema targetNamespace="urn:so:example" attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
...
</xsd:schema>

并在xml中使用该名称空间:

代码语言:javascript
复制
<idioms xmlns="urn:so:example">
  <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>

或者,我认为只需从方案标记中删除elementFormDefault属性就可以了。它的默认值是unqualified。

票数 1
EN

Stack Overflow用户

发布于 2012-04-11 05:50:50

我使用VS2010从我的XML生成XML schema。在这样做时,它似乎忽略了(私有)名称空间,但它确实将UI中的模式设置为它刚刚生成的XML模式的名称。

而且,它不会在XML本身中显示它已经使用或包含了这个XML模式。

这是因为XML和XSD文件都具有相同的基名称(EnglishIdioms)。并且这两个文件都在同一个目录中?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10069678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档