Существует ли модуль Perl, который проверяет XML на соответствие схеме? - PullRequest
3 голосов
/ 26 ноября 2008

Мне нужно проверить схему в формате XML.

Я пробовал XML :: SAX :: ParserFactory; XML :: Validator :: Schema и связанные модули, но похоже, что они ограничены.
Ограничено в том смысле, что он не распознает элементы схемы, такие как xsd: unique, xsd: group, xsd: keyref, xsd: union и xsd: key.

Это xsd: уникальные и т. Д. Новые дополнения?

Благодарю, если вы можете указать мне на некоторые модули Perl, которые являются актуальными и соответствуют задаче.

Заранее спасибо.

Ответы [ 3 ]

10 голосов
/ 27 ноября 2008

Посмотрите на XML :: LibXML

При этом используется высоко ценимая библиотека libxml2, которую большинство людей называют преемником модулей Expat и XML :: Parser .

Для проверки схемы смотрите XML :: LibXML :: Schema

use XML::LibXML;
use XML::LibXML::Schema;

my $schema = XML::LibXML::Schema->new(location => 'file.xsd' );
my $parser = XML::LibXML->new;

my $xml    = 'file.xml';
my $doc    = $parser->parse_file( $xml );

eval { $schema->validate( $doc ) };
die $@ if $@;

say "$xml is valid\n";

NB. Я все еще в основном пользователь XML :: Twig и почти не касаюсь схемы XML, поэтому я не знаю, решит ли XML :: LibXML :: Schema проблему, которая у вас есть, но, возможно, это лучшее решение для CPAN для ваши потребности.

2 голосов
/ 27 ноября 2008

Вы пытались проверить его с помощью xmllint?

1 голос
/ 18 февраля 2012

@ Thushan Вам абсолютно необходимо использовать Perl? Если нет, то почему бы не попробовать XMLSTARLET ? Это довольно хороший инструментарий для манипулирования XML в терминале!

Он поддерживает не только устаревшие DTD и XSD, сколько вам нужно, а также схемы Relax-NG. Ознакомьтесь с документацией, чтобы узнать, как проверять документы XML с помощью xmlstarlet Я надеюсь, что это поможет вам;)

Хорошего дня!

PD О, я вижу, вы использовали xmllint! Это тоже здорово, но я предпочитаю xmlstarlet =) Попробуйте;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...