2010-06-25 62 views
1

我目前正在试图建立一个XSD在那里我有一个它只能有以下值:XSD是否支持验证XML元素的内容?

<media_type>wmv</media-type> 

<media_type>h264</media_type> 

<media_type>mov</media_type> 

我有发现了<xs:choice/>元素,但是如果我构建这样的复合类型:

<xs:element name="media_type" type="xs:string"> 
    <xs:complexType> 
    <xs:sequence> 
    <xs:element ref="h264"/> 
    <xs:element ref="wmv"/> 
    <xs:element ref="flash"/> 
    </xs:sequence> 
    <xs:attribute name="media_id" use="required" type="xs:integer"/> 
    </xs:complexType> 
</xs:element> 

它会寻找<media_type/>下的元素。有没有办法检查XSD中元素的内容?

回答

4

是的!

<xs:simpleType name="mediaType"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="wmv"/> 
    <xs:enumeration value="h264"/> 
    <xs:enumeration value="mov"/> 
    </xs:restriction> 
</xs:simpleType> 
+0

太棒了,谢谢!当我将它包装在中并将“名称”移动到时工作良好。 – Drew 2010-06-25 04:57:02

+0

@Drew:'simpleType'上的名称是类型的名称。另外,“将它包装到一个元素中”实际上是为元素提供了所包含的“simpleType”的类型---通过在类型属性中放置类型的名称(在文档中的其他位置定义)也可以做到这一点: '' – porges 2010-06-25 06:33:04

+0

啊,所以我可以创建引用,而不是直接声明simpleType在哪里使用它。我刚开始使用XSD,所以我只是将我的XSD看起来像我的XML,而不是创建可重用的部分。 – Drew 2010-06-27 01:01:18