Xsd 使用AnyAttribute的Xml架构,将属性添加到特定元素

Xsd 使用AnyAttribute的Xml架构,将属性添加到特定元素,xsd,Xsd,如果有两个元素与模式中的元素类似: <xs:element name="NodeType1"> <xs:complexType> <xs:anyAttribute /> </xs:complexType> </xs:element> <xs:element name="NodeType2"> <xs:complexType> <xs:anyAttribute /> &

如果有两个元素与模式中的元素类似:

<xs:element name="NodeType1">
  <xs:complexType>
    <xs:anyAttribute />
  </xs:complexType>
</xs:element>

<xs:element name="NodeType2">
  <xs:complexType>
    <xs:anyAttribute />
  </xs:complexType>
</xs:element>


是否可以在另一个模式中仅扩展其中一个元素?假设我只想向
节点pe2
添加一个属性。

元素是不可扩展的;一般来说,如果您希望在其他任何地方(无论是在同一个XML模式中还是在另一个XML模式中)用作扩展的基础,则必须创建一个命名(全局,在schema元素下)类型

你的问题很有趣,因为它真的让人想知道扩展某个定义上可以匹配任何东西的东西的目的是什么。就这一点而言,扩展的效果实际上是相反的;它为扩展名中命名的属性创建约束

因此,第一个XSD:

<?xml version="1.0" encoding="utf-8" ?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/XMLSchema.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <xsd:element name="root" type="BaseType"/>

    <xsd:complexType name="BaseType">
        <xsd:anyAttribute processContents="lax" />
    </xsd:complexType>

    <xsd:complexType name="Extending">
        <xsd:complexContent>
            <xsd:extension base="BaseType">
                <xsd:attribute name="new1" type="xsd:int"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
</xsd:schema>
将S更改为数字,将使XML有效


“扩展”不是很有趣吗?…

元素是不可扩展的;一般来说,如果您希望在其他任何地方(无论是在同一个XML模式中还是在另一个XML模式中)用作扩展的基础,则必须创建一个命名(全局,在schema元素下)类型

你的问题很有趣,因为它真的让人想知道扩展某个定义上可以匹配任何东西的东西的目的是什么。就这一点而言,扩展的效果实际上是相反的;它为扩展名中命名的属性创建约束

因此,第一个XSD:

<?xml version="1.0" encoding="utf-8" ?>
<!--W3C Schema generated by QTAssistant/W3C Schema Refactoring Module (http://www.paschidev.com)-->
<xsd:schema targetNamespace="http://tempuri.org/XMLSchema.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/XMLSchema.xsd"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema">

    <xsd:element name="root" type="BaseType"/>

    <xsd:complexType name="BaseType">
        <xsd:anyAttribute processContents="lax" />
    </xsd:complexType>

    <xsd:complexType name="Extending">
        <xsd:complexContent>
            <xsd:extension base="BaseType">
                <xsd:attribute name="new1" type="xsd:int"/>
            </xsd:extension>
        </xsd:complexContent>
    </xsd:complexType>
</xsd:schema>
将S更改为数字,将使XML有效

“扩展”不是很有趣吗

    <xsd:element name="root" type="BaseType"/>
    <xsd:element name="root" type="Extending"/>
Error occurred while loading [], line 3 position 61
The 'new1' attribute is invalid - The value 'S' is invalid according to its datatype 'http://www.w3.org/2001/XMLSchema:int' - The string 'S' is not a valid Int32 value.