2011-05-03 109 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