新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> DTD, XML Schema(XMLS), RELAX NG
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DTD/XML Schema 』 → 请教如下XSD 定义问题 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 3035 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: 请教如下XSD 定义问题 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     guyang2000 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:56
      门派:XML.ORG.CN
      注册:2004/11/29

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给guyang2000发送一个短消息 把guyang2000加入好友 查看guyang2000的个人资料 搜索guyang2000在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看guyang2000的博客楼主
    发贴心情 请教如下XSD 定义问题

    I have two tables and a xml, xsd file 使用SQLXMLBulkLoad load xml 数据进入俩表时出错:
    "Invalid value for column "NAME"",

    "NAME" 是一个嵌套元素但在表中没有该字段。 表示 FIRST-NAME and LAST-NAME. 高手执教what's wrong for the xsd file "NAME" parts。 谢谢.

    1. tables:
    ----------------------------------------------------------------------------------------------------
    PAYOR(bankID, PRNAME,PENAME, TRN,BREF,DTM097, DTM107,TTLAMT,TRNCNT)
    ENT (bank, FIRST-NAME,LAST-NAME,ACNUM,CR,CREF,DTM109)

    ENT(bank) is foreign key refer to PAYOR(bankID)
    --------------------------------------------------------------------------------------------------------
    2. XML File

    <?xml version="1.0" ?>
    <ROOT>
       <PAYOR bankID="001">
          <PRNAME>BANK</PRNAME>
          <PENAME>CUST</PENAME>
          <TRN>2222</TRN>
          <BREF>3333</BREF>
          <DTM097>4444</DTM097>
          <DTM107>1111</DTM107>
          <TTLAMT>300</TTLAMT>
          <TRNCNT>2</TRNCNT>
       </PAYOR>

       <ENT bank="001">
          <NAME>
             <FIRST-NAME>AAA</FIRST-NAME>
             <LAST-NAME>AAA</LAST-NAME>
          </NAME>
          <ACNUM>001001001</ACNUM>
          <CR>100</CR>
          <CREF>1111</CREF>
          <DTM109>1111</DTM109>
       </ENT>
       <ENT bank="001">
          <NAME>
             <FIRST-NAME>BBB</FIRST-NAME>
             <LAST-NAME>BBB</LAST-NAME>
          </NAME>
          <ACNUM>002002002</ACNUM>
          <CR>200</CR>
          <CREF>1111</CREF>
          <DTM109>1111</DTM109>
       </ENT>
    </ROOT>
    ----------------------------------------------------------------------------
    3. Create a XSD file for the XML to database mapping:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema" elementFormDefault="qualified">

    <xs:annotation>
      <xs:appinfo>
      <sql:relationship name="BANK-ENT" parent="PAYOR" parent-key="bankID" child="ENT" child-key="bank">
      </sql:relationship>
    </xs:appinfo>
    </xs:annotation>

    <xs:element name="ACNUM" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="BREF" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="CR" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="CREF" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="DTM109" type="xs:string" sql:datatype="varchar(128)"/>

    <xs:element name="ROOT">
     <xs:complexType>
     <xs:sequence>
                             <xs:element ref="PAYOR" maxOccurs="unbounded"/>
                             <xs:element ref="ENT" maxOccurs="unbounded"/>
     </xs:sequence>
     </xs:complexType>
     </xs:element>

    <xs:element name="ENT" sql:relation="ENT" sql:relationship ="BANK-ENT">
     <xs:complexType>
     <xs:sequence>
      <xs:element ref="NAME"/>
      <xs:element ref="ACNUM"/>
                            <xs:element ref="CR"/>
                         <xs:element ref="CREF"/>
      <xs:element ref="DTM109"/>
     </xs:sequence>
                        <xs:attribute name="bank" type="xs:string" use="required" sql:datatype="varchar(128)"/>
     </xs:complexType>
     </xs:element>

    <xs:element name="FIRST-NAME" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="LAST-NAME" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="NAME">
     <xs:complexType>
     <xs:sequence>
      <xs:element ref="FIRST-NAME"/>
      <xs:element ref="LAST-NAME"/>
     </xs:sequence>
     </xs:complexType>
     </xs:element>

    <xs:element name="PAYOR" sql:relation="PAYOR">
                    <xs:complexType>
     <xs:sequence>
      <xs:element ref="PRNAME"/>
      <xs:element ref="PENAME"/>
      <xs:element ref="TRN"/>
      <xs:element ref="BREF"/>
      <xs:element ref="DTM097"/>
      <xs:element ref="DTM050" minOccurs="0"/>
      <xs:element ref="DTM107"/>
      <xs:element ref="TTLAMT"/>
      <xs:element ref="TRNCNT"/>
     </xs:sequence>
     <xs:attribute name="bankID" type="xs:string" use="required" sql:datatype="varchar(128)"/>
     </xs:complexType>
     </xs:element>
    <xs:element name="PENAME" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="PRNAME" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="TRN" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="DTM097" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="DTM050" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="DTM107" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="TTLAMT" type="xs:string" sql:datatype="varchar(128)"/>
    <xs:element name="TRNCNT" type="xs:string" sql:datatype="varchar(128)"/>
    </xs:schema>


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/30 11:46:00
     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客2
    发贴心情 
    这个应该不是XSD的问题吧,这个XML是valid的。也就是说通过了xsd的检验,我觉得是你的SQLXMLBulkLoad的问题,它能处理怎样的XML呢,是否能够认得你的<NAME>标签下的那两个节点呢?他是只认第一层还是认最后一层呢?有可能只是认得最简单的XML,你将那两个字段用NAME包起来,在结构上清晰了,但是有可能就不被程序认了呢。个人观点仅供参考。
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/30 14:25:00
     
     guyang2000 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:1
      积分:56
      门派:XML.ORG.CN
      注册:2004/11/29

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给guyang2000发送一个短消息 把guyang2000加入好友 查看guyang2000的个人资料 搜索guyang2000在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看guyang2000的博客3
    发贴心情 
    SQLXMLBulkLoad 用的是  SQLXML 3.0. 在他的例子里没有看到=嵌套的两层的  。

    在这里我们没有指定  " NAME" 影射到表的字段。
    如果要过滤掉  "<NAME>" and "</NAME>", 如何的方法比较好些>

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/11/30 23:06:00
     
     doubleG 帅哥哟,离线,有人找我吗?
      
      
      威望:7
      等级:大三(面向对象是个好东东!)
      文章:591
      积分:4119
      门派:XML.ORG.CN
      注册:2004/5/27

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给doubleG发送一个短消息 把doubleG加入好友 查看doubleG的个人资料 搜索doubleG在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看doubleG的博客4
    发贴心情 
    可以用xslt将该xml进行转换,将Name标签去掉,然后再使用SQLXMLBulkLoad。
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">
    <xsl:output method="xml" version="1.0" indent="yes"/>
    <xsl:template match="ROOT">
     <xsl:copy>
      <xsl:apply-templates/>
     </xsl:copy>
    </xsl:template>

    <xsl:template match="PAYOR ">
     <xsl:copy-of select="."/>
    </xsl:template>

    <xsl:template match="ENT">
     <xsl:copy >
     <xsl:for-each select="attribute::*">
      <xsl:attribute name="{name(.)}">
       <xsl:value-of select="."/>
      </xsl:attribute>
     </xsl:for-each>
      <xsl:for-each select="NAME/child::*">
       <xsl:copy-of select="."/>
      </xsl:for-each>
      <xsl:for-each select="NAME/following-sibling::*">
       <xsl:copy-of select="." />
      </xsl:for-each>
     </xsl:copy>
    </xsl:template>
    </xsl:stylesheet>
    将其转换成能够解析的XML:
    <?xml version="1.0" encoding="UTF-8"?>
    <ROOT>
     <PAYOR bankID="001">
      <PRNAME>BANK</PRNAME>
      <PENAME>CUST</PENAME>
      <TRN>2222</TRN>
      <BREF>3333</BREF>
      <DTM097>4444</DTM097>
      <DTM107>1111</DTM107>
      <TTLAMT>300</TTLAMT>
      <TRNCNT>2</TRNCNT>
     </PAYOR>
     <ENT bank="001">
      <FIRST-NAME>AAA</FIRST-NAME>
      <LAST-NAME>AAA</LAST-NAME>
      <ACNUM>001001001</ACNUM>
      <CR>100</CR>
      <CREF>1111</CREF>
      <DTM109>1111</DTM109>
     </ENT>
     <ENT bank="001">
      <FIRST-NAME>BBB</FIRST-NAME>
      <LAST-NAME>BBB</LAST-NAME>
      <ACNUM>002002002</ACNUM>
      <CR>200</CR>
      <CREF>1111</CREF>
      <DTM109>1111</DTM109>
     </ENT>
    </ROOT>
    然后再行处理就好了。

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2004/12/1 9:03:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DTD/XML Schema 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/9/21 0:44:04

    本主题贴数4,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    3,681.885ms