对于以下XSD文件:
<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:simpleType name="stringtype">
<xs:restriction base="xs:string"/>
</xs:simpleType>
<xs:simpleType name="inttype">
<xs:restriction base="xs:positiveInteger"/>
</xs:simpleType>
<xs:simpleType name="dectype">
<xs:restriction base="xs:decimal"/>
</xs:simpleType>
<!-- Tokens -->
<xs:complexType name="RelativeText">
<xs:attribute name="name" type="stringtype" use="required"/>
<xs:attribute name="flow" type="stringtype" use="required"/>
<xs:attribute name="amount" type="inttype" use="required"/>
</xs:complexType>
<xs:complexType name="LineText">
<xs:attribute name="name" type="stringtype" use="required"/>
</xs:complexType>
<xs:complexType name="BoxText">
<xs:attribute name="name" type="stringtype" use="required"/>
<xs:attribute name="width" type="dectype" use="required" />
<xs:attribute name="height" type="dectype" use="required" />
<xs:attribute name="x" type="dectype" use="required" />
<xs:attribute name="y" type="dectype" use="required" />
</xs:complexType>
<!-- Settings -->
<!-- Local Settings - per file type -->
<!-- Directories -->
<xs:complexType name="MonitorDirectoryElementType">
<xs:attribute name="path" type="stringtype" use="required"/>
</xs:complexType>
<xs:complexType name="OutputDirectoryElementType">
<xs:attribute name="path" type="stringtype" use="required"/>
</xs:complexType>
<xs:complexType name="LoggingDirectoryElementType">
<xs:attribute name="path" type="stringtype" use="required"/>
</xs:complexType>
<xs:complexType name="FileExtensionElementType">
<xs:attribute name="extension" type="stringtype" use="required"/>
</xs:complexType>
<xs:complexType name="LocalSettingsType">
<xs:all>
<xs:element name="file-type" type="FileExtensionElementType" maxOccurs="1"/>
<xs:element name="monitor-directory" type="MonitorDirectoryElementType" maxOccurs="1"/>
<xs:element name="output-directory" type="OutputDirectoryElementType" maxOccurs="1"/>
<xs:element name="log-directory" type="LoggingDirectoryElementType" maxOccurs="1"/>
</xs:all>
</xs:complexType>
<!-- Global Settings -->
<xs:complexType name="ApplicationLogFileType">
<xs:attribute name="path" type="stringtype" use="required"/>
</xs:complexType>
<xs:complexType name="GlobalSettingsType">
<xs:all>
<xs:element name="log-file" type="ApplicationLogFileType" maxOccurs="1"/>
</xs:all>
</xs:complexType>
<!-- Token Type Wrap Around -->
<xs:complexType name="TokensType">
<xs:choice maxOccurs="unbounded">
<xs:element name="line-text" type="LineText" />
<xs:element name="box-text" type="BoxText" />
<xs:element name="relative-text" type="RelativeText" />
</xs:choice>
</xs:complexType>
<!-- Template content -->
<xs:complexType name="templatecontenttype">
<xs:all>
<xs:element name="local-settings" type="LocalSettingsType" maxOccurs="1" />
<xs:element name="tokens" type="TokensType" maxOccurs="1"/>
</xs:all>
</xs:complexType>
<!-- Main application settings -->
<xs:complexType name="ApplicationConfigurationType">
<xs:choice maxOccurs="unbounded">
<xs:element name="global-settings" type="GlobalSettingsType" maxOccurs="1"/>
<xs:element name="template-content" type="templatecontenttype" />
</xs:choice>
</xs:complexType>
<xs:element name="ApplicationConfiguration" type="ApplicationConfigurationType" />
</xs:schema>
我希望能够像这样使用xml:
<?xml version='1.0'?>
<ApplicationConfiguration>
<global-settings >
<log-file path="D:\applicationLog.log" />
</global-settings>
<template-content>
<local-settings>
<file-type extension=".txt" />
<monitor-directory path="D:\monitor\"/>
<output-directory path="D:\output"/>
<log-directory path= "D:\ThisInstanceLogs"/>
</local-settings>
<tokens>
<line-text name="xyz1" />
<line-text name="xyz12" />
<relative-text name="xyz123" flow="below" amount="1"/>
<line-text name="xyz1234" />
<line-text name="xyz12345" />
<box-text name="thada" width="100" height="100" x="2" y="3"/>
</tokens>
</template-content>
</ApplicationConfiguration>
哪里
log-file一次&amp;强制
。我觉得我在这里做了很多错事..
答案 0 :(得分:2)
问题是您的xs:element
标记未关闭:
<xs:element name="LocalSettings" type="LocalSettingsType" maxOccurs="1">
我也在这一部分看到错误:
<xs:complexType name="ApplicationConfigurationType">
<xs:all >
<xs:element name="global-settings" type="" maxOccurs="1"/>
<xs:element name="template-content" type="templatecontenttype" maxOccurs="unbounded"/>
</xs:all>
</xs:complexType>
type 属性不应为空, maxOccurs 在xs:all
元素组中必须为0或1。
为了符合您的要求,我认为该部分的架构应如下所示:
<xs:complexType name="ApplicationConfigurationType">
<xs:choice minOccurs="0">
<xs:sequence>
<xs:element name="global-settings" type="GlobalSettingsType" />
<xs:element name="template-content" type="templatecontenttype"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:sequence>
<xs:element name="template-content" type="templatecontenttype"
maxOccurs="unbounded" />
<xs:sequence minOccurs="0">
<xs:element name="global-settings" type="GlobalSettingsType" />
<xs:element name="template-content" type="templatecontenttype"
minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:sequence>
</xs:choice>
</xs:complexType>
在顶层您可以选择 - 您的第一个元素将是global-settings
(第一个序列)或template-content
(第二个序列)。
如果第一个元素是global-settings
,那么可以跟随0个或更多个template-content
元素,这就是它的全部内容。
如果第一个元素是template-content
,则可能存在许多元素(因此它是无界的)。并且可以选择后跟global-settings
元素(嵌套序列)。如果有global-settings
个元素,则可能会有0个或多个其他template-content
个元素。
我认为这涵盖了所有可能性。 global-settings
和template-content
都是可选的。最多只能有一个global-settings
个元素。它们可以按任何顺序出现。