Я пытаюсь проверить XML-файлы на this schema.Проверка на XSD игнорирует дубликаты ключей в XML-файле
Существует раздел главной таблицы, который содержит данные, которые затем ссылаются на другие места в файле. Предполагается, что таблица MasterFile содержит уникальные записи, поэтому на них можно ссылаться из другого места в xml-файле.
Однако я не могу понять, что должно быть недействительными. Я попытался проверить в блокноте XML Notepad ++ с помощью инструментов XML и Eclipse.
Определение TaxTable сверху сч:
<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 определения:
<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>
Пример минимального XML-файл, который должен сломать ключ сдержанности 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>
Обновлено показать, что это, кажется, проблема проверки.
Я также предполагал, что так оно и было, или, по крайней мере, как создатель схемы хотел, чтобы он работал. Я отредактировал свой пост и добавил пример, который проверяется с помощью дубликатов 'TaxType'. – johankr
Спасибо! Похоже, это связано с привязкой пространства имен. Не могли бы вы вставить привязки пространства имен из файлов схемы? (Все, что похоже на 'xmlns'). Благодаря! –
Некоторые результаты, когда поисковая система подсказывает, что это может быть источником проблемы. Это то, что вы имели в виду? '' –
johankr