2013-10-08 17 views
5

xml belge ve şema sorun ilk oluştu ettiği çok daha büyük bir şema aşağı haşlanmış Ertesi:'null-namespace', şemada bir ad alanına 'sahip' olarak tanımlanan bir xml öğesi için neden bekleniyor?

xml belge:

<f2b:Foo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" xsi:schemaLocation="http://www.outerfoospace.com/schemas/foo2bar f2b-0-0-0.xsd"> 
    <f2b:Bar>text</f2b:Bar> 
</f2b:Foo> 

şema:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:f2b="http://www.outerfoospace.com/schemas/foo2bar" targetNamespace="http://www.outerfoospace.com/schemas/foo2bar"> 
    <xs:complexType name="T_Foo"> 
     <xs:sequence> 
      <xs:element name="Bar" xmlns="f2b"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:element name="Foo" type="f2b:T_Foo"/> 
</xs:schema> 

Ben Belgeyi şemaya göre doğrulayın, <f2b:Bar> - <f2b:Bar> beklemediğini belirten bir hata iletisi alıyorum. Belgeyi geçerli hale getirmek için <Bar> -element'i (null-namespace): (<Bar xmlns="">) 'a açıkça (!) Koymak zorundayım. Null adlandırılmış bir öğe neden beklenmelidir. Şema, tüm öğeler için bir isim alanını tanımlar ve <Foo> - için f2b - isim alanı gerçekten doğrulayıcı tarafından beklenir. Ancak, yukarıda yaptığım gibi <Bar> -element tanımında açık bir şekilde ad alanı ayarlansa bile, doğrulayıcı Bar -element için xmlns="" bekler. Şemadan ve şanstan yoksun bir cevap bulmak için çeşitli varyasyonları denedim - ve bu özel durumda null-namespace'in neden beklendiğini tahmin edemiyorum.

Herhangi bir ipucu takdir ... ekke

cevap

3

Kısa cevap: En şemanın kök xs:schema etiketine elementFormDefault="qualified" ekleyin.

Daha uzun yanıt: Varsayılan olarak, yalnızca üst düzey "global" öğe bildirimleri, şemanın hedef ad alanını alır. Kompleks türdeki "yerel" eleman bildirimleri hiçbir isim alanında değildir. Bunu, etiketindeki form özniteliğini kullanarak veya xs:schema numaralı elementFormDefault kullanarak tüm öğeler için global olarak belirli bir yerel öğe için geçersiz kılabilirsiniz.

+0

Açık cevap için teşekkürler - kesinlikle haklısınız. ekke – ekke

İlgili konular