6

次のXmlSchemaを使用します。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.test.com/XmlValidation"
  elementFormDefault="qualified"
  attributeFormDefault="unqualified"
  xmlns:m="http://www.test.com/XmlValidation">

  <xs:element name="test">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="testElement" type="m:requiredStringType"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="requiredStringType">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
      <xs:whiteSpace value="collapse"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

これは、少なくとも1文字の長さでなければならないrequiredStringTypeを定義し、空白の折りたたみも定義します。

次のXmlドキュメントを検証すると、検証は成功します。

<?xml version="1.0" encoding="UTF-8"?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.text.com/XmlValidation">
    <testElement>     </testElement>
</test>

w3.orgは、空白の折りたたみを定義しています。

「置換によって暗示される処理の後、#x20の連続するシーケンスは単一の#x20に折りたたまれ、先頭と末尾の#x20が削除されます。」

これは、3つの空白が1つまたは0の空白に折りたたまれていることを意味しますか?XmlSpyでは検証は失敗し、.Netでは成功します。

4

2 に答える 2

7

先頭と末尾の空白が削除されると言われているため、空白のみを含む文字列は折りたたまれて空の文字列になります。XmlSpy は検証で正確であり、.NET は寛大です (またはエラーを起こしています)。

これは、 XML Schema Part 1: Structures Second Editionからの検証中の空白の正規化によるものです。

preserve
正規化は行われず、値は正規化された値になります
replace
#x9 (タブ)、#xA (ライン フィード)、および #xD (キャリッジ リターン) の出現箇所はすべて > #x20 (スペース) に置き換えられます。 上記の replace で指定された置換に続いて、連続する #x20 のシーケンスが単一の #x20 に折りたたまれ、最初および/または最後の #x20 が削除されます

したがって、最初にすべての空白が空白文字に置き換えられ、2 番目に連続するシーケンスが 1 つの空白文字に置き換えられ、3 番目と最後、最初と最後の空白が削除されます。このシーケンスに従って、検証中に空白のみを含む文字列を空の文字列に正規化する必要があります。

于 2009-03-20T14:20:41.547 に答える
0

これは .Net (パターン ファセットに注意) で機能するようですが、Saxon ではパターンは必要ありません。

<xs:element name="StoreCode" minOccurs="1">
<xs:simpleType>                         
    <xs:restriction base="xs:string">
            <xs:whiteSpace value="collapse"/>
        <xs:pattern value=""/>
        <xs:minLength value="1"/>
        <xs:maxLength value="15"/>
    </xs:restriction>
</xs:simpleType>
</xs:element>
于 2014-12-17T16:46:07.807 に答える