Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SqlXmlBulkLoad с корневым элементом, для которого указано xmlns=  [new]
aleks2
Guest
Итак, схема загрузки
unitlist_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:complexType>
      <xsd:sequence>
        <xsd:element name="units" sql:is-constant="1" minOccurs="0" maxOccurs="1">
          <xsd:complexType>
           <xsd:sequence>
            <xsd:element name="unit" minOccurs="0" maxOccurs="unbounded"
                           sql:relation="xml_units" 
                           sql:key-fields="objectid id"
            >
             <xsd:complexType>
               <xsd:sequence>
                 <xsd:element name="name" type="xsd:string" maxOccurs="1"/>
               </xsd:sequence>
               <xsd:attribute name="id" type="xsd:int" use="required"/>
               <xsd:attribute name="objectid" type="xsd:int" use="required"/>
             </xsd:complexType>
            </xsd:element>
           </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
     </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

успешно создает таблицу xml_units(objectid, id, name) и грузит данные
unitlist_Schema.xsd
<?xml version="1.0" encoding="utf-8"?>
<selena>
<units>
    <unit id="13" objectid="4">
        <name>Имя1</name>
    </unit>
    <unit id="12" objectid="4">
        <name>Имя2</name>
    </unit>
</units>
</selena>

Если в теге <selena>указать xmlns (такой файл выгружают)
<?xml version="1.0" encoding="utf-8"?>
<selena xmlns="http://project.selena-online.ru" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://project.selena-online.ru https://selena-online.ru/static/rest/unitlist.xsd">
<units>
    <unit id="13" objectid="4">
        <name>Имя1</name>
    </unit>
    <unit id="12" objectid="4">
        <name>Имя2</name>
    </unit>
</units>
</selena>

таблица создается, но данных в ней нет.
Я догадываюсь, что надо что-то сделать, но не догадываюсь что.

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.SchemaGen = True
objBL.SGDropTables = True
objBL.Execute "unitlist_Schema.xsd", "unitlist_4.xml"
Set objBL = Nothing
16 ноя 15, 15:46    [18424463]     Ответить | Цитировать Сообщить модератору
 Re: SqlXmlBulkLoad с корневым элементом, для которого указано xmlns=  [new]
Minamoto
Member

Откуда: Москва
Сообщений: 1162
aleks2, посмотрите их схему и заберите оттуда все атрибуты схемы, дополнив своим xmlns:sql:

<xsd:schema  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
                     xmlns="http://project.selena-online.ru" 
                     targetNamespace="http://project.selena-online.ru" 
                     elementFormDefault="qualified"
                     xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
16 ноя 15, 16:16    [18424668]     Ответить | Цитировать Сообщить модератору
 Re: SqlXmlBulkLoad с корневым элементом, для которого указано xmlns=  [new]
aleks2
Guest
Впору петь "Алилуйя!!!".

Действительно,
<xsd:schema 
            xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema"

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

чудесным образом все лечит.

Но я не люблю чудес. Я люблю понимание процесса.
Я ведь пытался добавить
xmlns="http://project.selena-online.ru"
targetNamespace="http://project.selena-online.ru"
бесплодно.

Что означает волшебное заклинание:
elementFormDefault="qualified"
?
16 ноя 15, 16:44    [18424918]     Ответить | Цитировать Сообщить модератору
 Re: SqlXmlBulkLoad с корневым элементом, для которого указано xmlns=  [new]
Minamoto
Member

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

http://www.w3schools.com/schema/el_schema.asp
elementFormDefault
Optional. The form for elements declared in the target namespace of this schema. The value must be "qualified" or "unqualified". Default is "unqualified". "unqualified" indicates that elements from the target namespace are not required to be qualified with the namespace prefix. "qualified" indicates that elements from the target namespace must be qualified with the namespace prefix.


Как это влияет на загрузку - в упор не понимаю. Вроде бы qualified - более жесткое ограничение накладывает, непонятно, почему без него не работает.
16 ноя 15, 16:54    [18424983]     Ответить | Цитировать Сообщить модератору
 Re: SqlXmlBulkLoad с корневым элементом, для которого указано xmlns=  [new]
aleks2
Guest
Minamoto
aleks2, вот тут описано:

http://www.w3schools.com/schema/el_schema.asp
elementFormDefault
Optional. The form for elements declared in the target namespace of this schema. The value must be "qualified" or "unqualified". Default is "unqualified". "unqualified" indicates that elements from the target namespace are not required to be qualified with the namespace prefix. "qualified" indicates that elements from the target namespace must be qualified with the namespace prefix.


Как это влияет на загрузку - в упор не понимаю. Вроде бы qualified - более жесткое ограничение накладывает, непонятно, почему без него не работает.

Это я прочитал и тоже не понял. Ну, т.е.понял именно "Вроде бы qualified - более жесткое ограничение накладывает"

Будем ждать пришествия гуру...
16 ноя 15, 17:01    [18425035]     Ответить | Цитировать Сообщить модератору
 Re: SqlXmlBulkLoad с корневым элементом, для которого указано xmlns=  [new]
Minamoto
Member

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

http://www.xml.com/pub/a/2002/11/20/schemas.html?page=2
http://stackoverflow.com/questions/1463138/what-does-elementformdefault-do-for-xml-when-is-it-used
16 ноя 15, 17:01    [18425042]     Ответить | Цитировать Сообщить модератору
 Re: SqlXmlBulkLoad с корневым элементом, для которого указано xmlns=  [new]
aleks2
Guest
Minamoto
aleks2, интересные ссылки по теме:

http://www.xml.com/pub/a/2002/11/20/schemas.html?page=2
http://stackoverflow.com/questions/1463138/what-does-elementformdefault-do-for-xml-when-is-it-used

Мне нравится эта трава
Another way to solve the problem is to add elementFormDefault="qualified" to the schema element. You can then safely use local element declarations. It probably isn't worth the effort to understand exactly what this means. Just understand that it makes the schema behave in the "right" way.
16 ноя 15, 17:14    [18425126]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить