2017-01-30 66 views
0

我想驗證this schema的XML文件。針對XSD的驗證忽略XML文件中的重複密鑰

有一個主表部分,它包含數據,然後從文件的其他地方引用數據。 MasterFile表應該包含唯一的條目,以便它們可以從xml文件中的其他地方引用。

但是我無法弄清楚什麼應該是無效的鍵。我曾嘗試使用XML工具和Eclipse在XML記事本,Notepad ++中進行驗證。從上述舍姆稅率表的

定義:

<xs:element name="TaxTable" minOccurs="0"> 
<xs:complexType> 
    <xs:sequence> 
     <xs:element name="TaxTableEntry" maxOccurs="unbounded"> 
      <xs:complexType> 
       <xs:sequence> 
        <xs:element name="TaxType" type="FAIAcodeType"> 
        </xs:element> 
        <xs:element name="Description" type="FAIAlongtextType"> 
        </xs:element> 
        <xs:element name="TaxCodeDetails" maxOccurs="unbounded"> 
         <xs:complexType> 
           <xs:sequence> 
            <xs:element name="TaxCode" type="FAIAcodeType"> 
            </xs:element> 
            <xs:element name="EffectiveDate" type="xs:date" minOccurs="0"> 
            </xs:element> 
            <xs:element name="ExpirationDate" type="xs:date" minOccurs="0"> 
            </xs:element> 
            <xs:element name="Description" type="FAIAlongtextType" minOccurs="0"> 
            </xs:element> 
            <xs:choice minOccurs="0"> 
             <xs:element name="TaxPercentage" type="xs:decimal"> 
             </xs:element> 
             <xs:element name="FlatTaxRate" type="AmountStructure"> 
             </xs:element> 
            </xs:choice> 
            <xs:element name="Country" type="ISOCountryCode"> 
            </xs:element> 
            <xs:element name="Region" type="FAIAcodeType" minOccurs="0"> 
            </xs:element> 
           </xs:sequence> 
         </xs:complexType> 
        </xs:element> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
</xs:complexType> 
</xs:element> 

密鑰和KeyRef定義:最小XML的文件的

<xs:key name="KeyTaxType"> 
<xs:selector xpath="MasterFiles/TaxTable/TaxTableEntry"/> 
<xs:field xpath="TaxType"/> 
</xs:key> 

<xs:keyref name="RefRegistrationTaxType" refer="KeyTaxType"> 
<xs:selector xpath="Header/Company/TaxRegistration"/> 
<xs:field xpath="TaxType"/> 
</xs:keyref> 

<xs:keyref name="RefCustomerTaxType" refer="KeyTaxType"> 
<xs:selector xpath="MasterFiles/Customers/Customer/TaxRegistration"/> 
<xs:field xpath="TaxType"/> 
</xs:keyref> 

實施例那應該打破TaxType鍵約束,但是這驗證在3不同的工具。驗證適用於除鍵之外的所有內容,因爲當我添加不存在的元素或更改順序中的元素順序時會出錯,所以我可以看到驗證至少發生。

<?xml version="1.0" encoding="UTF-8"?> 
<xs:AuditFile 
xmlns:xs="urn:OECD:StandardAuditFile-Taxation/2.00" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="urn:OECD:StandardAuditFile-Taxation/2.00 ../../main/resources/FAIA_v_2_01_full.xsd "> 
<xs:Header> 
    <xs:AuditFileVersion>2.0.1</xs:AuditFileVersion> 
    <xs:AuditFileCountry>LU</xs:AuditFileCountry> 
    <xs:AuditFileDateCreated>2001-01-01</xs:AuditFileDateCreated> 
    <xs:SoftwareCompanyName>TestCorp</xs:SoftwareCompanyName> 
    <xs:SoftwareID>Test</xs:SoftwareID> 
    <xs:SoftwareVersion>Test</xs:SoftwareVersion> 
    <xs:Company> 
     <xs:RegistrationNumber>123456</xs:RegistrationNumber> 
     <xs:Name>Test Corporation</xs:Name> 
     <xs:Address> 
      <xs:City>London</xs:City> 
      <xs:PostalCode>123456</xs:PostalCode> 
     </xs:Address> 
     <xs:Contact> 
      <xs:ContactPerson> 
       <xs:FirstName>John</xs:FirstName> 
       <xs:LastName>Doe</xs:LastName> 
      </xs:ContactPerson> 
      <xs:Telephone>45646825</xs:Telephone> 
     </xs:Contact> 
     <xs:TaxRegistration> 
      <xs:TaxRegistrationNumber>LU1234566-78</xs:TaxRegistrationNumber> 
      <xs:TaxType>TVA</xs:TaxType> 
      <xs:TaxNumber>LU1234566-78</xs:TaxNumber> 
     </xs:TaxRegistration> 
    </xs:Company> 
    <xs:DefaultCurrencyCode>EUR</xs:DefaultCurrencyCode> 
    <xs:SelectionCriteria> 
     <xs:TaxReportingJurisdiction>xs:TaxReportingJurisdiction</xs:TaxReportingJurisdiction> 
     <xs:CompanyEntity>xs:CompanyEntity</xs:CompanyEntity> 
     <xs:SelectionStartDate>2015-01-01</xs:SelectionStartDate> 
     <xs:SelectionEndDate>2015-12-31</xs:SelectionEndDate> 
     <xs:DocumentType>xs:DocumentType</xs:DocumentType> 
     <xs:OtherCriteria>First Other Criteria</xs:OtherCriteria> 
     <xs:OtherCriteria>Second Other Criteria</xs:OtherCriteria> 
    </xs:SelectionCriteria> 
    <xs:HeaderComment>xs:HeaderComment</xs:HeaderComment> 
    <xs:TaxAccountingBasis>Invoice Accounting</xs:TaxAccountingBasis> 
    <xs:TaxEntity>xs:TaxEntity</xs:TaxEntity> 
</xs:Header> 
<xs:MasterFiles> 
<xs:TaxTable> 
    <xs:TaxTableEntry> 
     <xs:TaxType>TVA</xs:TaxType> 
     <xs:Description>Taxe sur la valeur ajoutée</xs:Description> 
     <xs:TaxCodeDetails> 
      <xs:TaxCode>1</xs:TaxCode> 
      <xs:EffectiveDate>2010-01-01</xs:EffectiveDate> 
      <xs:Description>LU/01/0/0.00 - TVA sur ventes</xs:Description> 
      <xs:TaxPercentage>0.0</xs:TaxPercentage> 
      <xs:Country>LU</xs:Country> 
     </xs:TaxCodeDetails> 
    </xs:TaxTableEntry> 
    <xs:TaxTableEntry> 
     <xs:TaxType>TVA</xs:TaxType> 
     <xs:Description>Taxe sur la valeur ajoutée</xs:Description> 
     <xs:TaxCodeDetails> 
      <xs:TaxCode>1</xs:TaxCode> 
      <xs:EffectiveDate>2010-01-01</xs:EffectiveDate> 
      <xs:Description>LU/01/0/0.00 - TVA sur ventes</xs:Description> 
      <xs:TaxPercentage>0.0</xs:TaxPercentage> 
      <xs:Country>LU</xs:Country> 
     </xs:TaxCodeDetails> 
    </xs:TaxTableEntry> 
</xs:TaxTable> 
</xs:MasterFiles> 

更新,以表明它似乎是一個驗證問題。

回答

0

我的理解與你所描述的不同。

總之,selector選擇什麼元素必須是唯一的,而field選擇什麼使他們獨特

在這種情況下,選擇器選擇整個列表TaxTableEntry s,並且對於其中的每一個,該字段選擇其TaxType。具體而言,這意味着在此列表中(即不在列表中的每個項目內,但在整個列表中),TaxType必須完全不同。

隨着keyRef情況下,它們的值可以被引用爲外鍵明確一個MasterFile(或你放置key定義)內確定一個TaxTableEntry

如果您身邊的驗證行爲背離了這一點,請隨意分享一個XML實例,該實例的行爲與您期望的不同,並且我們可以提供更多幫助。

+0

我還假設它是如何工作的,或者至少該架構的創建者希望它如何工作。我編輯了我的帖子並添加了一個用重複的TaxType驗證的例子。 – johankr

+0

謝謝!它看起來可能是因爲命名空間綁定。你能粘貼架構文件中的命名空間綁定嗎? (看起來像'xmlns'的所有東西)。謝謝! –

+0

當谷歌搜索表明這可能是問題的根源的一些結果。 這是你在想什麼? xs:schema xmlns =「urn:OECD:StandardAuditFile-Taxation/2.00」xmlns:xs =「http://www.w3.org/2001/XMLSchema」xmlns:doc =「urn:schemas-OECD: schema-extensions:documentation「targetNamespace =」urn:OECD:StandardAuditFile-Taxation/2.00「elementFormDefault =」qualified「attributeFormDefault =」unqualified「version =」2.00「id =」FAIA-T「>' – johankr