以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  [求助]再次来求助~~~比上次的更难~~~  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=29307)


--  作者:gemingke
--  发布时间:3/26/2006 12:52:00 PM

--  [求助]再次来求助~~~比上次的更难~~~
现在遇到一个更加棘手的问题

在甲方提交的某商务文档中,有这么一个东西:
   文件中有A、B两个选项,二选一,这个简单。后面的就复杂了~~~~若是选A,则有X、Y两个项目必须填写,若选择BX、Y就可以不填

这里问的是,Schema里如何来实现?因为所有的商务文档都由相应的Schema约束

PS: 好像想到一个方法,在用choice处理A、B时,把A做成复杂型,包含X、Y。不过,还是想问问有没有其他方法


--  作者:gemingke
--  发布时间:3/26/2006 1:23:00 PM

--  
"PS: 好像想到一个方法,在用choice处理A、B时,把A做成复杂型,包含X、Y。不过,还是想问问有没有其他方法"

此路不通~~~~~求助啊~~~


--  作者:gemingke
--  发布时间:4/2/2006 8:34:00 PM

--  
...................没人理会
--  作者:feirate
--  发布时间:4/3/2006 7:57:00 AM

--  
说说为什么你上面说的方法不通
--  作者:feirate
--  发布时间:4/3/2006 8:09:00 AM

--  
<xs:element name='a'>
<xs:complesType>
<xs:sequence>
   <xs:element ref="x" use="required"/>
   <xs:element ref="y" use="required"/>
  </xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name='b'>
<xs:complesType>
<xs:sequence>
   <xs:element ref="x" use="optional"/>
   <xs:element ref="y" use="optional"/>
  </xs:sequence>
</xs:complexType>
</xs:element>


--  作者:gemingke
--  发布时间:4/3/2006 10:19:00 AM

--  
<xs:element name="选择">
   <xs:complexType>
      <xs:sequence >
         <xs:choice>
            <xs:element name="A" type="xs:boolean"/>
            <xs:element name="B" type="xs:boolean"/>
         </xs:choice>
      </xs:sequence>
   </xs:complexType>
</xs:element>

这里A、B都需要用布尔型,因为这些选项是否被选择都需要保存到数据库里,所以要用布尔型,这样一来,就没有办法把A或B做成复杂型


--  作者:feirate
--  发布时间:4/3/2006 1:17:00 PM

--  
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="选择">
   <xs:complexType>
      <xs:sequence >
         <xs:choice>
            <xs:element name="A" type="aType"/>
            <xs:element name="B" type="bType"/>
         </xs:choice>
      </xs:sequence>
   </xs:complexType>
</xs:element>

<xs:complexType name='aType'>
<xs:sequence>
   <xs:element ref="x" minOccurs="1"/>
   <xs:element ref="y" minOccurs="1" />
  </xs:sequence>
</xs:complexType>

<xs:complexType name='bType'>
<xs:sequence>
   <xs:element ref="x"/>
   <xs:element ref="y"/>
  </xs:sequence>
</xs:complexType>

<xs:element name="x" type="xs:string"/>
<xs:element name="y" type="xs:string"/>
</xs:schema>


--  作者:feirate
--  发布时间:4/3/2006 1:25:00 PM

--  
抱歉,刚才没看清楚...是否被选择要放在数据库里是吧...
但是一定要把A,B弄成boolean型,然后存储它们的值么?
可以设定A的ID为1,b为0,如果A被选择就存入A的id值,B被选择就存入B的id;反之存入A的id值-1,B的id值+1;
我是初学...不知道能不能存入id值,不过我觉得这种想法应该可以...
就是可以转变一下,不一定要把A,B设定成boolean型来存储它们的值。
--  作者:SATOKO2006
--  发布时间:4/3/2006 1:37:00 PM

--  
看看,研究研究,,,
--  作者:gemingke
--  发布时间:4/3/2006 3:15:00 PM

--  
存入ID值么?还没有试验过~~~

而且,实际情况是4选1,其中A不需要填X、Y项,B、C、D都需要填写

比较麻烦的是,还要考虑数据库的 存和取,不仅仅是文档上的数据要保存到数据库,还要数据库里的数据能生成文档~~~


--  作者:feirate
--  发布时间:4/3/2006 3:36:00 PM

--  
抱歉,...我还是个学生...数据库虽然学过..但是不太不懂..
我认为流程应该是这样的...

对数据进行操作应该是在生成xml的数据之前,就是选了什么,不选什么,我们只把选了的数据存入xml文档,然后把元素的值(不知道元素要不要存)存入数据库;
数据库里的数据被读出来以后,字段作为元素,字段的值作为元素的值,生成xml文件,用于数据交换。(具体技术还不知道)

你说的选了A不需要选X,Y项,B、C、D,这需要,这应该是PHP,ASP或者脚本(如果是通过浏览器的话)这些语言进行限制,然后才把数据生成xml文件...

个人意见...因为对这些了解不多...所以也不知道说的对不对...不过我的想法就是这样的,如果有什么不对的地方请指出来...好让我学习改进


--  作者:gemingke
--  发布时间:4/3/2006 11:02:00 PM

--  
俺不懂的就是程序语言~~~~脚本都不懂~~~

呵呵,看看还有没有其他的解决办法吧


--  作者:gemingke
--  发布时间:4/6/2006 12:42:00 AM

--  
哎,很快就要给 上级答复了,还是没有办法解决
--  作者:feirate
--  发布时间:4/6/2006 8:01:00 AM

--  

<xs:element name="选择">
  <xs:complexType>
   <xs:sequence>
    <xs:choice>
     <xs:element name="A" type="xs:boolean">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="x" minOccurs="1"/>
        <xs:element ref="y" minOccurs="1"/>
       </xs:sequence>
      </xs:complexType>
     </xs:element>
     <xs:element name="B" type="xs:boolean">
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="x"/>
        <xs:element ref="y"/>
       </xs:sequence>
      </xs:complexType>
     </xs:element>
    </xs:choice>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="x" type="xs:string"/>
 <xs:element name="y" type="xs:string"/>


--  作者:gemingke
--  发布时间:4/6/2006 12:00:00 PM

--  
为元素指定了数据类型后,还能被定义为复杂型?
--  作者:gemingke
--  发布时间:4/6/2006 12:53:00 PM

--  
行不通啊
--  作者:feirate
--  发布时间:4/6/2006 10:57:00 PM

--  
似乎用派生或者约束可以...不记得了...
--  作者:feirate
--  发布时间:4/6/2006 10:58:00 PM

--  
错了,是扩展或约束...定义成简单的boolean型,然后扩展...不知道,试试看吧
看看派生那部分
--  作者:gemingke
--  发布时间:4/7/2006 9:59:00 PM

--  
不行~~~扩展只跟根据原类型来操作,不可能由boolean扩展出string的子元素来
--  作者:feirate
--  发布时间:4/7/2006 10:04:00 PM

--  
给Qr发消息问,叫他来看看...我就知道他常在线...
--  作者:gemingke
--  发布时间:4/7/2006 10:12:00 PM

--  
Qr是谁 ?我在这里时间不长
--  作者:feirate
--  发布时间:4/7/2006 11:13:00 PM

--  
[XML基础]的版主
--  作者:gemingke
--  发布时间:4/8/2006 5:37:00 PM

--  
呃,他说他对schema不熟悉,得另外请高人了
--  作者:zieglar
--  发布时间:4/9/2006 3:23:00 PM

--  
我问一下~gemingke你是打算确定了以后用什么样的方法写到数据库里面呢
--  作者:zieglar
--  发布时间:4/9/2006 3:27:00 PM

--  
如果是要经过其它程序语言的处理再写进数据库的话,那么还是按feirate说的采取定义值的方法,而不是定义布尔值来传~
如果你是直接就是xml和数据库的连接~那我就没话说了~~我还没有研究那么深入~~
--  作者:gemingke
--  发布时间:4/9/2006 3:36:00 PM

--  
嗯 ,看来只好试试定义值的方法了
--  作者:gemingke
--  发布时间:4/9/2006 3:38:00 PM

--  
因为我一直想在schema里面实现他们的关系,并且反映到xml文件里。我看了看,key和keyref好像不能实现这个目的
--  作者:98900969r
--  发布时间:4/14/2006 1:05:00 AM

--  
你是不是这个意思(假设若A出现则XY不一定出现,若B/C/D出现则XY一定出现):

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="some_container">
  <xs:complexType>
   <xs:choice>
    <xs:sequence>
     <xs:element name="A" type="xs:boolean"/>
     <xs:group ref="XY" minOccurs="0"/>
    </xs:sequence>
    <xs:sequence>
     <xs:choice>
      <xs:element name="B" type="xs:boolean"/>
      <xs:element name="C" type="xs:boolean"/>
      <xs:element name="D" type="xs:boolean"/>      
     </xs:choice>
     <xs:group ref="XY"/>
    </xs:sequence>
   </xs:choice>
  </xs:complexType>
 </xs:element>
 <xs:group name="XY">
  <xs:sequence>
   <xs:element name="X" type="xs:string"/>
   <xs:element name="Y" type="xs:string"/>
  </xs:sequence>
 </xs:group>
</xs:schema>


--  作者:gemingke
--  发布时间:4/14/2006 9:07:00 AM

--  
确实是这个意思

只是为何这里用group?而不是complexType或element?

ps:俺脑子确实有点死,没想过把XY拉出来定义,放在choice外面~~~


--  作者:feirate
--  发布时间:4/14/2006 9:18:00 AM

--  
晕!...确实把A放到choice的外面多好...倒是知道把xy放到外面用ref....可惜没想到group
--  作者:zieglar
--  发布时间:4/16/2006 7:54:00 PM

--  
解的精辟啊~又学到了新东西~
--  作者:Arthur
--  发布时间:4/17/2006 9:36:00 AM

--  
用XML Schema模式的命名空间呀,不出意外是可以的
--  作者:gemingke
--  发布时间:4/17/2006 11:28:00 AM

--  
命名空间?楼上的知道怎么做吗?
--  作者:yaofenggis
--  发布时间:8/23/2009 10:50:00 AM

--  

W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
148.438ms