以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  Schema 类型定义~(简单)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=52539)


--  作者:boaboa
--  发布时间:9/11/2007 9:18:00 PM

--  Schema 类型定义~(简单)
Schema
1<xs:elemetn name="comment" type="xs:string"/>

2<xs:elemetn name="comment" type="string"/>

声明内置数据类型时用哪种?什么情况下用1?  什么情况下用2?

帮助下新手吧.......刚学XML的


--  作者:PrimoJin
--  发布时间:10/11/2007 9:48:00 AM

--  
首先声明,我也是新手,我估计这里的高手太多了。可能不愿意回答像咱们这样新手的问题
^_^那我就用这两天学到的知识给你解释下!
这个问题应该归结到名称空间的相关问题上,首先,你要了解下XMLSchema的名称空间,如下
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xbe2="http://www.w3school.com"
targetNamespace="http://www.w3school.com"
elementFormDefault="qualified" attributeFormDefault="unqualified">
第一个就是声明了名称空间没有什么好讲的了
xmln:xbe2:讲xbe2前缀与"http://www.w3school.com"名称空间联系起来(个人感觉理解到这里就可以了,如果要是像深入了解名称空间的知识那你就取看看XML名称空间介绍的语法吧)
targetNamespace是该模式使用的名称空间。这个属性与xmlns:xbe2的作用是不一样的,xmlns:xbe2是将前缀和名称空间联系起来。
elementFormDefault和attributeFormDefault分别控制本地元素和属性是否需要带有名称空间前缀。可以接受的值包括unqualified(本地元素不带有名称空间前缀)和qualified(本地元素必需带有名称空间前缀)。
备注:如果你对“本地元素”和"全局元素"不太理解的话,可以忽略掉这几个字,因为对你的这个问题没有太大的关联。
其次,我认为你的提议不太合理,而且你的提议过于极端化,非常之不利于举例说明。
如果你要是这么写的话,你可以选择2来书写
<schema  >
<element name="ENTER_NAME_OF_ROOT_ELEMENT_HERE" type="string">
<annotation>
<documentation>Comment describing your root element</documentation>
</annotation>
</element>
</schema>
你对schema没有名称空间的引用的话你就可以不用加“xs”前缀了
如果这样
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="ENTER_NAME_OF_ROOT_ELEMENT_HERE" type="xs:string">
  <xs:annotation>
   <xs:documentation>Comment describing your root element</xs:documentation>
  </xs:annotation>
 </xs:element>
</xs:schema>
你对schema加了名称空间你就不能省略“xs”。你就的选择1了。
但是。如果按照上面这样为了省略“xs”前缀就把schema的名称空间给省略了,那是不科学也不合理的。
为什么呢 ?
因为string应该算是系统自带的类型说明了(这里感觉说的不太规范,但是我的本意就是这个不是自己创建的类型)。你要是不加前缀的话,怎么能区分这个是你自己创建的类型说明还是系统自带的类型说明呢?
<xs:simpleType name="states-provinces">
  <xs:restriction base="xs:string">
   <xs:enumeration value="OH"/>
   <xs:enumeration value="OK"/>
   <xs:enumeration value="ON"/>
   <xs:enumeration value="OR"/>
  </xs:restriction>
 </xs:simpleType>
 <xs:complexType name="address-details">
  <xs:sequence>
   <xs:element name="street" type="xs:string"/>
   <xs:element name="region" type="states-provinces" minOccurs="0"/>
   <xs:element name="postal-code" type="xs:string"/>
   <xs:element name="locality" type="xs:string"/>
   <xs:element name="country" type="xs:string"/>
  </xs:sequence>
  <xs:attribute name="preferred" type="xs:boolean" default="true"/>
 </xs:complexType>
其中<xs:element name="region" type="states-provinces" minOccurs="0"/>
的type就是自己定义的。它就没有加名称空间(当然,如果你按照前面介绍的名称空间说明也是可以添加前缀的)。
建议楼主应该和我一样静下心来,从基础看起。:-)


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