1

何時間も試した後でも、この簡単な例を実行することはできません。Node目標は非常に単純です。メモ付きのxml-Documentは、すべてに一意のが割り当てられている場合にのみ有効ですNoteID

これが私のNotes.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://xml.netbeans.org/schema/Notes"
            xmlns:tns="http://xml.netbeans.org/schema/Notes"
            elementFormDefault="qualified">
    <xsd:element name="Notes">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element name="Note" maxOccurs="unbounded">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="NoteID" type="xsd:positiveInteger"/>
                            <xsd:element name="Content"  type="xsd:string"/>
                        </xsd:sequence>
                    </xsd:complexType>
                    <xsd:unique name="newKey">
                        <xsd:selector xpath="."/>
                        <xsd:field xpath="NoteID"/>
                    </xsd:unique>
                </xsd:element>
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

そしてNotes.xml

<?xml version="1.0" encoding="UTF-8"?>
<ns0:Notes  xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
            xmlns:ns0='http://xml.netbeans.org/schema/Notes'
            xsi:schemaLocation='http://xml.netbeans.org/schema/Notes Notes.xsd'>
    <ns0:Note>
        <ns0:NoteID>1</ns0:NoteID>
        <ns0:Content>this</ns0:Content>
    </ns0:Note>
    <ns0:Note>
        <ns0:NoteID>1</ns0:NoteID>
        <ns0:Content>is a</ns0:Content>
    </ns0:Note>
    <ns0:Note>
        <ns0:NoteID>3</ns0:NoteID>
        <ns0:Content>test</ns0:Content>
    </ns0:Note>
</ns0:Notes>

そして、これがなぜ検証されるのか私にはわかりません:

$ xmllint --noout -schema Notes.xsd Notes.xml 
Notes.xml validates
4

1 に答える 1

2

xsd:uniqueは間違った場所にあり、s に明示的な名前空間プレフィックスが必要ですxpath

これは機能します:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
            targetNamespace="http://xml.netbeans.org/schema/Notes"
            xmlns:tns="http://xml.netbeans.org/schema/Notes"
            elementFormDefault="qualified">
  <xsd:element name="Notes">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Note" maxOccurs="unbounded">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="NoteID" type="xsd:positiveInteger"/>
              <xsd:element name="Content"  type="xsd:string"/>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
    <xsd:unique name="newKey">
      <xsd:selector xpath="tns:Note"/>
      <xsd:field xpath="tns:NoteID"/>
    </xsd:unique>
  </xsd:element>
</xsd:schema>
于 2012-10-09T20:58:29.290 に答える