【问题标题】:Error while validating XML against XSD针对 XSD 验证 XML 时出错
【发布时间】:2011-06-26 18:39:15
【问题描述】:

我有一个简单的 XML 文件,我想针对 XSD 进行验证。 当我使用一些随机验证器进行验证时,我总是会收到以下错误:

发现以元素“实体”开头的无效内容。应为“{Entities}”之一。

这是 XML:

<BusinessModel xmlns="http://schemas.testxyzxyz.de/xyz/BusinessModel" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Entities>
    <Entity Name="Customer">
        <Attribute Name="Forename" Type="String" />
        <Attribute Name="Surname" Type="String" />
        <Attribute Name="Birthday" Type="Date" />
    </Entity>
</Entities>
</BusinessModel>

还有 XSD:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://schemas.testxyzxyz.de/xyz/BusinessModel"
        xmlns="http://schemas.testxyzxyz.de/xyz/BusinessModel">

<xsd:element name="BusinessModel" type="BusinessModelType" />

<xsd:complexType name="BusinessModelType">
    <xsd:choice minOccurs="0" maxOccurs="unbounded">
        <xsd:element name="Entities" type="EntitiesType" />
    </xsd:choice>
</xsd:complexType>

<xsd:complexType name="EntitiesType">
    <xsd:sequence>
        <xsd:element name="Entity" type="EntityType" maxOccurs="unbounded" />
    </xsd:sequence>
</xsd:complexType>

<xsd:complexType name="AttributeType">
    <xsd:attribute name="Name" type="xsd:string" use="required" />
    <xsd:attribute name="Type" type="xsd:string" use="required" />
</xsd:complexType>

<xsd:complexType name="EntityType">
    <xsd:sequence>
        <xsd:element name="Attribute" type="AttributeType" maxOccurs="unbounded" minOccurs="1" />
    </xsd:sequence>
        <xsd:attribute name="Name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:schema>

几个小时以来一直在寻找这个问题,但我仍然没有发现错误。你能找到我正确的方向吗? ;)

【问题讨论】:

    标签: xml xsd


    【解决方案1】:

    XML Representation of Element Declaration Schema Components:

    {目标命名空间}

    如果form 存在且其实际值qualified,或者如果form 不存在且elementFormDefault实际值 987654326@祖先为qualified,则为父&lt;schema&gt;元素信息项的targetNamespace[属性]的实际值,如果没有则不存在 ,否则不存在

    由于elemeFormDefault 的默认值为unqualified,除非另有说明,否则本地元素必须是不合格的。

    由于您设置了xmlns="http://schemas.testxyzxyz.de/xyz/BusinessModel",因此Entities 成为合格的。 解决方法是将elementFormDefault="qualified" 设置为@polishchuk 所写。

    【讨论】:

    • 谢谢你,解决了问题:)
    【解决方案2】:

    试试这个架构:

    <?xml version="1.0"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://schemas.testxyzxyz.de/xyz/BusinessModel" xmlns:b="http://schemas.testxyzxyz.de/xyz/BusinessModel">
      <xsd:element name="BusinessModel" type="b:BusinessModelType" />
      <xsd:complexType name="BusinessModelType">
        <xsd:choice minOccurs="0" maxOccurs="unbounded">
          <xsd:element name="Entities" type="b:EntitiesType" />
        </xsd:choice>
      </xsd:complexType>
      <xsd:complexType name="EntitiesType">
        <xsd:sequence>
          <xsd:element name="Entity" type="b:EntityType" maxOccurs="unbounded" />
        </xsd:sequence>
      </xsd:complexType>
      <xsd:complexType name="AttributeType">
        <xsd:attribute name="Name" type="xsd:string" use="required" />
        <xsd:attribute name="Type" type="xsd:string" use="required" />
      </xsd:complexType>
      <xsd:complexType name="EntityType">
        <xsd:sequence>
          <xsd:element name="Attribute" type="b:AttributeType" maxOccurs="unbounded" minOccurs="1" />
        </xsd:sequence>
        <xsd:attribute name="Name" type="xsd:string" use="required" />
      </xsd:complexType>
    </xsd:schema>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-20
      • 2011-10-12
      • 2011-07-18
      相关资源
      最近更新 更多