【问题标题】:How can I validate CSS on internal web pages?如何在内部网页上验证 CSS?
【发布时间】:2009-07-16 14:11:35
【问题描述】:

我想查看内部网页,所以我不能直接使用W3C validation 服务。我设法在本地运行 XHTML 验证器,但是 css-validator 存在一些问题。我真的不想设置TomcatJigsaw 以便能够运行Java servlet,命令行选项给了我一条错误消息

Exception in thread "main" java.lang.NoClassDefFoundError: 
org.w3c.tools.resources.ProtocolException at 
org.w3c.css.css.CssValidator.main(CssValidator.java:164)

如何在 Linux 机器上验证本地 CSS?

【问题讨论】:

标签: css linux validation


【解决方案1】:

That jar 是可运行的,但它需要一些额外的库。

检查MANIFEST.MF 文件:

$ unzip -p css-validator.jar META-INF/MANIFEST.MF
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.8.0
Created-By: 1.6.0_26-b03 (Sun Microsystems Inc.)
Main-Class: org.w3c.css.css.CssValidator
Class-Path: . lib/commons-collections-3.2.1.jar lib/commons-lang-2.6.j
 ar lib/jigsaw.jar lib/tagsoup-1.2.jar lib/velocity-1.7.jar lib/xerces
 Impl.jar lib/xml-apis.jar lib/htmlparser-1.3.1.jar

您需要Class-Path 中提到的所有罐子。您可以使用此脚本从maven repository 下载它们:

#!/bin/bash

set -e

mkdir -p lib
curl -LO http://www.w3.org/QA/Tools/css-validator/css-validator.jar
echo "\
http://repo1.maven.org/maven2/commons-collections/commons-collections/3.2.1/commons-collections-3.2.1.jar
http://repo1.maven.org/maven2/commons-lang/commons-lang/2.6/commons-lang-2.6.jar
http://repo1.maven.org/maven2/org/w3c/jigsaw/jigsaw/2.2.6/jigsaw-2.2.6.jar jigsaw.jar
http://repo1.maven.org/maven2/org/ccil/cowan/tagsoup/tagsoup/1.2/tagsoup-1.2.jar
http://repo1.maven.org/maven2/org/apache/velocity/velocity/1.7/velocity-1.7.jar
http://repo1.maven.org/maven2/xerces/xercesImpl/2.11.0/xercesImpl-2.11.0.jar xercesImpl.jar
http://repo1.maven.org/maven2/nu/validator/htmlparser/htmlparser/1.2.1/htmlparser-1.2.1.jar\
" | while read url shortname; do
        if [ -z "$shortname" ]; then
            shortname="${url##*/}"
        fi
        curl -L -o "lib/${shortname}" "${url}"
    done

这样做之后,它就起作用了:

$ java -jar css-validator.jar --output=soap12 file:badcss.html
{vextwarning=false, output=soap12, lang=en, warning=2, medium=all, profile=css3}
<?xml version='1.0' encoding="utf-8"?>
<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope">
    <env:Body>
        <m:cssvalidationresponse
            env:encodingStyle="http://www.w3.org/2003/05/soap-encoding"
            xmlns:m="http://www.w3.org/2005/07/css-validator">
            <m:uri>file:badcss.html</m:uri>
            <m:checkedby>http://jigsaw.w3.org/css-validator/</m:checkedby>
            <m:csslevel>css3</m:csslevel>
            <m:date>2013-03-12T06:40:09Z</m:date>
            <m:validity>false</m:validity>
            <m:result>
                <m:errors xml:lang="en">
                    <m:errorcount>1</m:errorcount>

                <m:errorlist>
                    <m:uri>file:badcss.html</m:uri>

                        <m:error>
                            <m:line>8</m:line>
                            <m:errortype>parse-error</m:errortype>
                            <m:context> h1 </m:context>        
                            <m:errorsubtype>
                                exp
                            </m:errorsubtype>
                            <m:skippedstring>
                                100%
                            </m:skippedstring>

                            <m:message>

                                Property fnt-size doesn&#39;t exist : 
                            </m:message>
                        </m:error>

                    </m:errorlist>

                </m:errors>
                <m:warnings xml:lang="en">
                    <m:warningcount>1</m:warningcount>

                    <m:warninglist>
                        <m:uri>file:badcss.html</m:uri>

                        <m:warning>
                            <m:line>5</m:line>
                            <m:level>0</m:level>
                            <m:message>You should add a &#39;type&#39; attribute with a value of &#39;text/css&#39; to the &#39;style&#39; element</m:message>
                        </m:warning>

                    </m:warninglist>
                    </m:warnings>
            </m:result>
        </m:cssvalidationresponse>
    </env:Body>
</env:Envelope>

【讨论】:

  • lib/xml-apis.jar 的下载路径好像不见了?
  • @SlavenRezic 那个 jar 在javax.xml 包中有接口,但那些是included with Java now。您应该只需要为不包含它的非常旧的 Java 版本添加它。如果您下载 JAR,除非您使用 endorsed standards override mechanism,否则它甚至不会被使用。
  • 这个脚本让我很接近,但 css-validator 还需要 CVS 树中的 org 目录 - @Noyo 的答案包含缺失的位:env CVSROOT=:pserver:anonymous:anonymous@dev.w3 .org:/sources/public cvs checkout 2002/css-validator; mv 2002/css-validator/org/.
  • 这绝对应该是公认的答案!这些库不包含在可下载的 JAR 中是荒谬的,而且文档中也没有说它们不存在!谢谢@andrewdotn!
  • 我不得不把http:改成https:,因为我的版本需要htmlparser-1.3.1,所以我使用https://repo1.maven.org/maven2/org/htmlparser/htmlparser/1.6/htmlparser-1.6.jar htmlparser-1.3.1.jar这一行
【解决方案2】:

您可以从命令行调用W3C validator

命令行使用

任何安装了 Java 的计算机都可以 还从 终端/控制台作为命令行 工具。下载 css-validator.jar jar 存档(或使用 ant jar 构建它) 并将其运行为:

java -jar css-validator.jar http://www.w3.org/

注意:css-validator.jar 文件必须 位于完全相同的水平 lib/ 文件夹才能正常工作。

更新:为了让它工作,我检查了 CVS 的完整发行版并使用包含的 build.xml 运行 ant。它下载了除servlet.jar 之外的所有依赖项。为了解决这个问题,我下载了Tomcat 6 的二进制发行版并将其解压缩。然后,我为css-validator 编辑了build.xml 以反映servlet.lib 的位置:

<property name="servlet.lib" 
 value="E:/Downloads/apache-tomcat-6.0.20/lib/servlet-api.jar"/>

然后再次运行ant。这在从 CVS 签出的目录的顶层中生成了 css-validator.jar 文件,其中 lib 子目录包含它所依赖的其他 jars。然后,我能够成功运行验证器:

C:\Temp\validator\2002\css-validator&gt; java -jar css-validator.jar http://www.unur.com/

【讨论】:

  • 嗯.. 我试过了,但我得到了上面的错误消息。我不确定我是否理解注释的含义。如果放入 /lib 文件夹,它也不起作用。这里指的是哪个 lib 文件夹?
  • 我想我明白了。我从dev.w3.org/cvsweb/2002/css-validator 下载了 CVS 的源代码......我还没有构建它,但似乎从命令行运行验证器仍然需要在 Jigsaw 的上下文中。我认为那是文档所指的/lib 目录。
  • 显然 Jigsaw 的 servlet.jar 现在包含在 css-validator 源中:2002/css-validator/tmp/Jigsaw/classes/servlet.jar
  • 我为懒惰的below 添加了一个简化的脚本解决方案。只需复制粘贴并等待!
【解决方案3】:

对于懒惰的人,这是我按照思南的建议编写的脚本:

#!/bin/sh
# W3C CSS Validator Install Script --------------
# installs W3C CSS Validator
# requires: ant, wget, javac
# see: http://jigsaw.w3.org/css-validator/DOWNLOAD.html
# see: http://esw.w3.org/CssValidator
# see: http://thecodetrain.co.uk/2009/02/running-the-w3c-css-validator-locally-from-the-command-line/
# see: http://stackoverflow.com/a/3303298/357774
##wget "http://www.w3.org/QA/Tools/css-validator/css-validator.jar"
#sudo aptitude install -y ant # uncomment if you don't have ant
CVSROOT=:pserver:anonymous:anonymous@dev.w3.org:/sources/public cvs checkout 2002/css-validator 
mkdir 2002/css-validator/lib
TOMCAT6_VERSION='6.0.45'
wget "http://www.apache.org/dist/tomcat/tomcat-6/v$TOMCAT6_VERSION/bin/apache-tomcat-$TOMCAT6_VERSION.tar.gz"
tar xvf apache-tomcat-$TOMCAT6_VERSION.tar.gz
mv apache-tomcat-$TOMCAT6_VERSION/lib/servlet-api.jar 2002/css-validator/lib/servlet.jar
rm -rf apache-tomcat-$TOMCAT6_VERSION apache-tomcat-$TOMCAT6_VERSION.tar.gz
cd 2002/css-validator
ant jar
# usage example: java -jar css-validator.jar "http://csszengarden.com/"

这应该可以工作,至少在下一次软件依赖更新破坏 ant 构建脚本之前(请随意参数化版本)。

希望这会有所帮助!

【讨论】:

  • 404 在下载链接上,这是当前的:newverhost.com/pub/tomcat/tomcat-6/v6.0.29/bin/…
  • 谢谢!我更新了脚本以直接从 apache 获取 $TOMCAT6_VERSION(任何想要使用该脚本的人都可以轻松更新)。
  • 我更新了上面的 Tomcat 版本,但是在运行 ant jar 之前,我还需要使用 sed -i 's/commons-collections-3.2.1/commons-collections-3.2.2/g' build.xml 更改版本号。如果有人可以确认这是正确的,我们可以更新上面的脚本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多