2012-11-14 96 views
0

我對XSD格式有疑問。
爲例子,我有一個XML文檔關於XSD元素無效(XML Schema)

<?xml version="1.0" encoding="utf-8"?> 
<feed xmlns:media="http://search.yahoo.com/mrss/"> 
    <entry> 
    <title>Examples</title> 
    <id>1</id> 
    <media:group> 
     <media:thumbnail url="http://www.abc.com/image.jpg" /> 
     <trailer url="http://www.abc.com" /> 
     <info url="http://www.abc.com/xsd/info.jpg" /> 
     <media:description>1</media:description> 
     <media:content name="video.mp4" type="video" duration="400" repeat="true"/> 
    </media:group> 
    <menu> 
     <item uri="localhost:8080/xyzt" /> 
    </menu> 
    </entry> 
</feed> 

然後,我用的網站http://www.xmlforasp.net/codebank/system_xml_schema/buildschema/buildxmlschema.aspx自動轉換爲XSD文件(你可以嘗試)。然而,當我使用的網站http://www.xmlforasp.net/schemavalidator.aspx進行檢查XSD驗證,當時有一個關於XSD格式問題
問題:

無效的「名稱」屬性值「媒體:組」:「在‘:’字符,名稱中位置5處的十六進制值0x3A不能包含在名稱中。'。

<xsd:element name="entry"> 
     <xsd:complexType> 
     <xsd:sequence> 
      <xsd:element name="title" type="xsd:string" /> 
      <xsd:element name="id" type="xsd:int" /> 
      <xsd:element name="media:group">    <!-- here --> 
      <xsd:complexType> 
       <xsd:sequence> 

我不明白...爲什麼XSD的名稱:元素不能包含 「:」 字符??? 如果上述問題是正確的,我該如何解決它。

請幫助我,如果你知道這一點。
非常感謝!

+0

如果包含模式,這很有幫助,因爲那是錯誤所在。等一下,我會解決它......完成。 – 13ren

回答

1

嘗試使用其他驗證程序。我對這個網站一無所知,但是從您的證據來看,他們使用非名稱空間感知的XML解析器來解析XML。這是一件非常奇怪的事情。

1

「:」之前的文字被稱爲namespace。例如在「media:group」中,命名空間是「media」。

要在命名空間中定義一個元素,不能像您期望的那樣僅僅將它稱爲<xsd:element name="media:group">

相反,您必須將整個模式指定爲targetNamespace,然後在該模式中定義的所有所有元素都將具有該名稱空間。像這樣(的qualified部分意味着你的XML需要使用的命名空間,爲你的XML與「媒體」一樣):

<xsd:schema targetNamespace="http://search.yahoo.com/mrss/" 
      elementFormDefault="qualified" ...> 
    ... 
    <xsd:element name="group"> 

你也可以有一個模式,它的元素沒有命名空間,通過omittingtargetNamespace

<xsd:schema ...> 
    ... 
    <xsd:element name="entry"> 

注意:要在兩個名稱空間中定義元素,您需要兩個模式。通常情況下,您可以將模式按照importing組合到一起。但是,您的XML存在一個問題:對名稱空間的引用是循環的,因爲<entry>包含<media:group>,其中包含<trailer>

對不起:我解決不了這個問題。我最好的嘗試使用第三模式(定義<trailer>),但這崩潰xmllint ......任何人都可以解決它嗎?