2011-12-22 43 views
0

在XML文件中,我想在默認命名空間中使用自由格式,但在各個位置應允許某些元素位於特定命名空間中。我只想要這些元素進行驗證。所以我想要的是這樣的:XSD定義自由格式,除了一個命名空間

<document xmlns:x="http://myNamespace"> 
    <someElement1> 
    <x:toBeValidated1/> 
    <someElement2> 
     <x:toBeValidated2 someAtt="someValue"> 
     <someMoreStuff/> 
     </x:toBeValidated2> 
    </someElement2> 
    </someElement1> 
</document> 

問題是,我可以寫一個模式來驗證這個嗎?它應該允許任何地方的任何元素,但http://myNamespace命名空間mu中的元素符合模式中相應的定義。

回答

0

這可以大部分被完成。你需要定義一個模式,它涵蓋了你會想驗證類型:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://myNamespace"> 
    <xs:element name="toBeValidated1"> 
     <xs:complexType> 
      <xs:sequence/> 
     </xs:complexType> 
    </xs:element> 

    <xs:element name="toBeValidated2"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax"/> 
      </xs:sequence> 
      <xs:attribute name="someAtt" type="xs:string"/> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

並導入到定義文檔的根元素的模式:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:import namespace="http://myNamespace" schemaLocation="other.xsd"/> 
    <xs:element name="document" type="xs:anyType"/> 
</xs:schema> 

我不要以爲你可以繞過至少定義根元素,但是它可以被定義爲允許任何子元素或屬性。