2016-08-23 6 views
1

Я хотел бы создать XML, который следует за XML-схемой http://www.oid-info.com/oid.xsd. Этот XSD следует каким-то образом ссылаться в XML-файле, так что инструмент, подобный https://validator.w3.org/, может проверить его, чтобы найти ошибки в семантике данных, например. когда адрес электронной почты недействителен.Как ссылаться на XSD в XML для службы валидации разметки W3C?

Во-первых, я попытался это так:

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<oid-database xmlns="http://www.oid-info.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.oid-info.com/oid.xsd"> 
<submitter> 
.... 
</submitter> 
<oid> 
.... 
</oid> 
</oid-database> 

W3C Markup Validation Service говорит:

Нет DOCTYPE найден! Проверка только синтаксиса XML. Декларация DOCTYPE не была признана или отсутствует. Вероятно, это означает, что Publical Public Identifier содержит орфографическую ошибку или что в объявлении не используется правильный синтаксис или что ваш XML-документ не использует декларацию DOCTYPE . Валидация документа была пропущена, а простая проверка правильности синтаксиса XML была выполнена вместо .

Хорошо, так что я пытался использовать DOCTYPE

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<!DOCTYPE oid-database> 
<oid-database xmlns="http://www.oid-info.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.oid-info.com/oid.xsd"> 
<submitter> 
.... 
</submitter> 
<oid> 
.... 
</oid> 
</oid-database> 

Теперь W3C Validator говорит:

линия 2, колонка 23: без внутреннего или внешнего типа документа подмножества; будет анализироваться без проверки

Я действительно знаю, что такое DTD, и я работал с DTD в прошлом. Я знаю, что DTD здесь отсутствует. Но я хочу проверить XSD, а не против DTD.

Что мне нужно сделать, чтобы оно работало?

ответ

2

Это W3C Validator будет проверять правильность и будет проверяться на DTD; он не проверяет XSD. Вам придется использовать другой валидатор on-line или off-line.

Кроме того, вот как файл XML должен выглядеть намекнуть, что это должно быть подтверждено действительным против OID XSD:

<?xml version="1.0" encoding="UTF-8" ?> 
<oid-database xmlns="http://oid-info.com" 
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xsi:schemaLocation="http://oid-info.com 
            http://www.oid-info.com/oid.xsd"> 
    <submitter> 
    .... 
    </submitter> 
    <oid> 
    .... 
    </oid> 
</oid-database> 

Смотрите также: How to link XML to XSD using schemaLocation or noNamespaceSchemaLocation?

Обратите внимание, что эти XSDs как представляется, имеют свои собственные вопросы, в том числе:

[Предупреждение]-light.xsd XHTML: 8: 36: schema_reference.4: Не удалось прочитать документа схемы 'xml.xsd', потому что 1) не смог найти документ; 2) документ не может быть прочитан; 3) корневой элемент документа равен нет.

[Ошибка] oid.xsd: 91: 46: InvalidRegex: шаблон значение «{\ S * (((([AZ] [A-Za-Z0-9-] \ с ((\ s * (0 | [1-9] [0-9] ) \ s))? | (0 | [1-9] [0-9] ))) {2,} \ s) | ((0 | [1-9] [0-9] ) (.(0 | [1-9] [0-9])) )) \ s}? ' не является допустимым регулярным выражением.

+0

Большое спасибо за эту информацию. Какой инструмент вы использовали для проверки этого XML? Инструмент http://www.freeformatter.com/xml-validator-xsd.html требует, чтобы вы ввели XSD вручную. Я бы хотел, чтобы он читал его непосредственно из XML-файла и загружал дальнейшие ссылки на XSD (например, xhtml-light.xsd) автоматически. –

+0

Я не использую онлайн-валидатор, но [этот] (https://devutilsonline.com/xml/validate), похоже, соответствует вашим требованиям; Я использую автономный, валидатор на основе Xerces-J. – kjhughes