2012-08-29 18 views
0

我在編寫驗證特定XML格式的xsd文件時遇到問題。 XML格式如下:驗證XML所需的XSD文件幫助

<?xml version="1.0" encoding="UTF-8"?> 
<p:customers xmlns:p="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com NewXMLSchema.xsd "> 
<p:customer> 
    <p:name salutation="Mr."/> 
    <p:age>25</p:age> 
    <p:discount>6</p:discount> 
</p:customer> 
<p:customer> 
    <p:name salutation="Ms."/> 
    <p:age>35</p:age> 
    <p:discount>10</p:discount> 
</p:customer> 
........ 
........ 
</p:customers> 

客戶數量會有所不同;它可能是一個或多個。

這是我想出了驗證這個XML的XSD:

<xs:complexType name="customerName"> 
    <xs:attribute name="salutation" type="xs:string" default="Mr."></xs:attribute> 
</xs:complexType> 

<xs:simpleType name="customerAge"> 
    <xs:restriction base="xs:integer"> 
     <xs:minInclusive value="18"></xs:minInclusive> 
     <xs:maxInclusive value="60"></xs:maxInclusive> 
    </xs:restriction> 
</xs:simpleType> 

<xs:simpleType name="customerdiscount"> 
    <xs:restriction base="xs:integer"> 
     <xs:minInclusive value="5"></xs:minInclusive> 
     <xs:maxInclusive value="30"></xs:maxInclusive> 
    </xs:restriction> 
</xs:simpleType> 

<xs:complexType name="customer"> 
    <xs:sequence> 
     <xs:element name="name" type="customerName"></xs:element> 
     <xs:element name="age" type="customerAge"></xs:element> 
     <xs:element name="discount" type="customerdiscount"></xs:element> 
    </xs:sequence> 
</xs:complexType> 

<xs:element name="customers"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="customer" type="customer"></xs:element> 
      <xs:element name="customer" type="customer"></xs:element> 
      <xs:element name="customer" type="customer"></xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

在上面的XSD,我面臨着一些問題,需要在決議:

1)我想要的名字是這樣的:

<name salutation="Mr.">XYZ NAme</name> 

2)客戶名稱可以是一個或多個。在上面的代碼中,我使用了序列,因此可以有3個,只有3個客戶。這件事我需要糾正。

請在XSD中幫助我解決這兩個問題。

問候,

回答

1

我希望這有助於:

1)你可以擴展的xs:字符串作爲一個複雜的類型與屬性:

<xs:element name="name"> 
    <xs:complexType> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="salutation" type="xs:string"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:element> 

2)可以使用的minOccurs和maxOccurs :

<xs:element name="customer" type="customer" minOccurs="1" maxOccurs="unbounded"/> 

另外,我認爲你需要在頂部指定模式的目標命名空間:具有p

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
      elementFormDefault="qualified" 
      targetNamespace="http://www.w3schools.com" 
      xmlns:p="http://www.w3schools.com"> 

和前綴類型的引用(因爲由模式定義的所有類型都在目標命名空間):

<xs:element name="age" type="p:customerAge"/> 
<xs:element name="discount" type="p:customerdiscount"/> 
<xs:element name="customer" type="p:customer" minOccurs="0" maxOccurs="unbounded"/> 

隨着這些改變,我可以成功驗證上述文件(與該點去除)。

+0

這解決了我的問題。非常感謝您的幫助 :) – user182944