#xml #xsd #xsd-validation
#xml #xsd #xsd-проверка
Вопрос:
У меня есть вопрос о схеме xml.Я действительно не знаю, как правильно использовать выбор. Это мой xml-текст.
lt;serialsgt; lt;serialgt; lt;titlegt;lt;/titlegt; lt;countrygt;lt;/countrygt; lt;directorgt;lt;/directorgt; lt;release dategt;lt;/release dategt; lt;/serialgt; . .some of the same as the one above . lt;serialgt; lt;titlegt;lt;/titlegt; lt;countrygt;lt;/countrygt; lt;directorgt;lt;/directorgt; lt;uncertainegt;lt;/uncertaineegt; lt;/serialgt; lt;serialgt; lt;titlegt;lt;/titlegt; lt;countrygt;lt;/countrygt; lt;directorgt;lt;/directorgt; lt;scheduled timegt;lt;/scheduled timegt; lt;/serialgt; lt;/serialsgt;
и вот проблемная часть xml-схемы
lt;xsd:group name="serialData"gt; lt;xsd:choicegt; lt;xsd:sequencegt; lt;xsd:element name="title" type="xsd"string"/gt; lt;xsd:element name="country" type="xsd"string"/gt; lt;xsd:element name="director" type="xsd"string"/gt; lt;xsd:element name="release date" type="xsd"string"/gt; lt;/xsd:sequencegt; lt;xsd:sequencegt; lt;xsd:element name="title" type="xsd"string"/gt; lt;xsd:element name="country" type="xsd"string"/gt; lt;xsd:element name="director" type="xsd"string"/gt; lt;xsd:element name="scheduled time" type="xsd"string" minOccurs="0" maxOccurs="1"/gt; lt;xsd:element name="uncertaineetime" type="xsd"string" minOccurs="0" maxOccurs="1"/gt; lt;/xsd:sequencegt; lt;/xsd:choicegt; lt;/xsd:groupgt;
проблема в том, что последние нетипичные серии хотят иметь те же атрибуты, что и первые, но не могут их иметь.
Комментарии:
1. Ваш XML-файл не очень хорошо сформирован. Пробелы в именах тегов не допускаются. Вы не сможете решить свои вопросы по схеме XML, пока не исправите свой XML.
2. Кроме того, начальный узел здесь не соответствует конечному lt;uncertainegt;lt;uncertainegt;lt;/uncertaineegt; и не соответствует имени в вашей схеме.
3. Кроме того, ваш образец не соответствует структуре в вашем XSD, так как в одном и том же примере у вас нет запланированного времени и неопределенного времени
Ответ №1:
Допустим, ваша полезная нагрузка выглядела так, что является допустимым XML
lt;serialsgt; lt;serialgt; lt;titlegt;Titlelt;/titlegt; lt;countrygt;Countrylt;/countrygt; lt;directorgt;Directorlt;/directorgt; lt;release_dategt;2021-12-06lt;/release_dategt; lt;/serialgt; lt;serialgt; lt;titlegt;Title2lt;/titlegt; lt;countrygt;Countrylt;/countrygt; lt;directorgt;Directorlt;/directorgt; lt;uncertain_timegt;Uncertainlt;/uncertain_timegt; lt;/serialgt; lt;serialgt; lt;titlegt;Title3lt;/titlegt; lt;countrygt;Countrylt;/countrygt; lt;directorgt;Directorlt;/directorgt; lt;scheduled_timegt;Scheduledlt;/scheduled_timegt; lt;/serialgt; lt;/serialsgt;
Вы могли бы просто иметь схему, как показано ниже, где вы делаете некоторые из них необязательными.
lt;?xml version="1.0" encoding="utf-16"?gt; lt;xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"gt; lt;xs:element name="serials"gt; lt;xs:complexTypegt; lt;xs:sequencegt; lt;xs:element maxOccurs="unbounded" name="serial"gt; lt;xs:complexTypegt; lt;xs:sequencegt; lt;xs:element name="title" type="xs:string" /gt; lt;xs:element name="country" type="xs:string" /gt; lt;xs:element name="director" type="xs:string" /gt; lt;xs:element minOccurs="0" name="scheduled_time" type="xs:string" /gt; lt;xs:element minOccurs="0" name="uncertain_time" type="xs:string" /gt; lt;xs:element minOccurs="0" name="release_date" type="xs:date" /gt; lt;/xs:sequencegt; lt;/xs:complexTypegt; lt;/xs:elementgt; lt;/xs:sequencegt; lt;/xs:complexTypegt; lt;/xs:elementgt; lt;/xs:schemagt;
Если вы имеете в виду, что у вас может быть либо Неопределенное время, либо запланированное время или дата выпуска, то это элементы, которые вы помещаете в узел выбора, как показано ниже
lt;?xml version="1.0" encoding="utf-16"?gt; lt;xs:schema xmlns:b="http://schemas.microsoft.com/BizTalk/2003" attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"gt; lt;xs:element name="serials"gt; lt;xs:complexTypegt; lt;xs:sequencegt; lt;xs:element maxOccurs="unbounded" name="serial"gt; lt;xs:complexTypegt; lt;xs:sequencegt; lt;xs:element name="title" type="xs:string" /gt; lt;xs:element name="country" type="xs:string" /gt; lt;xs:element name="director" type="xs:string" /gt; lt;xs:choicegt; lt;xs:element name="scheduled_time" type="xs:string" /gt; lt;xs:element name="uncertain_time" type="xs:string" /gt; lt;xs:element name="release_date" type="xs:date" /gt; lt;/xs:choicegt; lt;/xs:sequencegt; lt;/xs:complexTypegt; lt;/xs:elementgt; lt;/xs:sequencegt; lt;/xs:complexTypegt; lt;/xs:elementgt; lt;/xs:schemagt;