none
Помогите создать XML схему RRS feed

  • Вопрос

  • Добрый день. Чтот вообще не могу понять, как создать xml схему и привязать её к столбцу. С привязкой к столбцу то ладно , а вот с созданием проблема.

    Есть xml

    <Cortege MU="1" ID="{E12BF32C-DFB4-4D22-A5F4-BFEF36884E63}">
      <Start MU="1" ID="{9FE68AF2-556A-4260-8343-E5D7023DE537}">02.07.2012 10:00:00</Start >
      <Value MU="2" ID="{9FE68AF2-556A-4260-8343-E5D7023DE537}">10.25</Value>
      <Number MU="2" ID="{9FE68AF2-556A-4260-8343-E5D7023DE537}">10</Number>
    </Cortege>
    Нашел в интернете конвертер , но он почему то задет тип атрибутов, но не задает  тип самих значений, например 10.25 должен же быть float. помогите разобраться. Спасибо.

    20 июля 2012 г. 14:24

Ответы

  • Откройте этот XML в студии, и нажмите XML/Create Schema в меню. Получите что-то вроде:

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="Cortege">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Start">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:string">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
            <xs:element name="Value">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:decimal">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
            <xs:element name="Number">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:unsignedByte">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
          <xs:attribute name="ID" type="xs:string" use="required" />
        </xs:complexType>
      </xs:element>
    </xs:schema>
    Потом подправьте типы (decimal -> float?), при необходимости.


    • Изменено PashaPashModerator 20 июля 2012 г. 16:31
    • Предложено в качестве ответа YatajgaModerator 21 июля 2012 г. 9:39
    • Помечено в качестве ответа zolton 21 июля 2012 г. 10:10
    20 июля 2012 г. 16:31
    Модератор
  • Visual Studio 2010 на этот XML выдаёт такую схему:

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="Cortege">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Start">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:string">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
            <xs:element name="Value">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:decimal">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
            <xs:element name="Number">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:unsignedByte">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
          <xs:attribute name="ID" type="xs:string" use="required" />
        </xs:complexType>
      </xs:element>
    </xs:schema>


    Тип значений указывается в

    <xs:extension base="">

    xs:decimal можно заменить на xs:float, и все прочие значения подредактировать как нужно.

    P.S. опоздал :)

    • Изменено Petalvik 20 июля 2012 г. 16:35
    • Предложено в качестве ответа YatajgaModerator 21 июля 2012 г. 9:39
    • Помечено в качестве ответа Abolmasov Dmitry 26 июля 2012 г. 8:51
    20 июля 2012 г. 16:33

Все ответы

  • Откройте этот XML в студии, и нажмите XML/Create Schema в меню. Получите что-то вроде:

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="Cortege">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Start">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:string">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
            <xs:element name="Value">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:decimal">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
            <xs:element name="Number">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:unsignedByte">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
          <xs:attribute name="ID" type="xs:string" use="required" />
        </xs:complexType>
      </xs:element>
    </xs:schema>
    Потом подправьте типы (decimal -> float?), при необходимости.


    • Изменено PashaPashModerator 20 июля 2012 г. 16:31
    • Предложено в качестве ответа YatajgaModerator 21 июля 2012 г. 9:39
    • Помечено в качестве ответа zolton 21 июля 2012 г. 10:10
    20 июля 2012 г. 16:31
    Модератор
  • Visual Studio 2010 на этот XML выдаёт такую схему:

    <?xml version="1.0" encoding="utf-8"?>
    <xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
      <xs:element name="Cortege">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="Start">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:string">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
            <xs:element name="Value">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:decimal">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
            <xs:element name="Number">
              <xs:complexType>
                <xs:simpleContent>
                  <xs:extension base="xs:unsignedByte">
                    <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
                    <xs:attribute name="ID" type="xs:string" use="required" />
                  </xs:extension>
                </xs:simpleContent>
              </xs:complexType>
            </xs:element>
          </xs:sequence>
          <xs:attribute name="MU" type="xs:unsignedByte" use="required" />
          <xs:attribute name="ID" type="xs:string" use="required" />
        </xs:complexType>
      </xs:element>
    </xs:schema>


    Тип значений указывается в

    <xs:extension base="">

    xs:decimal можно заменить на xs:float, и все прочие значения подредактировать как нужно.

    P.S. опоздал :)

    • Изменено Petalvik 20 июля 2012 г. 16:35
    • Предложено в качестве ответа YatajgaModerator 21 июля 2012 г. 9:39
    • Помечено в качестве ответа Abolmasov Dmitry 26 июля 2012 г. 8:51
    20 июля 2012 г. 16:33
  • Спасибо! а скажите влияет ли создание схемы для xml столбца на скорость выборки из xml? делаю такой запрос для этого же примера.

    SELECT [Data].value('(Cortege/Start)[1]', 'float')
    FROM [TestSchema]
    на 20тыс записей. он выполняется 5 сек. Есть XML индекс по свойству.

    21 июля 2012 г. 6:44
  • Схема, это всего лишь условность, нужная для проверки соответствия XML определённым требованиям. На производительность ни как не влияет, ведь это обычный текстовый файл, а не база данных. Не забывайте отмечать ответы, если они решают проблему.

    21 июля 2012 г. 9:42
    Модератор