2011-05-03 110 views
0

是否可以定义一个XML Schema(XSD)来正确描述文档,如下所示?XML Schema问题

<root> 
    <str name="status">success</str> 
    <str name="message">Your request has been processed successfuly.</str> 
</root> 

的问题可能是,<str>标签有一个属性(名称)以及字符串值。 如果有人能够为这段XML提出一个XML Schema,我将不胜感激,因为我在这一点上陷入困​​境。到目前为止,我的最佳尝试如下所示,但botbage认为<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> 

回答

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> 

当然,这将允许两个名称属性设置为“消息”,或与“消息”第一,然后状态的元素。我相信架构不能定义一个包含两个相同名称但不同类型的元素的序列,如果您需要验证以确保第一个始终包含“状态”并且第二个包含“消息”,那么您将需要该序列。

+0

非常感谢。这确实指出了我正确的方向。 str元素的顺序并不重要。但是,我想确保其中一个具有“状态”属性,并且其中一个具有“消息”属性。你认为这可能吗? – Epicurus 2011-05-06 07:07:36

+0

我不是100%,但我认为这是不可能的。 XSD无法将具有相同名称的元素按相同顺序定义为不同类型。如果您可以更改XML,则应该使用不同的元素名称,即而不是。相关问题:http://stackoverflow.com/questions/1306305/xsd-same-element-different-types http://stackoverflow.com/questions/827051/xml-schema-for-sequence-of-elements-with-同名,但是,不同的属性值 – fredw 2011-05-10 17:25:56