выбор схемы xml выбор одного варианта элемента или другого с общей частью

#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;