Я могу переопределить Схему XSD для изменения maxOccurs атрибута ребенка типа?

Мне не нравится отвечать на мои собственные вопросы, но похоже, что не может быть реального решения Microsoft там. Для меня это то, как я решаю проблему в офисе, используя Visual Studio.

  1. Перед повторным созданием бизнес-объектов я делаю копию всей структуры папок
  2. Я извлекаю весь проект или созданную корневую папку
  3. Я запускаю генератор кода. Иногда я точно знаю, что меняется, но иногда я могу внести много изменений и не хочу ничего пропустить. Мой генератор кода на работе также генерирует все файлы SQL, необходимые для хранимых процедур DROP / CREATE.
  4. Используя SourceGear DiffMerge , я сравниваю папки только что созданной и ранее созданной резервной копии.

Это довольно много времени. Я никогда не думал об этом как о проблеме, пока не увидел, что Vault идентифицирует, что файл на диске отличается от хранилища.

Может быть, вы все можете сказать, как вы делаете генерацию / регенерацию кода при работе с репозиторием контроля версий.

7
задан Teddy 6 October 2011 в 12:54
поделиться

1 ответ

Когда вы делаете расширение, модель содержимого нового типа представляет собой последовательность модели содержимого базового и что бы вы ни добавили в свой новый тип. Например, в вашем случае модель содержимого для переопределенного типа CrimeLineBusiness_Type -

<xsd:sequence>
  <xsd:sequence>
    <xsd:element ref="CrimeSchedule" minOccurs="0"/>
    <xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0"/>
  </xsd:sequence>
  <xsd:sequence>
    <xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0" maxOccurs="unbounded"/>
    <xsd:element ref="CrimeSchedule" minOccurs="0" maxOccurs="unbounded"/>
  </xsd:sequence>
</xsd:sequence>

. Вы можете попытаться добиться того, чего хотите, - это двойное переопределение этого типа. Сначала вы переопределяете его путем ограничения, удаляя необязательные элементы CrimeSchedule и CrimeMoneyAndSecurities, а затем путем расширения снова добавляя эти элементы с желаемым количеством вхождений. См. Ниже полный рабочий пример:

text.xsd

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="test" type="CrimeLineBusiness_Type"/>

  <xsd:complexType name="PCLINEBUSINESS"/>
  <xsd:element name="CrimeSchedule"/>
  <xsd:element name="CrimeMoneyAndSecurities"/>

  <xsd:complexType name="CrimeLineBusiness_Type">
    <xsd:complexContent>
      <xsd:extension base="PCLINEBUSINESS">
        <xsd:sequence>
          <xsd:element ref="CrimeSchedule" minOccurs="0"/>
          <xsd:element ref="CrimeMoneyAndSecurities" minOccurs="0"/>
        </xsd:sequence>
      </xsd:extension>
    </xsd:complexContent>
  </xsd:complexType>

</xsd:schema>

redef1.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:redefine schemaLocation="test.xsd">

    <xs:complexType name="CrimeLineBusiness_Type">
      <xs:complexContent>
        <xs:restriction base="CrimeLineBusiness_Type">
          <xs:sequence/>
        </xs:restriction>
      </xs:complexContent>
    </xs:complexType>
  </xs:redefine>
</xs:schema>

redef2.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:redefine schemaLocation="redef1.xsd">
    <xs:complexType name="CrimeLineBusiness_Type">
      <xs:complexContent>
        <xs:extension base="CrimeLineBusiness_Type">
          <xs:sequence>
            <xs:element maxOccurs="unbounded" minOccurs="0" ref="CrimeSchedule"/>
            <xs:element maxOccurs="unbounded" minOccurs="0" ref="CrimeMoneyAndSecurities"/>
          </xs:sequence>
        </xs:extension>
      </xs:complexContent>
    </xs:complexType>
  </xs:redefine>
</xs:schema>

Действительный экземпляр XML, test.xml

<?xml version="1.0" encoding="UTF-8"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:noNamespaceSchemaLocation="redef2.xsd">

  <CrimeSchedule></CrimeSchedule>
  <CrimeSchedule></CrimeSchedule>
  <CrimeMoneyAndSecurities></CrimeMoneyAndSecurities>
  <CrimeMoneyAndSecurities></CrimeMoneyAndSecurities>

</test>

С уважением, Джордж

12
ответ дан 6 December 2019 в 21:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: