2010-09-03 88 views
1

我想使用包含属性的xs:any元素创建xsd架构。使用包含属性的<any>创建xsd架构

像这样

<xs:element name="Task"> 
    <xs:element name="any" type="xs:anyType"> 
     <xs:attribute name="type" type="xs:string" /> 
    </xs:element> 
</xs:element> 

但显然这不是一个有效的模式。

我想做到的是XML模式,看起来像这样:

<Task> 
    <randomField type="bla">test</randomField> 
    <anotherField type="blabla">testing</anotherField> 
    ..... 
</Task> 

所以,你可以输入必须具有属性“类型”字段。

所有这些的目的是在sharepoint中动态创建任务。所以,你可以进入这样一个xml:

<Task> 
    <AssignedTo type="string">jsmith</AssignedTo> 
    <Title type="string">Task1</Title> 
</Task> 

但我希望XML是动态的,所以你可以像交货期,优先输入更多信息......和属性的目的是,如果数据类型来决定是字符串或日期或整型,所以我可以格式化一切正常......提前

THX

+0

如果你的XML可以有任何随机元素,那么拥有一个模式有什么意义? – codinguser 2010-09-03 12:52:39

回答

1

你可能想看看XML schema tutorial

<xs:element name="Task"> 
    <xs:complexType> 
     <xs:any minOccurs="0"/>    
    </xs:complexType> 
</xs:element> 
+0

好吧,我忘了在这里键入xs:complextype,但这并不能解决问题,我无法为xs:any元素输入属性。 thx您的快速回复 – 2010-09-03 13:21:49

+0

如果我理解正确,您正试图添加一个属性到一个未定义的元素? 您是否已经知道哪些特定元素可以(但不一定)出现在XML中?因为如果你这样做,你可以像在其他复杂元素中一样在模式中定义它们,然后将它们放在 ...之间。 这样,他们可以被排除或包括在内。 但是,如果您只想随意添加任意标签,那么您需要将标签留空。在这种情况下,您不能指定属性。我会建议定义元素(如果你知道他们)。 – codinguser 2010-09-03 17:21:08

1

无聊,因为它可能是,我建议你去用不同的方法:

<Task> 
    <Attribute name="AssignedTo" type="string">jsmith</attribute> 
    <Attribute name="Title" type="string">Task1</attribute> 
</Task> 

它会让你的生活更容易。不仅仅是设计模式,还要处理文件等。

+0

是的,但是当你以后分配另一个属性,例如。 xml wouldn be valid,因为duedate没有在xsd中声明..所以我想我真的需要xs:any元素.. – 2010-09-03 13:23:20

+0

@Rise_against:不,我相信@ Stijn意味着你总是会拥有属性'name'。所以'duedate','AssignedTo','Title'等将是该属性的值。 xml将保持有效,因为您不一定需要在模式中定义属性值。 – jasso 2010-09-03 13:54:14