1

私は XML スキーマの書き方を学んでおり、次のような XML 構造を検証する XML スキーマを定義したいと考えています。

<mylist myattr="1">1 2 3 4 5 6 7</mylist>

complexTypeそこで、を利用listして 1 つの属性を持つを定義しようとしました。

これは私が思いついたスキーマです:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">

  <xs:complexType name="mylist-type">
    <xs:simpleContent>
      <xs:extension base="xs:list" >
        <xs:attribute name="myattr" type="xs:integer"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="mylist" type="mylist-type"/>
</xs:schema>

http://www.freeformatter.com/xml-validator-xsd.htmlを使用してスキーマに対して XML を検証すると、エラーが発生します

Src-resolve.4.2: Error Resolving Component 'xs:list'. 
It Was Detected That 'xs:list' Is In Namespace 'http://www.w3.org/2001/XMLSchema', 
But Components From This Namespace Are Not Referenceable From Schema Document 'null'.
If This Is The Incorrect Namespace, Perhaps The Prefix Of 'xs:list' Needs To Be Changed.
If This Is The Correct Namespace, Then An Appropriate 'import' Tag Should Be Added To null'.

ただし、単純に に変更xs:listするxs:stringと、スキーマは問題なく検証され、これが本当に名前空間の問題なのかという疑問が生じました。

私は何を間違っていますか?

4

2 に答える 2

0

使用する

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

  <xs:simpleType name="int-list">
     <xs:list itemType="xs:integer"/>
  </xs:simpleType>

  <xs:complexType name="mylist-type">
    <xs:simpleContent>
      <xs:extension base="int-list" >
        <xs:attribute name="myattr" type="xs:integer"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="mylist" type="mylist-type"/>
</xs:schema>

基本的には、まず特定のリスト タイプを定義してから、そのリスト タイプを拡張機能で使用します。

于 2013-11-10T13:14:34.213 に答える
0

ドラフト スキーマはmylist-type、 type の拡張として定義されていますxs:list。しかしlist、XSD 名前空間には名前が付けられたデータ型はありません。名前を置き換えるとエラーが消える理由は、xs:string という名前の型 xs:stringがあるためです。

プロセッサが「'xs:list' のプレフィックスを変更する必要があるかもしれません」と言った場合、おそらくlist他の名前空間の型を意味していると推測しています。

【追記】xs:listって型じゃないなら何これは、単純型を他の単純型から派生させる 3 つの方法の 1 つです。たとえば、次の型宣言は、空白で区切られた整数のリストを記述します。itemTypexs:list 要素の属性は、リストの項目が持つタイプを示します。

<xs:simpleType name="list-of-integer">
  <xs:list itemType="xs:integer"/>
</xs:simpleType>

XSD ではよくあることですが、名前付き型の代わりに匿名型を使用することもできます。その場合、関連する simpleType 要素が xs:list の子として表示されます。次の宣言では、内側の simpleType 要素は値が 0 から 100 までの整数 (コースの小テストで使用される成績の尺度など) である型を宣言し、外側の simpleType 要素は次のリストから構成される型を宣言します。そのような数字。

<xs:simpleType name="list-of-grades">
  <xs:list>
    <xs:simpleType>
      <xs:restriction base="xs:integer">
        <xs:minInclusive value="0"/>
        <xs:maxInclusive value="100"/>
      </xs:restriction>
    </xs:simpleType>
  </xs:list>
</xs:simpleType>
于 2013-11-12T00:15:20.223 に答える