2013-01-22 60 views
1

我想知道如何用XML和XSD正確定義名稱空間。我有以下XML的文件:XML-XSD:如何正確定義名稱空間?

<?xml version="1.0" encoding="utf-8" standalone="no"?> 
<application 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:app="ms.xsd" 
    xsi:schemaLocation="ms.xsd"> 
    <app:contactPerson> 
     <app:name>Florian</app:name> 
     <app:countryCode>FR</app:countryCode> 
    </app:contactPerson> 
    <app:contactPerson> 
     <app:name>Gabi</app:name> 
     <app:countryCode>DE,EE,EL,FI,FR,IE,UK</app:countryCode> 
    </app:contactPerson> 
    <app:contactPerson> 
     <app:name>Gert</app:name> 
     <app:countryCode>GB</app:countryCode> 
    </app:contactPerson> 
    <app:origin/> 
</application> 

和架構是由文件定義在同一文件夾ms.xsd

<?xml version="1.0" encoding="utf-8"?> 
<xs:schema 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified" 
    attributeFormDefault="unqualified" 
    version="0.2" 
    targetNamespace="ms.xsd" 
    xmlns:app="ms.xsd"> 
    <xs:element name="application" type="app:applicationType"/> 
    <xs:complexType name="applicationType"> 
     <xs:sequence> 
      <xs:element name="contactPerson" type="app:contactPersonType" minOccurs="0" maxOccurs="unbounded"/> 
      <xs:element name="origin" type="app:originType" minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="contactPersonType"> 
     <xs:sequence> 
      <xs:element name="name" type="xs:string"/> 
      <xs:element name="countryCode" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:complexType name="originType"> 
     <xs:sequence minOccurs="0"> 
      <xs:element name="street" type="xs:string"/> 
      <xs:element name="city" type="xs:string"/> 
      <xs:element name="country" type="xs:string"/> 
      <xs:element name="further_details" type="xs:string"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:schema> 

我已經嘗試了很多東西。我用這個(當前)最終版本得到的錯誤是

錯誤:元素「應用程序」:沒有匹配的全局聲明可用於驗證根目錄。

這是因爲xml文件中的xsd-reference位於應用程序標籤內,因此它太遲了?當我添加一個「信封」標籤並在其中放置xsd定義時,我收到消息

錯誤:元素'信封':沒有匹配的全局聲明可用於驗證根目錄。

所以現在我真的很困惑如何正確地做到這一點。我正在使用Notepadd ++中的XML-Tools驗證XML和XSD。

回答

3

嘗試應用程序:應用程序... 這應該工作。不管這個聲明是在哪裏發生的。

+0

確實。非常感謝! –

1

另一種方法是添加默認的命名空間:

xmlns="ms.xsd" 

這將使<application>到該命名空間。實際上,如果您願意,您可以省略所有其他app:前綴。雖然我認爲@ jmcollin92的解決方案更好 - 只是填補空白。

順便說一句:你的xsi:schemaLocation應該是:

xsi:schemaLocation="ms.xsd ms.xsd" 

第一ms.xsd是命名空間(其可以是任意字符串);第二個ms.xsd是可以找到模式的文件(一個URI - 通常是一個文件或URL) - 實際上,它可以是這種對的列表。嚴格地說,你的xml工具應該標記錯誤。

+0

謝謝你的回答。我想到了一個默認的命名空間,但是XML已經交付並且無法更改。我只是建立它的XSD文件。 –

+0

您對'xsi:schemaLocation'的提示非常感謝。 –

相關問題