表示字符串到字典的XML模式是什么?

mar*_*ark 5 xml xpath xsd

假设我有一个Dictionary<string, string>实例,例如:

{{“ a”,“ 1”},{“ b”,“ 2”}}

有几种方法可以用XML表示它:

<root>
  <item>
    <key>a</key>
    <value>1</value>
  </item>
  <item>
    <key>b</key>
    <value>2</value>
  </item>
</root>
Run Code Online (Sandbox Code Playgroud)

要么

<root>
  <item key="a" value="1"/>
  <item key="b" value="2"/>
</root>
Run Code Online (Sandbox Code Playgroud)

要么

<root>
  <a>1</a>
  <b>2</b>
</root>
Run Code Online (Sandbox Code Playgroud)

描述每种表示形式的XML模式是什么?

谢谢。

Kir*_*huk 4

xs:unique元素。对于第一个 XML,适当的 XSD 是:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="item">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="key" type="xs:string"  />
                            <xs:element name="value" type="xs:string" />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>

        <xs:unique name="uniqueItem">
            <xs:selector xpath="item"/>
            <xs:field xpath="key"/>
        </xs:unique>
    </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

对于第二个:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element maxOccurs="unbounded" name="item">
                    <xs:complexType>
                        <xs:attribute name="key" type="xs:string" use="required" />
                        <xs:attribute name="value" type="xs:string" use="required" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>

        <xs:unique name="uniqueItem">
            <xs:selector xpath="item"/>
            <xs:field xpath="@key"/>
        </xs:unique>

    </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

对于第三个:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="a" type="xs:string" />
                <xs:element name="b" type="xs:string" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

  • @polishchuk:我对 XSD 的记忆现在有点生锈了。我们确信对于任何给定的模式语言来说,有些情况不能方便地指定(或根本不能指定)。在许多情况下,由于这些原因,人们倾向于使用 Schematron。 (2认同)