是否可以定义XML Schema(XSD)以正确描述如下文档?
<root>
<str name="status">success</str>
<str name="message">Your request has been processed successfuly.</str>
</root>
问题可能是<str>
标记具有属性(名称)以及字符串值。
如果有人能为这段XML提出XML Schema,我将不胜感激,因为我现在有点困惑。到目前为止,我最好的尝试如下所示,但是<str>
元素在此上下文中不能具有类型(例如xsd:string)。
<xs:element name="object">
<xs:complexType>
<xs:sequence>
<xs:element name="str" minOccurs="2" maxOccurs="2">
<xs:complexType>
<xs:sequence>
<xs:element name="productName" type="xs:string"/>
</xs:sequence>
<xs:attribute name="name" type="xs:string" use="required"/>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
答案 0 :(得分:1)
您的约束并不完全清楚,因此许多模式将验证XML,具体取决于您希望验证的宽松/紧密程度。此示例显示了一个模式,该模式强制要求元素中的两个元素,并且它们必须具有值为“status”或“message”的“name”属性。
<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="str" type="StrType" minOccurs="2" maxOccurs="2"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="StrType">
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="name" type="StrAttribute" use="required" />
</xs:extension>
</xs:simpleContent>
</xs:complexType>
<xs:simpleType name="StrAttribute">
<xs:restriction base="xs:string">
<xs:enumeration value="status"/>
<xs:enumeration value="message"/>
</xs:restriction>
</xs:simpleType>
</xs:schema>
当然,这将允许两个元素都将name属性设置为“message”,或者首先使用“message”,然后是status。我相信模式不能定义包含两个相同名称但不同类型的元素的序列,如果您需要验证以确保第一个始终包含“status”而第二个包含“message”,则需要这些元素。