2015-09-04 9 views
1

У меня есть сложный XML-файл, который мне нужно создать для отправки данных третьей стороне.Проверка XML на XSD

Они предоставили мне 2 схемы, касающуюся рассматриваемого документа, который я поместил в:

http://www.fresh.co.uk/twschemas/Common.xsd
http://www.fresh.co.uk/twschemas/PCPolicy.xsd

Я хочу, чтобы проверить мой XML против этих XSD. Теперь я использую XMPLIFY для MAC, чтобы сделать это и FAQ говорит мне, что я должен объявить пространство имен, корневой элемент моего XML-документа и использовать следующий формат

<?xml version="1.0" encoding="UTF-8"?> 

<root xmlns="http://example.com/namespace" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://example.com/namespace 
         http://example.com/schema.xsd"> 
</root> 

Мой XML

<?xml version="1.0" encoding="utf-8" standalone="yes"?> 
<PolicyInput xmlns="http://www.tradewisebrokerexchange.com/schemas/2012/10" xsi:schemaLocation="http://www.fresh.co.uk/twschemas/Common.xsd"> 

но я получаю сообщение об ошибке проверки с указанием:

Element '{http:www.tradewisebrokerexchange.com/schemas/2012/10)PolicyInput': No matching global declaration available in the validation root. 

Я довольно новыми для XML, и я haev сверяются XSD перед тем, но только 1 XSD, где, как кажется, есть 2-х XSD для данного конкретного фи ле.

Вся помощь приветствуется, так как я не хочу, чтобы я отправлял свой XML третьим сторонам, чтобы они рассказывали мне о своей ошибке, поэтому мне нужно правильно ее проверить.

Спасибо.

ответ

1

Элемент PolicyInput не встречается ни в одном из ваших XSD, поэтому он недействителен, поэтому вы получаете ошибку проверки.

Если вам нужно иметь дело с более чем одним XSD, тогда они имеют смысл только в том случае, если они импортируют друг друга в некоторых. Кажется, это так. Основной XSD - PCPolicy.xsd, который импортирует Common.xsd. Чистый эффект заключается в том, что все, что объявлено в Common.xsd, доступно любому, кто использует PCPolicy.xsd.

Следующий шаг - убедиться, что расположение вашей схемы верное. В вашем случае вы пишете:

xsi:schemaLocation="http://www.fresh.co.uk/twschemas/Common.xsd" 

Недействительный. Схематизация представляет собой список URI и пространств имен, разделенных пробелами, которые попарно должны найти физическое местоположение вашего XSD. Т.е .:

xsi:schemaLocation="http://www.tradewisebrokerexchange.com/schemas/2012/10 file:/D:/Projects/tests/SO_PCPolicy.xsd"> 

Но это не поможет, потому что ни схема имеет элемент, определенный, он только определяет типы. Вам нужна схема, которая определяет элемент данного типа из этих схем. Я думаю, что ваша документация еще не завершена и что вам не хватает схемы, которая фактически использует эти типы, или показанные вами схемы еще не закончены.

Пока у вас нет элемента в заданном типе, вы ничего не можете сделать, и все, что вы проверите против этих схем, всегда будет терпеть неудачу.

Например, если я создаю следующую XSD:

<xs:schema 
    targetNamespace="http://www.tradewisebrokerexchange.com/schemas/2012/10" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    xmlns:pcp="http://www.tradewisebrokerexchange.com/schemas/2012/10" 
    elementFormDefault="qualified"> 

    <xs:include schemaLocation="SO_PCPolicy.xsd"/> 

    <xs:element name="root" type="pcp:PCAdjustment"></xs:element> 
</xs:schema> 

и назвать его PolicyImpl.xsd, я теперь создал элемент root типа PCAdjustment.Теперь я могу на самом деле начать создавать свой XML:

<pcp:root 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="test" 
    xmlns:pcp="http://www.tradewisebrokerexchange.com/schemas/2012/10" 
    xsi:schemaLocation="http://www.tradewisebrokerexchange.com/schemas/2012/10 file:/D:/Projects/tests/PolicyImpl.xsd"> 

    <pcp:PolicyNumber></pcp:PolicyNumber> 

</pcp:root> 

Это до сих пор не действует, но, по крайней мере, теперь я получаю значимые ошибки проверки:

  • CVC-MINLENGTH-Валид: «» значение с длиной = '0' не является граничным по отношению к minLength '1' для типа «PolicyNumber».
  • cvc-type.3.1.3: Недопустимое значение '' элемента 'pcp: PolicyNumber'.
  • cvc-complex-type.2.4.b: Содержимое элемента «pcp: root» не является полным. Ожидается один из «{» http://www.tradewisebrokerexchange.com/schemas/2012/10 «: Эффективная дата».

Я ничего не знаю о ваших требованиях, поэтому вам нужно будет проверить документацию или поставщиков на предмет фактического применения этой схемы.

Немного OT: используйте редактор, который может выполнять проверку в режиме реального времени и предоставлять контекстно-зависимую помощь. Я предпочитаю oXygen, но есть довольно много бесплатных (Eclipse) и несвободных.

+1

Вы были на месте, следовали тому, что вы сказали сейчас, что я имел представление о том, что я искал. Как вы говорите, пропал лишний файл. Лучший человек, спасибо. – Lynchie