1

スキーマファイルの「content」要素を記述して、子の順序がわかるようにするにはどうすればよいですか。ただし、「metadata」の後、「content-section」の前に要素を配置できますか?

基本的には、以下の例で説明されていることを実行したいと思います。これは、粗いので、機能しません。現在ある場所に1つ以上の要素を配置します。

<xs:element name="content">
    <xs:complexType>
      <xs:sequence> 
       <xs:element name="metadata" minOccurs="0" maxOccurs="unbounded"></<xs:element>
       <xs:any>
       <xs:element name="content-section" minOccurs="0" maxOccurs="unbounded">/<xs:element>  
       <xs:element name="content-footer" minOccurs="0" maxOccurs="unbounded">
   </<xs:element>    
 </xs:element>

XML:

  <content>
    <metadata></metadata>
    <h1>Not in schema</h1>
    <p>also not in schema</p>
    <content-section></content-section>
    <content-footer></content-footer>
  </content>
4

2 に答える 2

0

遭遇する可能性のある問題の 1 つは、ユニーク パーティクル アトリビューションと呼ばれます。anyそれはすべて、必要な要素がどの名前空間に含まれているかによって異なります。

最悪のシナリオは、任意の名前空間です。したがって、あなたの要件を引き受けます(InfantPro'Aravind'は、コンテンツセクションを必須にすることで問題を回避し、任意の要素のmaxOccursを任意の数に制限したのとは異なります)、ここから始めます( BAD スキーマ、UPA 違反)。最初に、以下を許可するように any の maxOccurs を修正します1 or more elements to be placed in the location

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="content">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="metadata" minOccurs="0" maxOccurs="unbounded"/>
                <xsd:any maxOccurs="unbounded"/>
                <xsd:element name="content-section" minOccurs="0" maxOccurs="unbounded"/>
                <xsd:element name="content-footer" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

エラーは次のとおりです。

Error occurred while loading [how-can-i-describe-an-element-with-some-any-child-element-and-some-known.xsd], line 8 position 6.
Wildcard '##any' allows element 'metadata', and causes the content model to become ambiguous. A content model must be formed such that during validation of an element information item sequence, the particle contained directly, indirectly or implicitly therein with which to attempt to validate each item in the sequence in turn can be uniquely determined without examining the content or attributes of that item, and without any information about the items in the remainder of the sequence.

これを修正する必要があります。これらはあなたのオプションです:

1) any の名前空間を別のもの (例: ##other) に制限します。

<xsd:any maxOccurs="unbounded" namespace="##other"/>

名前空間を制限できない場合は、次のオプションがあります。

any2)コンテンツを別の要素 (Extension と呼ばれる) にラップします。

<?xml version="1.0" encoding="utf-8" ?>
<!-- XML Schema generated by QTAssistant/XSD Module (http://www.paschidev.com) -->
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="content">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="metadata" minOccurs="0" maxOccurs="unbounded"/>
                <xsd:element name="extension"/>
                <xsd:element name="content-section" minOccurs="0" maxOccurs="unbounded"/>
                <xsd:element name="content-footer" minOccurs="0" maxOccurs="unbounded"/>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

any他のすべての場合、コンテンツを下部に移動する必要があります。

3)any右を一番下に移動し、その前に必須要素を置きます。

このタイプをグローバルにしたいが、それが final にならないようにする場合は、他のパターンに入ります。

于 2013-03-14T12:10:46.210 に答える