Я построил файл XSD на основе UML и XML код (ссылка и код ниже), но я не могу проверить файл XML.Как правильно создать файл XSD?
<?xml version="1.0" encoding="ISO-8859-15"?>
<Library
xsi:noNamespaceSchemaLocation="lib.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >
<authors>
<author id="author1" name="Einstein"/>
</authors>
<publications>
<Book year="1942" title="7 Kingdoms" author="Einstein"/>
<Magazine year="2010" number="203" title="The News"/>
<Book year="1956" title="The Fall" author="author1"/>
</publications>
</Library>
Вот XSD файл, который я построил из UML и код XML:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="library" type="Library">
<!-- Begin KEY -->
<xsd:key name="Author">
<xsd:selector xpath="./authors/Author"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xsd:key name="Magazine">
<xsd:selector xpath="./publications/Magazine"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xsd:key name="Book">
<xsd:selector xpath="./publications/Book"/>
<xsd:field xpath="@id"/>
</xsd:key>
<xsd:key name="Publication">
<xsd:selector xpath="./publications/Magazine | ./publications/Book"/>
<xsd:field xpath="@id"/>
</xsd:key>
<!-- END KEY -->
<!-- Begin KEYREF -->
<xsd:keyref name="Book.author" refer="Author">
<xsd:selector xpath="./publications/Book/author"/>
<xsd:field xpath="@ref"/>
</xsd:keyref>
<!-- END KEYREF -->
</xsd:element>
<xsd:complexType name="Author">
<xsd:attribute name="id" type="xsd:string"/>
<xsd:attribute name="name" type="xsd:string"/>
</xsd:complexType>
<xsd:complexType name="Publication">
<xsd:attribute name="title" type="xsd:string"/>
<xsd:attribute name="year" type="xsd:integer"/>
</xsd:complexType>
<xsd:complexType name="Magazine">
<xsd:complexContent>
<xsd:extension base="Publication">
<xsd:attribute name="number" type="xsd:integer"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Book">
<xsd:complexContent>
<xsd:extension base="Publication"/>
</xsd:complexContent>
</xsd:complexType>
<xsd:complexType name="Library">
<xsd:sequence>
<xsd:element name="book" type="Book" maxOccurs="unbounded"/>
<xsd:element name="magazine" type="Magazine" maxOccurs="unbounded"/>
<xsd:element name="author" type="Author" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
У меня есть проблема, когда я пытаюсь подтвердите XML-файл, потому что он не находит объявление элемента «Библиотека».
Я не уверен, что KeyRef имени = «Book.author» создан достаточно установленная связь между книгой и автором, и я считаю, что проблема исходит от этого.
Нужно ли добавить код в complexType name = "Book", чтобы создать ссылку и, следовательно, проверить файл XML?
Не достаточно, чтобы комментировать знать, но это с учетом регистра? –
@CecilWard Да, дело имеет значение. Библиотека против библиотеки - это две разные вещи. – Dijkgraaf
С тех пор я много (XSLT) и т. Д., Поэтому очень ржавый. –