XSD验证 - 属性序列 - 异常

时间:2013-10-13 09:05:02

标签: xml xsd xsd-validation

我找不到尝试不同的问题。我真的很感激任何帮助。 我有一个有效的.xsd文件,但更改了xml的某些部分,现在我无法使其有效,我没有发现错误。错误消息如下。有人看到那里有什么问题吗?异常开始,属性序列开始。

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:Projekt1" xmlns:proj="urn:Projekt1">
    <xs:element name="projekte" type="proj:ProjekteForm"/>

    <xs:complexType name="ProjekteForm">
        <xs:sequence>
            <xs:element name="person" type="proj:ProjekteForms" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="ProjekteForms">
        <xs:sequence>
            <xs:element name="name" type="xs:string"/>
            <xs:element name="link" type="xs:string"/>
            <xs:element name="zhaw" type="xs:string"/>
                <sequence>
                    <xs:attribute name="width" type="xs:integer"/>
                    <xs:attribute name="height" type="xs:integer"/>
                </sequence>
            <xs:element name="homepage" type="xs:string"/>
            <xs:element name="googlemapsx" type="xs:float"/>
            <xs:element name="googlemapsy" type="xs:float"/>
            <xs:element name="facebook" type="xs:string"/>
            <xs:element name="skype" type="xs:string"/>
            <xs:element name="twitter" type="xs:string"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:integer"/>
    </xs:complexType>
</xs:schema>

这里的内容是什么意思?在文档的另一个地方,它也是这样的。

消息:
无效。 错误 - 第16,52行:org.xml.sax.SAXParseException; lineNumber:16; columnNumber:52; s4s-elt-must-match.1:'sequence'的内容必须匹配(注释?,(element | group | choice | sequence | any))。从:attribute开始发现问题。 错误 - 第17,53行:org.xml.sax.SAXParseException; lineNumber:17; columnNumber:53; s4s-elt-must-match.1:'sequence'的内容必须匹配(注释?,(element | group | choice | sequence | any))。从:attribute。

开始发现问题

编辑: 也许如果我上传xml也很有帮助。但问题只是关于.xsd的有效性。

<?xml version="1.0" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="Projekt1.xsl" xmlns:x="urn:Projekt1" exclude-result-prefixes="x"?>
<x:projekte xmlns:x="urn:Projekt1">
    <person id= "1">
        <name>Franz Mommar</name>
        <link>http://www.dfki.de/~wahlster/Portrait_Photos/</link>
        <zhaw width="100" height="100">Portrait_Wahlster_Photo_by_Jim_Rakete.jpg</zhaw>
        <homepage>http://www.werni.ch</homepage>
        <googlemapsx>285.2342</googlemapsx>
        <googlemapsy>234.3598</googlemapsy>
        <facebook>franzmoammar</facebook>
        <skype>franz.moammar</skype>
        <twitter>franzmoammar</twitter>
    </person>
    <person id= "2">
        <name>Rüdiger Mannheim</name>
        <link>http://www.dfki.de/~wahlster/Portrait_Photos/</link>
        <zhaw width="100" height="100">Wahlster_Anschnitt_gross.jpg</zhaw>
        <homepage>http://www.humor.li</homepage>
        <googlemapsx>45.2342</googlemapsx>
        <googlemapsy>32.3598</googlemapsy>
        <facebook>rüdigermann</facebook>
        <skype>ruedi</skype>
        <twitter>geronimo</twitter>
    </person>
</x:projekte>

2 个答案:

答案 0 :(得分:1)

如错误消息中所述,<sequence>元素不能包含任何<attribute>元素。另外,看例如these docs<sequence>不应直接嵌套在<element>

此外,您的<sequence>元素缺少xs命名空间前缀。

至于解决方案,请将<sequence>替换为<xs:complexType>,您应该没问题。

编辑:实际上,我不确定你的属性应该去哪里:

  • 它们应该是ProjekteForms类型的属性吗?在这种情况下,请将它们与您的id属性一起放在该复杂类型定义的末尾。
  • 或者它们应该是您<zhaw>元素的属性?您的示例Xml建议这样做,但在您的XSD中,您对<zhaw>的定义并未包含具有属性的序列,因为您正在使用元素的单标记形式。将<xs:element name="zhaw" type="xs:string"/>替换为<xs:element name="zhaw">...</xs:element>(具有内部属性的复杂类型)。请注意,您必须省略type属性,因为已包含的<xs:complexType>元素已指定了类型。要允许文字内容,请将属性mixed="true"添加到<xs:complexType>元素。

后一种解决方案如下所示:

<xs:element name="zhaw">
    <xs:complexType mixed="true">
        <xs:attribute name="width" type="xs:integer"/>
        <xs:attribute name="height" type="xs:integer"/>
    </xs:complexType>
</xs:element>

答案 1 :(得分:0)

您的XSD中不能包含一系列属性。可能需要将zhaw定义为complexType simpleContenthttp://msdn.microsoft.com/de-de/library/ms256106.aspx

中可以看到{示例}
<xs:element name="zhaw">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="width" type="xs:integer"/>
        <xs:attribute name="height" type="xs:integer"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>