6

いくつかのツールを使用して XML スキーマを検証しようとしていますが、使用するツールによっては、一貫したメッセージが表示されません。次の構文が問題のようです。

<xs:element name="Name" 
            minOccurs="1" 
            type ="xs:string" 
            maxLength = "125"/>

XML-Spy はエラーをトリガーしますが、Notepad ++ (Windows) と XML Copy Editor (Ubuntu) はそれを検証します。その構文は正しいですか、これを使用する必要があります:

<xs:element name="name">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:minOccurs="1"/>
      <xs:maxLength = "125"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>
4

2 に答える 2

7

構文は次のようになります。

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xs:schema targetNamespace="http://tempuri.org/XMLSchema.xsd" xmlns="http://tempuri.org/XMLSchema.xsd" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="SomeContainer">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Name" minOccurs="0">
                    <xs:simpleType>
                        <xs:restriction base="xs:string">
                            <xs:maxLength value="125"/>
                        </xs:restriction>
                    </xs:simpleType>
                </xs:element>                   
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
  • minOccurs は、コンテンツ モデル内の要素にのみ適用されます。グローバル レベルの要素では想定されていません。
  • minOccurs="1" は不要です。1はデフォルト値なので、指定する必要はありません。
  • maxLength は、単純型制限に関連付けられた制約ファセットです。
于 2013-02-19T21:11:03.780 に答える
5

「私の構文は [例 1] で正しいですか、それとも [例 2] を書くべきですか?」と尋ねます。

ない。

最初の例では、 xs:element 要素で宣言されていない maxLength 属性を使用しています。(minOccurs 属性は、コンテキストに応じて許可される場合と許可されない場合があります。Petru Gardea が既に指摘しているように、トップレベルの要素宣言では合法ではありません。) これでエラーを発生させないエディターは、完全な仕事をしていません。スキーマの XSD スキーマへの準拠をチェックする (XSD の完全な制約は言うまでもなく)。XSD スキーマ ドキュメントの信頼できる検証が必要な場合は、Xerces、Saxon、MSV、またはその他の準拠する XSD 実装が役に立ちます。

2 番目の例では、minOccurs は要素宣言の属性ではなくなり (コンテキストによってはそうなる可能性があります)、xs:restriction (いいえ、間違っています) 内の要素 (いいえ、間違っています) になります。maxLength ファセットは xs:restriction の要素の子として正しく表されますが、例の要素は整形式ではありません。要素の型名を属性名として使用しようとしているようです。誤った minOccurs 要素を削除し、不適切な形式の maxLength 要素を修正すると、残りは Name の構文的に正しい最上位要素宣言になります。

<xs:element name="name">
  <xs:simpleType>
    <xs:restriction base="xs:string">
      <xs:maxLength value = "125"/>
    </xs:restriction>
  </xs:simpleType>
</xs:element>
于 2013-02-19T23:24:16.720 に答える