XML Schema(XSD> - 非空元素可以有类型和属性吗?

时间:2011-11-22 15:57:48

标签: xml xsd

我对XML Schema比较新,我遇到了一个问题。我知道,对于具有与之关联的属性的元素,它必须是复杂类型。但是我只能弄清楚如何将属性与空元素相关联(参见示例1)...是否可以将属性与非空元素相关联并为该元素声明一个类型(参见示例2)?我正在使用Visual Studio 2008编写模式...当我将元素声明为复杂类型时,它告诉我必须从元素中删除类型声明 - 请参阅下文。

示例1:

<phone units = "grams" />

示例2:

<phone units = "grams">92</phone>

Phone.XML

<?xml version="1.0" encoding="utf-8"?>
<phone xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"           xsi:noNamespaceSchemaLocation="XSD.xsd">
<make>Nokia</make>
<model>N700</model>
<code>532/4329</code>
<weight units ="grams">92</weight>
<price>49.99</price>
</phone>

XSD.xsd

<?xml version="1.0" encoding="utf-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

<xs:attribute name ="units" type ="xs:string" />

<xs:element name ="phone">
<xs:complexType>
  <xs:sequence>
    <xs:element name ="make" type="xs:string" />
    <xs:element name ="model" type="xs:string" />
    <xs:element name ="code" type="xs:string" />
    <xs:element name ="weight" type="xs:string">
      <xs:complexType>
        <xs:attribute name="units" type="xs:string" />
      </xs:complexType>
    </xs:element>
    <xs:element name ="price" type="xs:double" />
  </xs:sequence>
</xs:complexType>
</xs:element>

</xs:schema>

我还没有在网上找到一个证明这一点的例子。是否有可能或者我必须牺牲与称重元素相关的类型才能插入属性?

任何帮助都将非常感谢....谢谢......

1 个答案:

答案 0 :(得分:2)

做这样的事情:

<xs:element name="weight" type="weightType">
</xs:element> 

<xs:complexType name="weightType">
    <xs:simpleContent>
        <xs:extension base="xs:integer">
            <xs:attribute name="units" type="xs:string"/> 
        </xs:extension>
    </xs:simpleContent>
</xs:complexType>