2013-10-13 60 views
0

我无法找到该问题的尝试不同的东西。我非常感谢任何帮助。 我有一个有效的.xsd文档,但更改了xml的某些部分,现在我无法得到它的有效性,我没有找到错误。错误消息如下。有人看到那里有什么问题吗?异常开始,属性序列开始。XSD验证 - 属性的序列 - 例外

<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:'序列'的内容必须匹配(注释?,(元素|序列|任何))。发现问题始于:属性。 错误 - 第17,53行:org.xml.sax.SAXParseException; lineNumber:17; columnNumber:53; s4s-elt-must-match.1:'序列'的内容必须匹配(注释?,(元素|序列|任何))。发现问题始于:属性。

编辑: 也许,如果我还上传了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> 

回答

1

中可以看出(实施例)如在错误消息指出,一个<sequence>元素不能包含任何<attribute>元件。另外,看着例如these docs,<sequence>不应该直接嵌套在<element>中。

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

至于解决办法,以取代<xs:complexType><sequence>,你应该罚款。

编辑:其实,我不知道您的属性应该去:

  • 他们是否应该是类型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> 
+0

我想你的解决方案,它的工作。非常感谢你!!! :) 他们应该是来自“zhaw” - 元素的属性。 非常感谢! – codepleb

0

你不能有属性的顺序您的XSD。 zhaw可能需要使用simpleContent被定义为complexType如可以在http://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>