За последние 24 часа нас посетили 71635 программистов и 13152 робота. Сейчас ищут 2630 программистов ...

Валидация xml по xsd

Тема в разделе "PHP для новичков", создана пользователем AlvarCrash, 29 ноя 2017.

  1. AlvarCrash

    AlvarCrash Новичок

    С нами с:
    29 ноя 2017
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте!
    Есть надобность проверить xml файл на соответствие схеме. Вроде все просто:

    $file = 'D:\PHP\407p\XSD\RFM_044555567_20160325_001.xml';
    $schema = 'D:\PHP\407p\XSD\RequestSchema.xsd';
    $ab = new DOMDocument;
    $ab->load($file);

    if ($ab->Schemavalidate($schema)) {
    print "$file is valid.\n";
    } else {
    print "$file is invalid.\n";
    }

    НО!

    Выпадает куча ошибок:
    Warning: DOMDocument::schemaValidate(): failed to compile: expecting a branch after | in D:\PHP\407p\test.php on line 7

    Warning: DOMDocument::schemaValidate(): Element '{http://www.w3.org/2001/XMLSchema}pattern': The value '(0|\-?[1-9][0-9]*)|' of the facet 'pattern' is not a valid regular expression. in D:\PHP\407p\test.php on line 7

    Warning: DOMDocument::schemaValidate(): failed to compile: expecting a branch after | in D:\PHP\407p\test.php on line 7

    Warning: DOMDocument::schemaValidate(): Element '{http://www.w3.org/2001/XMLSchema}pattern': The value '\-?(0?|[1-9][0-9]*)\.[0-9]+|' of the facet 'pattern' is not a valid regular expression. in D:\PHP\407p\test.php on line 7

    Warning: DOMDocument::schemaValidate(): failed to compile: expecting a branch after | in D:\PHP\407p\test.php on line 7

    Warning: DOMDocument::schemaValidate(): Element '{http://www.w3.org/2001/XMLSchema}pattern': The value '(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/([1-9]\d{3})|' of the facet 'pattern' is not a valid regular expression. in D:\PHP\407p\test.php on line 7

    Нутром чую, что косяк в самой схеме - что-то не нравиться, но проблема в том, что схема не моя, как и сам xml - и изменению не подлежат =( А валидацию провести надо... Ткните носом пожалуйста, где тут косяк? Спасибо!
     

    Вложения:

    • XSD.zip
      Размер файла:
      6,8 КБ
      Просмотров:
      2
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    @AlvarCrash, все дело в наборе символов, используемых для тегов.
    С латиницей проверка проходит успешно.
    Для справки: Common Syntactic Constructs
     
    AlvarCrash нравится это.
  3. AlvarCrash

    AlvarCrash Новичок

    С нами с:
    29 ноя 2017
    Сообщения:
    3
    Симпатии:
    0
    И какие варианты теперь? Xsd схема принадлежит госструктуре - менять ее не будут... можно ли как-то привести ее в соответствие стандартам? Или как-то сделать на основе неё корректную схему и проводить валидация на ее основе? Но, имхо, это костыли...
     
  4. AlvarCrash

    AlvarCrash Новичок

    С нами с:
    29 ноя 2017
    Сообщения:
    3
    Симпатии:
    0
    Все дело оказалось в версии PHP и APACHE - данный код корректно работает в apache 2.2 и php 5.4.