当我使用Visual Studio(xml资源文件)生成.resx文件时,XSD架构包含在同一文件中。 (参见示例)其他工具能够解释此文件,它似乎是“有效的”。尽管如此,我找不到w3schools的任何有效信息。 Theory教会编写xsd文件并在xml文件中引用它。除了验证通常还提供了xsd文件和xml文件。
在xml文件中定义xsd架构是否有效,如给定示例中所示?如果是,它适用于何处?它包含在节点中?如果您可以提供更多解释的链接,那将非常感激。
<?xml version="1.0" encoding="utf-8"?>
<root>
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="Key">
<value>Value</value>
</data>
</root>
编辑以回应adrianos评论: 我本应该回顾一下W3C网站。阅读和理解起来要困难得多......我现在做了,但是在那么短的时间内我无法全面了解。我发现了什么:
我还没有看到任何提示,包括模式应被视为有效。这对我来说似乎很实用,但它就像混合数据和定义一样。
答案 0 :(得分:1)
鉴于您的所有参考资料,我几乎可以肯定您知道格式良好的XML与有效XML之间的区别。那么,当你问“它有效吗?”时,你有什么想法?根据什么有效?
您的示例可能有效,但根据某些Microsoft规范 - 其他工具最有可能在此处绘制空白。
如果你正在考虑更多关于任意XML的问题,你有一个XSD,如果你问是否有一种“标准”方式将XSD与XML一起包含,然后神奇地拥有一些-party支持XSD的XML处理器选择XSD并使用它来验证XML的其余部分...然后不,我不认为它有一个标准。
就像你的例子一样,如果你想定义自己的XML格式来内联XSD,那么XML或XSD规范中就没有任何东西可以让你这样做;没有其他工具可以提取它,但它可以适用于您的专有应用程序。我想指出,由于与互操作性,版本控制等相关的原因,有一些数据格式包括模式和数据。
提供关于用于验证的XSD的“提示”的标准化方法确实是您引用的XML Schema Instance属性schemaLocation和noNamespaceSchemaLocation;然而,规范还说这些只是“提示”,处理器可以自由地忽略它们 - 所以即使有效,它们也可能不起作用。
Example 1(没有命名空间):
<person xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://adventure-works.com/schemas/person.xsd">
<name>John</name>
<height>59</height>
</person>
Example 2(多个名称空间,多个模式):
<p:Person xmlns:p="http://contoso.com/People" xmlns:v="http://contoso.com /Vehicles" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=
"http://contoso.com/People
http://contoso.com/schemas/people.xsd
http://contoso.com/schemas/Vehicles
http://contoso.com/schemas/vehicles.xsd
http://contoso.com/schemas/People
http://contoso.com/schemas/people.xsd">
<name>John</name>
<age>28</age>
<height>59</height>
<v:Vehicle>
<color>Red</color>
<wheels>4</wheels>
<seats>2</seats>
</v:Vehicle>
</p:Person>
几乎任何XML编辑器都有自己的支持机制,可以将XSD与XML相关联,从单个属性到XSD目录,当然还有对XSI属性的支持。
“内联”XML中的XSD是一项棘手的业务;如果您涉及多个XML实例,那么您有维护问题,等等。如果出于某种原因,我真的需要这样的东西,我会使用XInclude。