0

特定のXML形式を検証するためのxsdファイルの記述に問題があります。XML形式は次のようになります。

<?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>

顧客の数は異なります。1つ以上の場合があります。

これは、この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)顧客名は1つ以上の場合があります。上記のコードでは、シーケンスを使用したため、顧客は3人だけです。このことを修正する必要があります。

XSDでこれら2つのことを手伝ってください。

よろしく、

4

1 に答える 1

1

これがお役に立てば幸いです。

1)次の属性を持つ複合型としてxs:stringを拡張できます。

 <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"/>

また、スキーマのターゲット名前空間を上部に指定する必要があると思います。

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

およびプレフィックスタイプ参照にpを付けます(スキーマによって定義されたすべてのタイプがターゲット名前空間にあるため):

 <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"/>

これらの変更により、上記のドキュメントを正常に検証できました(ドットが削除されています)。

于 2012-08-29T14:41:58.303 に答える