0

私はxsdとxmlファイルを持っています。検証がオフになっている場合、xml は正常に解析されます。ただし、xsd 検証では、xsd のルート要素が null であると不平を言います。

  1. 私の xsd ファイルには複数のグローバル要素があります。したがって、基本的にこれは問題になる可能性があります。xsdから推測すると、XOMはルート要素をnullとして取得します。その上で確認できれば

  2. xsdファイルでルート要素を宣言する方法と、それを行うための最良の方法は何か、xsdでグローバル要素を1つの要素だけに制限することは私にはよく見えません


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

<xs:element name="address_book" >
<xs:complexType>
<xs:sequence>
<xs:element ref="entry" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>

<xs:element name="email" type="xs:string"/>
<xs:element name="first_name" type="xs:string"/>
<xs:element name="last_name" type="xs:string"/>

<xs:element name="entry">
<xs:complexType>
<xs:sequence>
<xs:element ref="first_name" minOccurs="0"/>
<xs:element ref="last_name" minOccurs="0"/>
<xs:element ref="email" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>

<?xml version="1.0" encoding="UTF-8"?>
<address_book xmlns="http://www.popcornmonsters.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.popcornmonsters.com/address_book.xsd">
<entry>
<first_name>Ken</first_name>
<last_name>Cochrane</last_name>
<email>ken@fakeURL.no</email>
</entry>
<entry>
<first_name>Emily</first_name>
<last_name>Cochrane</last_name>
<email>Emily@fakeURL.no</email>
</entry>
</address_book>
4

2 に答える 2

0

あなたのスキーマは基本的にOKですが、最大で1つの <entry> 要素しか許可されていません。おそらくその時点で maxOccurs="unbounded" が必要です。

ただし、問題を解決するには、解析/検証の設定方法と使用するツールについて詳しく知る必要があります。使用しているのが xom.nu の場合は、名前空間を認識し、XMLReader を検証するスキーマをBuilder インスタンスに渡すようにしてください。

于 2011-03-21T10:02:22.007 に答える
-1

次の属性に注意してください:xsi:schemaLocation = "http://www.popcornmonsters.com/address_book.xsd"これは、URIとファイル名の値のペアであると想定されています。したがって、address_book.xsdの前のスペースは必須です。xsi:schemaLocation = "http://www.popcornmonsters.com/ address_book.xsd"スペースがないと、XMLドキュメントに関連付けられたスキーマはありません。

于 2012-06-13T14:46:46.173 に答える