2013-02-04 13 views
5

XSD'mi oluşturmaya çalışırken bu hatayla karşılaşıyorum ve ne yaptığımı anlayamıyorum; Benim kod şöyle görünür:geçersiz, yanlış yerleştirilmiş veya çok sık olarak ortaya çıkıyor

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.w3schools.com" 
xmlns="http://www.w3schools.com" 
elementFormDefault="qualified"> 
<xs:element name="FICH"> 
<xs:complexType> 

<xs:sequence> 
<xs:element name="cabeza"> 
<xs:complexType> 
<xs:sequence> 
<xs:element name="VERSION_ORIG" type="Version"/> 

</xs:sequence> 
</xs:complexType> 
</xs:element> 

<xs:element name="DATA_MAJ"> 
<xs:complexType> 
<xs:sequence> 
<xs:element name="DATA1" maxOccurs="unbounded"> 
<xs:complexType> 
<xs:sequence> 

<xs:element name="VERSION_SIT_NOM" type="Version"/> 

</xs:sequence> 
</xs:complexType> 
</xs:element> 
</xs:sequence> 
</xs:complexType> 
</xs:element> 
</xs:sequence> 

<xs:assert test="CABEZA/VERSION_ORIG = DATA_MAJ/VERSION_SIT_NOM"/> 

</xs:complexType> 
</xs:element> 
<xs:simpleType name="YYMM"> 
<xs:restriction base="xs:integer"> 
<xs:pattern value="[0-9]{2}[01|02|03|04|05|06|07|08|09|10|11|12]"/> 
</xs:restriction> 
</xs:simpleType> 
<xs:simpleType name="Version"> 
<xs:restriction base="xs:string"> 
<xs:pattern value="[0-9]{2}.[0-9]{2}.[0-9]{2}"/> 
</xs:restriction> 
</xs:simpleType> 
<xs:simpleType name="emptyString"> 
<xs:restriction base="xs:string"> 
<xs:enumeration value=""/> 
</xs:restriction> 
</xs:simpleType> 
</xs:schema> 

fikri CABEZA/VERSION_ORIG DATA_MAJ/VERSION_SIT_NOM eşit olması gerektiğini unsurdur. Bazı çözümler aradım ama her şey benim için uygun görünüyor.

+0

Mesajda bulunan herkese merhaba derken, stackoverflow'un neden parçayı silmediğini bilmiyorum .. sadece hata, yan tümceler nedeniyle zıpladığını söyle –

+0

Hoş Geldiniz; [Bu nasıl/neden] (http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts/93989#93989) selamlama kaldırılır . İşlerin SO üzerinde nasıl çalıştığıyla ilgili bilgi edinmeye değer. İyi bir sorunun ne olduğuna dair bazı ipuçları var; Daha önce gördüklerime dayanarak, reddedilmediğiniz için şanslı olduğunuzu söyleyebilirim ... Örneğin, hata mesajı almak için kullandığınız şey hakkında bir şey söylemezsiniz. –

cevap

0

Kişisel şema belge Bana iyi görünüyor önceden

Teşekkürler (noktaya ve daha da 9 Saxon kadar).

Hata iletinizin en olası nedeni, (1) bir XSD 1.1 şema belgesini işlemek için bir XSD 1.0 işlemci kullandığınız ve (2) işlemcinizin bu konuda dünyanın en iyi hata iletilerini sağlamadığı vaka. Şu anda (2013 başlarında) XSD 1.1, Saxon ve Xerces J'nin beta sürümü tarafından desteklenmektedir. Başka bir XSD doğrulama aracı kullanıyorsanız, XSD 1.1'i destekleyeceklerini sormak için satıcıya veya geliştiriciye başvurmak isteyebilirsiniz. (Hiç kimse, kullanıcılarının dikkat etmediğini düşünmezse 1.1'e geçemez.)

0

Birkaç şey yanlış yapıyorsunuz. Düzeltilmiş bir XSD ve eşleşen örnek XML ile başlayalım.

XSD:

<?xml version="1.0" encoding="UTF-8"?> 
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) --> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" xmlns:tns="http://www.w3schools.com" elementFormDefault="qualified"> 
    <xs:element name="FICH"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="cabeza"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="VERSION_ORIG" type="Version"/> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
       <xs:element name="DATA_MAJ"> 
        <xs:complexType> 
         <xs:sequence> 
          <xs:element name="DATA1" maxOccurs="unbounded"> 
           <xs:complexType> 
            <xs:sequence> 
             <xs:element name="VERSION_SIT_NOM" type="Version"/> 
            </xs:sequence> 
           </xs:complexType> 
          </xs:element> 
         </xs:sequence> 
        </xs:complexType> 
       </xs:element> 
      </xs:sequence>   
      <xs:assert test="tns:cabeza/tns:VERSION_ORIG = tns:DATA_MAJ/tns:DATA1/tns:VERSION_SIT_NOM"/> 
     </xs:complexType> 
    </xs:element> 
    <xs:simpleType name="YYMM"> 
     <xs:restriction base="xs:integer"> 
      <xs:pattern value="[0-9]{2}[01|02|03|04|05|06|07|08|09|10|11|12]"/> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="Version"> 
     <xs:restriction base="xs:string"> 
      <xs:pattern value="[0-9]{2}.[0-9]{2}.[0-9]{2}"/> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="emptyString"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value=""/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

Geçersiz XML:

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<!-- Sample XML generated by QTAssistant (http://www.paschidev.com) --> 
<FICH xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.w3schools.com"> 
    <cabeza> 
     <VERSION_ORIG>22.22.22</VERSION_ORIG> 
    </cabeza> 
    <DATA_MAJ> 
     <DATA1> 
      <VERSION_SIT_NOM>22.22.23</VERSION_SIT_NOM> 
     </DATA1> 
    </DATA_MAJ> 
</FICH> 

Hata mesajı:

Error while loading [], line 12 position 8 
cvc-assertion.3.13.4.1: Assertion evaluation ('tns:cabeza/tns:VERSION_ORIG = tns:DATA_MAJ/tns:DATA1/tns:VERSION_SIT_NOM') for element 'FICH' with type '#anonymous' did not succeed. 
Document1.xml is XSD 1.1 invalid. 

açıklamalar:

  • Büyük olasılıkla XSD 1.1'i doğrulamak için bir XSD 1.0 işlemci kullanıyorsunuz. Duruşu açıklayın ve hatanın gidip gitmediğini görün.
  • XSD'nizde hedef ad alanı yoksa, hedef ad alanınızla eşleştirmek için yukarıdaki örnek XSD'de xmlns: tns gibi bir takma ad vermeniz gerekir; XPath'ın önekleri uygun şekilde kullandığından emin olun. Bunun nedenleri var ve Xerces (@CMSperbergMcQueen tarafından belirtildiği gibi) onları da kötü bir şekilde istiyor gibi görünüyor.
  • XPath'ın hepsi yanlış. Adlar büyük/küçük harfe duyarlıdır, bu nedenle cabeza CABEZA değildir, ayrıca XSD'nizde XPath'ınız ile eşleşmeyen ek bir seviyeniz vardır; daha spesifik olarak, bir DATA1 eksik.
+0

Şunlar için teşekkürler Yanıtınız çok uzun olduğu için cabani'nin bir parçasını kopyaladığım için büyük/küçük harfe duyarlı sorunlar çözüldü; dediğim gibi ben daha fazla bir hata işlemcisi xsd kendimden daha fazla bir hata olduğunu zhen i assert yorum. –

+0

...ve dahası, örneğinizi kopyaladığımda hala iddialarla ilgili problemler yaşıyorum. Bu noktaya gelmek çok kafa karıştırıcı görünüyor çünkü "XML Notepad 2007 Sürüm 2.5" i kullanıyorum çünkü 1.1 destekleyenleri destekliyorum, ayrıca takma ad eklemeyi de denedim örneğinizde olduğu gibi, ama senin bile söylediğin gibi, senin bile benim için aynı hatayı geri çeviriyor. Her neyse, beynimi koruyacağım .. –

+0

@ nes.abra, sağladığım XSD geçerli, bu yüzden XML Not Defteri için destek ekibi ile alabilirsiniz. Microsoft'un bir süre önce belirttiği bir ürün varsa, bunu unutun ve XSD 1.1. Bir beta sürümü de olsa, tek ücretsiz XSD 1.1 işlemci Xerces'dir; indirin ve bunun yerine onunla oynayın (komut satırını kullanarak ya da etrafta sormanız gereken bir UI var). Piyasadaki çeşitli XSD editörlerinin eval versiyonlarını birbiri ardına indirirseniz, ihtiyacınız olan her şeyi yapmak için birkaç ay devam edebildiğinize eminim. –

İlgili konular