XML最佳实践:规划可扩展性

9 浏览
0 Comments

XML最佳实践:规划可扩展性

我目前正在创建一个XML格式。我对它的发展有很大的想法,但起初我想从小处开始,并允许扩展性。我已经阅读了很多关于XML属性与XML元素的主题,何时使用它们,它们的利弊等等。一般共识(请参见这里这里)似乎是尽可能使用XML元素,除非您确定某个数据是原子的,永远不需要扩展,或者真的是关于如何处理元素的元数据。

所以这是我的问题。假设我遵循这个指导,并创建基本的XML文档,例如:


    John Doe

我遵循了我认为是最佳实践。这是最基本的形式,现在可以正常工作,我将数据放在元素中而不是属性中,以防以后要扩展它。现在假设我已经使用这个格式一段时间了,我想要扩展它。如何在不破坏任何现有的处理过程的情况下进行扩展,这些处理过程期望在`name`元素的innertext中包含全名?

如果我像这样扩展它:


    John Doe
        John
        Doe
        John Doe
    

它会破坏现有的处理过程,因为现在`name`的innertext将变为"John DoeJohnDoeJohn Doe"。我知道有办法处理这个问题,但关键是不破坏现有的处理过程,以便innertext仍然包含全名。

我想到的唯一容易扩展的方法是将新值作为`name`的属性。但是如果我想要更复杂的情况呢?比如多个`alias`值。使用属性是不可能的。


     John Doe

似乎唯一真正扩展这个而不破坏现有过程的方法是选择一个新的元素名。


    John Doe
    
        John
        Doe
        John Doe
        Jon Doe
    

这样可以解决我的问题,但我在想“为什么`name`成为元素而不是属性是重要的?”在我看来,最后并不重要,无论`name`是`person`的属性还是子元素的innertext,我最终都不得不使用一个新的元素名。

我意识到这样的混合方法可能是最灵活的,并允许最大的扩展性,但我找不到一个人这样做的例子。如果您从这个开始...


     

它可以轻松地转变为这样,而不破坏任何现有的处理过程,仍然允许进一步扩展。


    
    
    
    
    

在我看来,指导应该是尽可能使用元素,并将值放在标签的某种“value”属性中。并且一如既往,应该遵循常识,适当时应该使用innertext,比如消息、备注或注释字段。

我是否没有理解第一个例子中的一些关键设计元素,这使得它成为更好的方法?是否有人在维护反向兼容性的情况下扩展XML模式,并遇到了相同的问题或解决方案?如果有任何指导或专业技巧,我将不胜感激。

0
0 Comments

问题的原因是要在XML文件中实现可扩展性,以便使用不同版本的解析器进行解析。由于涉及到多个团队和不同技能水平的个人,存在一些人会忽略命名空间而直接解析XML文件的情况。为了解决这个问题,可以使用XML命名空间来标识不同版本的元素,同时保持一个默认的命名空间。这样即使在XML文件中添加了新的版本内容,对于旧版本的解析器仍然是有效的。

解决方法是在XML文件中定义不同版本的命名空间,并使用命名空间前缀来标识不同版本的元素。可以使用xmlns属性来定义命名空间,使用命名空间前缀来区分不同版本的元素。在XML文件中添加新的版本内容时,仍然保持旧版本的命名空间,这样旧版本的解析器仍然能够正确解析XML文件。

此外,还提到了使用JSON作为一个简单的格式来实现可扩展性的建议。

总之,为了实现XML文件的可扩展性,建议使用XML命名空间来标识不同版本的元素,并保持一个默认的命名空间。这样即使在XML文件中添加新的版本内容,旧版本的解析器仍然能够正确解析XML文件。同时,也可以考虑使用JSON作为一个简单的格式来实现可扩展性。

0