Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 что-то клинит меня на простейшем XML  [new]
aleks2
Guest
directionlist.xml
  <?xml version="1.0" encoding="utf-8" ?> 
- <selena>
- <directions>
- <direction id="1">
  <name>Круизы</name> 
  </direction>
- <direction id="2">
  <name>Трансфер</name> 
  </direction>
  </directions>
  </selena>


directionlist_Schema.xsd
<xsd:schema 
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
>

<xsd:element name="selena" sql:is-constant="1">
 <xsd:element name="directions" sql:is-constant="1">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="direction" sql:relation="directions" sql:key-fields="id" maxOccurs="unbounded">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element name="name" type="xsd:string" maxOccurs="1"/>
       </xsd:sequence>
       <xsd:attribute name="id"   type="xsd:int" />
     </xsd:complexType>
    </xsd:element>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
</xsd:element>
</xsd:schema>


Dim objBL 
Set objBL = CreateObject("SQLXMLBulkLoad.SQLXMLBulkload.4.0")
objBL.ConnectionString = "provider=SQLOLEDB;data source=DC3\WSUS;database=tempdb;integrated security=SSPI"
objBL.ErrorLogFile = "error.log"

objBL.CheckConstraints=true
objBL.XMLFragment = True
objBL.SchemaGen = True
objBL.SGDropTables = True

objBL.Execute "directionlist_Schema.xsd ", "directionlist.xml"
Set objBL = Nothing

автор
Schema mapping: Schema: unable to load schema 'directionlist_Schema.xsd '. An error occrred (directionlist_Schema.xsd#/schema/element[1][@name = 'selena']/complexType[1]/element[1][@name = 'directions']Element 'xsd:element' is not allowed in this context.).

Чего-то я недопонимаю в написании схем.
Может кто ткнет пальцем в ошибку?
13 ноя 15, 09:57    [18410480]     Ответить | Цитировать Сообщить модератору
 Re: что-то клинит меня на простейшем XML  [new]
aleks2
Guest
Методом тыка установлено - засада в
- <selena>
- <directions>

в примерах есть один такой элемент <ROOT>.
Если убрать из схемы и данных, например, - <selena>
все работает. Ну, тут просто "все как в примере".

Но мне надо как-то объехать два - такой ужо хмл дают.
13 ноя 15, 10:08    [18410566]     Ответить | Цитировать Сообщить модератору
 Re: что-то клинит меня на простейшем XML  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Идея ,канечно накуренная ..но может так попробывать ?

<xsd:element name="selena" sql:is-constant="1">
  <xsd:complexType>
    <xsd:element name="directions" sql:is-constant="1">
    <xsd:complexType>
13 ноя 15, 10:31    [18410710]     Ответить | Цитировать Сообщить модератору
 Re: что-то клинит меня на простейшем XML  [new]
aleks2
Guest
Решение нашлось.
У MS сказано: нет в схеме - игнорируем.

Т.е. убираем из схемы <selena> и чудо происходит.
<xsd:schema 
	xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
>
 <xsd:element name="directions" sql:is-constant="1">
  <xsd:complexType>
   <xsd:sequence>
    <xsd:element name="direction" sql:relation="directions" sql:key-fields="id" maxOccurs="unbounded">
     <xsd:complexType>
       <xsd:sequence>
         <xsd:element name="name" type="xsd:string" maxOccurs="1"/>
       </xsd:sequence>
       <xsd:attribute name="id" sql:field="id" type="xsd:int" />
     </xsd:complexType>
    </xsd:element>
   </xsd:sequence>
  </xsd:complexType>
 </xsd:element>
</xsd:schema>


Но как-то это неаккуратненько.
13 ноя 15, 10:38    [18410753]     Ответить | Цитировать Сообщить модератору
 Re: что-то клинит меня на простейшем XML  [new]
aleks2
Guest
Maxx
Идея ,канечно накуренная ..но может так попробывать ?

<xsd:element name="selena" sql:is-constant="1">
  <xsd:complexType>
    <xsd:element name="directions" sql:is-constant="1">
    <xsd:complexType>

Так я пробовал - те же яйца.
Schema mapping: Schema: unable to load schema 'directionlist_Schema.bak2'. An error occu rred (directionlist_Schema.bak2#/schema/element[1][@name = 'selena']/complexType[1]/element[1][@name = 'directions']
Element 'xsd:element' is not allowed in this context.).
13 ноя 15, 10:41    [18410766]     Ответить | Цитировать Сообщить модератору
 Re: что-то клинит меня на простейшем XML  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
aleks2,

вот так работает:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="selena" sql:is-constant="1">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="directions" sql:is-constant="1">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="direction" sql:relation="directions" sql:key-fields="id" maxOccurs="unbounded">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="name" type="xsd:string" maxOccurs="1"/>
                  </xsd:sequence>
                  <xsd:attribute name="id"   type="xsd:int" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>


Но это, я так понимаю, тоже не совсем то, что надо.
13 ноя 15, 10:56    [18410870]     Ответить | Цитировать Сообщить модератору
 Re: что-то клинит меня на простейшем XML  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
Minamoto, валидность схемы, кстати, я вот тут проверяю, удобно:
http://www.utilities-online.info/xsdvalidation/?save=af2e4914-5071-4b4f-bfaf-f6612c40751a-xsdvalidation#.VkWXzb-gb0Y
13 ноя 15, 10:57    [18410880]     Ответить | Цитировать Сообщить модератору
 Re: что-то клинит меня на простейшем XML  [new]
aleks2
Guest
Minamoto

Но это, я так понимаю, тоже не совсем то, что надо.

Почемуж - это уже аккуратненько.
13 ноя 15, 11:02    [18410915]     Ответить | Цитировать Сообщить модератору
 Re: что-то клинит меня на простейшем XML  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
aleks2,

вот так можно описать, что элемент selena должен содержать один и только один элемент directions:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="selena" sql:is-constant="1">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="directions" sql:is-constant="1" minOccurs="1" maxOccurs="1">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="direction" sql:relation="directions" sql:key-fields="id" maxOccurs="unbounded">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="name" type="xsd:string" maxOccurs="1"/>
                  </xsd:sequence>
                  <xsd:attribute name="id"   type="xsd:int" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>
13 ноя 15, 11:03    [18410921]     Ответить | Цитировать Сообщить модератору
 Re: что-то клинит меня на простейшем XML  [new]
LiF
Member

Откуда:
Сообщений: 3
Пробую повторить.
Получаю "Schema: relationship expected on 'Дочерний элемент'"
<?xml version="1.0" encoding="WINDOWS-1251"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema" targetNamespace="urn:cbr-ru:ed:v2.0">
	<xsd:element name="PacketEPD" sql:relation="sol_PacketEPD" >
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element name="ED104" sql:relation="ED">
					<xsd:complexType>
						<xsd:attribute name="EDNo" type="xsd:integer" /> 
						<xsd:attribute name="Sum" type="xsd:integer" /> 
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
</xsd:schema>
19 апр 16, 08:08    [19074813]     Ответить | Цитировать Сообщить модератору
 Re: что-то клинит меня на простейшем XML  [new]
LiF
Member

Откуда:
Сообщений: 3
В исходном xml нет никаких атрибутов связи родительского элемента и дочерних.
19 апр 16, 08:47    [19074905]     Ответить | Цитировать Сообщить модератору
 Re: что-то клинит меня на простейшем XML  [new]
aleks2
Guest
LiF
В исходном xml нет никаких атрибутов связи родительского элемента и дочерних.

Ну да, канешно.
Атрибуты можно взять с верхнего элемента.
А требует оно описания связи таблиц
      <sql:relationship name="OffersRooms"
          parent="xml_offers"
          parent-key="partnerId tourid objectid apartmentid"
          child="xml_offersrooms"
          child-key="partnerId tourid objectid apartmentid" 
      />


sol_PacketEPD и ED

Вот те пример


<xsd:schema 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema"

            xmlns:sn="http://project.selena-online.ru" 
            targetNamespace="http://project.selena-online.ru"
            elementFormDefault="qualified"
>

  <xsd:annotation>
    <xsd:appinfo>

      <sql:relationship name="OffersRooms"
          parent="xml_offers"
          parent-key="partnerId tourid objectid apartmentid"
          child="xml_offersrooms"
          child-key="partnerId tourid objectid apartmentid" 
      />

    </xsd:appinfo>
  </xsd:annotation>

  <xsd:attributeGroup name="ids">

               <xsd:attribute name="tourid" type="xsd:int" use="required"/>
               <xsd:attribute name="objectid" type="xsd:int" use="required"/>
               <xsd:attribute name="apartmentid" type="xsd:int" use="required"/>
               <xsd:attribute name="partnerId" type="xsd:int" default="-1" /> 

  </xsd:attributeGroup>

  <xsd:element name="selena" sql:is-constant="1">
    <xsd:complexType>
      <xsd:sequence>

        <xsd:element name="offers" sql:is-constant="1" minOccurs="0" maxOccurs="1">
          <xsd:complexType>
           <xsd:sequence>

            <xsd:element name="offer" minOccurs="0" maxOccurs="unbounded"
                           sql:relation="xml_offers" 
                           sql:key-fields="partnerId tourid objectid apartmentid"
                           sql:overflow-field="OverflowColumn"
            >
             <xsd:complexType>

               <xsd:sequence>
                 <xsd:element name="room" minOccurs="0" maxOccurs="unbounded"
                           sql:relation="xml_offersrooms" 
                           sql:key-fields="partnerId tourid objectid apartmentid number"
                           sql:relationship="OffersRooms" 
                           sql:overflow-field="OverflowColumn"
                 >
                   <xsd:complexType>
                      <xsd:attribute name="number" type="xsd:string" use="required"/>
                      <xsd:attribute name="amount" type="xsd:int" use="required"/>

                      <xsd:attributeGroup ref="sn:ids"/>
                   </xsd:complexType>
                 </xsd:element>

               </xsd:sequence>                              

               <xsd:attributeGroup ref="sn:ids"/>

               <xsd:attribute name="amount" type="xsd:int" use="required"/>
               <xsd:attribute name="duration" type="xsd:int" use="required"/>
               <xsd:attribute name="begindate" type="xsd:dateTime" use="optional"/>
               <xsd:attribute name="enddate" type="xsd:dateTime" use="optional"/>
               <xsd:attribute name="so_price" type="xsd:float" use="optional"/>

             </xsd:complexType>
            </xsd:element>
      
           </xsd:sequence>
          </xsd:complexType>
        </xsd:element>

     </xsd:sequence>
    </xsd:complexType>
  </xsd:element>

</xsd:schema>
20 апр 16, 19:58    [19085018]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить